mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Adds a simple script to merge stdout/stderr and put on labels. This is hidden to the RUN line using lit.cfg.py. This is my solution to addressing how errors printed by the toolchain break sorting of stdout output; just put stdout first. We could also have toggles for interleaving output or such, which might help test whether we do it properly. This also moves some previous-distributed replacement logic into lit_autoupdate_base.py: I think having that adjacent to lit.cfg.py is probably the better choice, and it reduces duplication in toolchain scripts. It happens here because I need to change the resulting commands to include the merge.
81 lines
1.5 KiB
Plaintext
81 lines
1.5 KiB
Plaintext
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
// RUN: %{explorer} %s | %{FileCheck-strict} %s
|
|
// RUN: %{explorer-trace} %s | %{FileCheck-allow-unmatched} %s
|
|
// AUTOUPDATE: %{explorer} %s
|
|
// CHECK:STDOUT: result: 0
|
|
|
|
package ExplorerTest api;
|
|
|
|
interface I {
|
|
fn F() -> i32;
|
|
fn M[me: Self]() -> i32;
|
|
}
|
|
class A {
|
|
var n: i32;
|
|
impl as I {
|
|
fn F() -> i32 { return 1; }
|
|
fn M[me: Self]() -> i32 { return 2; }
|
|
}
|
|
fn G[me: Self]() -> i32 { return 3; }
|
|
}
|
|
impl i32 as I {
|
|
fn F() -> i32 { return 4; }
|
|
fn M[me: Self]() -> i32 { return 5; }
|
|
}
|
|
|
|
alias IF = I.F;
|
|
alias IM = I.M;
|
|
alias AIF = A.(IF);
|
|
alias AIM = A.(IM);
|
|
alias AG = A.G;
|
|
alias i32IF = i32.(IF);
|
|
alias i32IM = i32.(IM);
|
|
|
|
fn Main() -> i32 {
|
|
var a: A = {.n = 0};
|
|
// TODO: Use != once we support it.
|
|
if (not (A.(IF)() == 1)) {
|
|
return 1;
|
|
}
|
|
if (not (a.(IF)() == 1)) {
|
|
return 2;
|
|
}
|
|
if (not (a.(IM)() == 2)) {
|
|
return 3;
|
|
}
|
|
if (not (a.(A.(IM))() == 2)) {
|
|
return 4;
|
|
}
|
|
if (not (AIF() == 1)) {
|
|
return 5;
|
|
}
|
|
if (not (a.(AIM)() == 2)) {
|
|
return 6;
|
|
}
|
|
if (not (a.(AG)() == 3)) {
|
|
return 7;
|
|
}
|
|
if (not (i32.(IF)() == 4)) {
|
|
return 8;
|
|
}
|
|
if (not (0.(IF)() == 4)) {
|
|
return 9;
|
|
}
|
|
if (not (0.(IM)() == 5)) {
|
|
return 10;
|
|
}
|
|
if (not (0.(i32.(IM))() == 5)) {
|
|
return 11;
|
|
}
|
|
if (not (i32IF() == 4)) {
|
|
return 12;
|
|
}
|
|
if (not (0.(i32IM)() == 5)) {
|
|
return 13;
|
|
}
|
|
return 0;
|
|
}
|