diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f464a4a05f43..c2c6e2992e54 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-05-24 Mark Mitchell + + * c-typeck.c (digest_init): Issue error messages about + invalid constants, not warnings. + 2001-05-24 Mark Mitchell * invoke.texi (-fno-builtin): Document that this is always on diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 3cbf6c6f3efd..71dae28e909c 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 000000000000..754a38c147f1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/20010524-1.c @@ -0,0 +1,2 @@ +int i = 7 / 0; /* { dg-error "not constant" } */ +