Fixed false "Non constant initializers" error messages on wrong places, which could be resulted from failed array declarations etc.

This commit is contained in:
acqn 2024-01-10 04:43:50 +08:00
parent 2564aaa12c
commit 94dfc08c0e
3 changed files with 17 additions and 3 deletions

View File

@ -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 */

View File

@ -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;

View File

@ -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