[executable semantics] silence known, and detect new, crashes (#312)

* Add assertion to detect UB in interpreter.cpp

This change, applied to 6e5070d ("Adapting jsiek's executable semantics tooling
for commit. (#237)"), causes the if2.6c test to segfault.  Becase the assertion
fires only when `stmt == nullptr` and no code has permission to change `stmt`
(it is `const`) before it is dereferenced in the `switch`, and nothiing in
`PrintStatement` is supposed to exit the program, the assertion is a valid
change that detects a bug.

The crash was originally manifest in 29a5994 ("Executable Semantics: 1st-class
stacks (#296)").

* Temporarily disable the if2 test pending #311

See https://github.com/carbon-language/carbon-lang/issues/311

* [executable semantics] Record exit code on expected error.

This will prevent a final segfault from sneaking by, detected as a passing test.
A more principled follow-up commit would bottleneck detected error exit
reporting and have it write something to std::cerr that can be recognized.
This commit is contained in:
Dave Abrahams
2021-02-27 18:52:22 -08:00
committed by GitHub
parent 2205fd52ce
commit 2afbfd6146
10 changed files with 15 additions and 3 deletions
+1
View File
@@ -41,3 +41,4 @@ return n;
13: type error in call
expected: Int
actual: Tuple(0 = Int)
EXIT CODE: 255
+1
View File
@@ -17,3 +17,4 @@ return f(0 = 1);
10: type error in call
expected: Int
actual: Tuple(0 = Int)
EXIT CODE: 255
+1
View File
@@ -23,3 +23,4 @@ return b;
15: type error in call
expected: Int
actual: Tuple(0 = Int)
EXIT CODE: 255
+1
View File
@@ -25,3 +25,4 @@ return f(0 = xy);
10: type error in call
expected: Tuple(0 = Int, 1 = Int)
actual: Tuple(0 = Tuple(0 = Int, 1 = Int))
EXIT CODE: 255
+1
View File
@@ -19,3 +19,4 @@ return f(0 = 2);
9: type error in call
expected: Int
actual: Tuple(0 = Int)
EXIT CODE: 255
+1
View File
@@ -23,3 +23,4 @@ return f(0 = (- 1));
11: type error in call
expected: Int
actual: Tuple(0 = Int)
EXIT CODE: 255
+1
View File
@@ -1 +1,2 @@
executable_semantics/testdata/undef1.6c:8: syntax error
EXIT CODE: 255
+1
View File
@@ -1,3 +1,4 @@
********** source program **********
********** type checking **********
error, program must contain a function named `main`
EXIT CODE: 255