diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/c-typeck.c | 15 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.dg/noncompile/20010524-1.c | 2 |
3 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f464a4a..c2c6e29 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2001-05-24 Mark Mitchell <mark@codesourcery.com> + * c-typeck.c (digest_init): Issue error messages about + invalid constants, not warnings. + +2001-05-24 Mark Mitchell <mark@codesourcery.com> + * invoke.texi (-fno-builtin): Document that this is always on in C++. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 3cbf6c6..71dae28 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -4791,14 +4791,21 @@ digest_init (type, init, require_constant, constructor_constant) if (flag_pedantic_errors) inside_init = error_mark_node; } - else if (require_constant && ! TREE_CONSTANT (inside_init)) + else if (require_constant + && (!TREE_CONSTANT (inside_init) + /* This test catches things like `7 / 0' which + result in an expression for which TREE_CONSTANT + is true, but which is not actually something + that is a legal constant. We really should not + be using this function, because it is a part of + the back-end. Instead, the expression should + already have been turned into ERROR_MARK_NODE. */ + || !initializer_constant_valid_p (inside_init, + TREE_TYPE (inside_init)))) { error_init ("initializer element is not constant"); inside_init = error_mark_node; } - else if (require_constant - && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0) - pedwarn ("initializer element is not computable at load time"); return inside_init; } diff --git a/gcc/testsuite/gcc.dg/noncompile/20010524-1.c b/gcc/testsuite/gcc.dg/noncompile/20010524-1.c new file mode 100644 index 0000000..754a38c --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/20010524-1.c @@ -0,0 +1,2 @@ +int i = 7 / 0; /* { dg-error "not constant" } */ + |
