diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3ef141300..9cf05d2dc 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4305,8 +4305,13 @@ ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)) if (!ED_IsConst (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { Error ("Constant expression expected"); /* To avoid any compiler errors, make the expression a valid const */ - Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_RESULT; + Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_MAKE; Expr.Flags |= E_LOC_NONE; + + /* Remove any non-constant code generated */ + if (!ED_CodeRangeIsEmpty (&Expr)) { + RemoveCodeRange (&Expr.Start, &Expr.End); + } } /* Return by value */ @@ -4331,6 +4336,11 @@ ExprDesc NoCodeConstAbsIntExpr (void (*Func) (ExprDesc*)) Error ("Constant integer expression expected"); /* To avoid any compiler errors, make the expression a valid const */ ED_MakeConstAbsInt (&Expr, 1); + + /* Remove any non-constant code generated */ + if (!ED_CodeRangeIsEmpty (&Expr)) { + RemoveCodeRange (&Expr.Start, &Expr.End); + } } /* Return by value */ diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c index a7c1b6c56..e98fb024d 100644 --- a/test/ref/custom-reference-error.c +++ b/test/ref/custom-reference-error.c @@ -14,7 +14,7 @@ */ typedef short return_t; -#error /* produce an error */ +#error This is an/* produce an error */error return_t main(int argc, char* argv[]) { @@ -22,3 +22,6 @@ return_t main(int argc, char* argv[]) n = 0; /* produce an error */ /* produce a warning */ } + +int arr[main(0, 0)]; /* produce an error */ +int b = 0; diff --git a/test/ref/custom-reference-error.cref b/test/ref/custom-reference-error.cref index b21c72dce..9ffa581cd 100644 --- a/test/ref/custom-reference-error.cref +++ b/test/ref/custom-reference-error.cref @@ -1,6 +1,7 @@ -custom-reference-error.c:17: Error: #error +custom-reference-error.c:17: Error: #error: This is an error custom-reference-error.c:21: Error: Call to undeclared function 'printf' custom-reference-error.c:22: Error: Undeclared identifier 'n' custom-reference-error.c:24: Warning: Control reaches end of non-void function [-Wreturn-type] custom-reference-error.c:24: Warning: Parameter 'argc' is never used custom-reference-error.c:24: Warning: Parameter 'argv' is never used +custom-reference-error.c:26: Error: Constant integer expression expected