Improve error handling
Don't segfault if the right-hand operand of a binary operator is missing.
Don't segfault if a semicolon is missing at the end of a forward
declaration.
diff --git a/libacc/acc.cpp b/libacc/acc.cpp
index a84bd91..c527a96 100644
--- a/libacc/acc.cpp
+++ b/libacc/acc.cpp
@@ -3910,6 +3910,8 @@
next();
} else if (t == EOF ) {
error("Unexpected EOF.");
+ } else if (t == ';') {
+ error("Unexpected ';'");
} else if (!checkSymbol(t)) {
// Don't have to do anything special here, the error
// message was printed by checkSymbol() above.
@@ -4038,7 +4040,12 @@
} else {
pGen->pushR0();
binaryOp(level);
-
+ // Check for syntax error.
+ if (pGen->getR0Type() == NULL) {
+ // We failed to parse a right-hand argument.
+ // Push a dummy value so we don't fail
+ pGen->li(0, mkpInt);
+ }
if ((level == 4) | (level == 5)) {
pGen->gcmp(t, mkpInt);
} else {
@@ -4595,6 +4602,8 @@
// Function declaration
if (accept(';')) {
// forward declaration.
+ } else if (tok != '{') {
+ error("expected '{'");
} else {
if (name) {
/* patch forward references (XXX: does not work for function