aboutsummaryrefslogtreecommitdiff
path: root/gcc/cppexp.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cppexp.c')
-rw-r--r--gcc/cppexp.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index 5766a79..e5b5ef7 100644
--- a/gcc/cppexp.c
+++ b/gcc/cppexp.c
@@ -54,12 +54,10 @@ struct op
/* With -O2, gcc appears to produce nice code, moving the error
message load and subsequent jump completely out of the main path. */
-#define CPP_ICE(msgid) \
- do { cpp_ice (pfile, msgid); goto syntax_error; } while(0)
#define SYNTAX_ERROR(msgid) \
- do { cpp_error (pfile, msgid); goto syntax_error; } while(0)
+ do { cpp_error (pfile, DL_ERROR, msgid); goto syntax_error; } while(0)
#define SYNTAX_ERROR2(msgid, arg) \
- do { cpp_error (pfile, msgid, arg); goto syntax_error; } while(0)
+ do { cpp_error (pfile, DL_ERROR, msgid, arg); goto syntax_error; } while(0)
struct suffix
{
@@ -172,23 +170,26 @@ parse_number (pfile, tok)
if (CPP_WTRADITIONAL (pfile)
&& sufftab[i].u
&& ! cpp_sys_macro_p (pfile))
- cpp_warning (pfile, "traditional C rejects the `U' suffix");
+ cpp_error (pfile, DL_WARNING, "traditional C rejects the `U' suffix");
if (sufftab[i].l == 2 && CPP_OPTION (pfile, pedantic)
&& ! CPP_OPTION (pfile, c99))
- cpp_pedwarn (pfile, "too many 'l' suffixes in integer constant");
+ cpp_error (pfile, DL_PEDWARN,
+ "too many 'l' suffixes in integer constant");
}
if (base <= largest_digit)
- cpp_pedwarn (pfile, "integer constant contains digits beyond the radix");
+ cpp_error (pfile, DL_PEDWARN,
+ "integer constant contains digits beyond the radix");
if (overflow)
- cpp_pedwarn (pfile, "integer constant out of range");
+ cpp_error (pfile, DL_PEDWARN, "integer constant out of range");
/* If too big to be signed, consider it unsigned. */
else if ((HOST_WIDEST_INT) n < 0 && ! op.unsignedp)
{
if (base == 10)
- cpp_warning (pfile, "integer constant is so large that it is unsigned");
+ cpp_error (pfile, DL_WARNING,
+ "integer constant is so large that it is unsigned");
op.unsignedp = 1;
}
@@ -197,7 +198,7 @@ parse_number (pfile, tok)
return op;
invalid_suffix:
- cpp_error (pfile, "invalid suffix '%.*s' on integer constant",
+ cpp_error (pfile, DL_ERROR, "invalid suffix '%.*s' on integer constant",
(int) (end - p), p);
syntax_error:
op.op = CPP_ERROR;
@@ -230,20 +231,21 @@ parse_defined (pfile)
node = token->val.node;
if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
{
- cpp_error (pfile, "missing ')' after \"defined\"");
+ cpp_error (pfile, DL_ERROR, "missing ')' after \"defined\"");
node = 0;
}
}
else
{
- cpp_error (pfile, "operator \"defined\" requires an identifier");
+ cpp_error (pfile, DL_ERROR,
+ "operator \"defined\" requires an identifier");
if (token->flags & NAMED_OP)
{
cpp_token op;
op.flags = 0;
op.type = token->type;
- cpp_error (pfile,
+ cpp_error (pfile, DL_ERROR,
"(\"%s\" is an alternative token for \"%s\" in C++)",
cpp_token_as_text (pfile, token),
cpp_token_as_text (pfile, &op));
@@ -255,7 +257,8 @@ parse_defined (pfile)
else
{
if (pfile->context != initial_context)
- cpp_warning (pfile, "this use of \"defined\" may not be portable");
+ cpp_error (pfile, DL_WARNING,
+ "this use of \"defined\" may not be portable");
op.value = node->type == NT_MACRO;
op.unsignedp = 0;
@@ -326,8 +329,9 @@ lex (pfile, skip_evaluation)
and stdbool.h has not been included. */
if (CPP_PEDANTIC (pfile)
&& ! cpp_defined (pfile, DSC("__bool_true_false_are_defined")))
- cpp_pedwarn (pfile, "ISO C++ does not permit \"%s\" in #if",
- NODE_NAME (token->val.node));
+ cpp_error (pfile, DL_PEDWARN,
+ "ISO C++ does not permit \"%s\" in #if",
+ NODE_NAME (token->val.node));
return op;
}
else
@@ -337,8 +341,8 @@ lex (pfile, skip_evaluation)
op.value = 0;
if (CPP_OPTION (pfile, warn_undef) && !skip_evaluation)
- cpp_warning (pfile, "\"%s\" is not defined",
- NODE_NAME (token->val.node));
+ cpp_error (pfile, DL_WARNING, "\"%s\" is not defined",
+ NODE_NAME (token->val.node));
return op;
}
@@ -378,7 +382,8 @@ integer_overflow (pfile)
cpp_reader *pfile;
{
if (CPP_PEDANTIC (pfile))
- cpp_pedwarn (pfile, "integer overflow in preprocessor expression");
+ cpp_error (pfile, DL_PEDWARN,
+ "integer overflow in preprocessor expression");
}
/* Handle shifting A left by B bits. UNSIGNEDP is non-zero if A is
@@ -657,8 +662,8 @@ _cpp_parse_expr (pfile)
switch (top[1].op)
{
default:
- cpp_ice (pfile, "impossible operator '%s'",
- op_as_text (pfile, top[1].op));
+ cpp_error (pfile, DL_ICE, "impossible operator '%s'",
+ op_as_text (pfile, top[1].op));
goto syntax_error;
case CPP_NOT: UNARY(!); break;
@@ -688,7 +693,7 @@ _cpp_parse_expr (pfile)
top->flags |= HAVE_VALUE;
if (CPP_WTRADITIONAL (pfile))
- cpp_warning (pfile,
+ cpp_error (pfile, DL_WARNING,
"traditional C rejects the unary plus operator");
}
else
@@ -767,7 +772,8 @@ _cpp_parse_expr (pfile)
break;
case CPP_COMMA:
if (CPP_PEDANTIC (pfile))
- cpp_pedwarn (pfile, "comma operator in operand of #if");
+ cpp_error (pfile, DL_PEDWARN,
+ "comma operator in operand of #if");
top->value = v2;
top->unsignedp = unsigned2;
break;
@@ -860,7 +866,10 @@ _cpp_parse_expr (pfile)
result = (top[1].value != 0);
if (top != stack)
- CPP_ICE ("unbalanced stack in #if");
+ {
+ cpp_error (pfile, DL_ICE, "unbalanced stack in #if");
+ goto syntax_error;
+ }
else if (!(top[1].flags & HAVE_VALUE))
{
SYNTAX_ERROR ("#if with no expression");