}
if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
- && DECL_SIZE (decl) != 0
- && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
- error_with_decl (decl, "storage size of `%s' isn't constant");
+ && DECL_SIZE (decl) != 0)
+ if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
+ constant_expression_warning (DECL_SIZE (decl));
+ else
+ error_with_decl (decl, "storage size of `%s' isn't constant");
}
/* Output the assembler code and/or RTL code for variables and functions,
pedwarn ("ANSI C forbids zero-size array `%s'", name);
if (TREE_CODE (size) == INTEGER_CST)
{
+ constant_expression_warning (size);
if (INT_CST_LT (size, integer_zero_node))
{
error ("size of array `%s' is negative", name);
/* Detect invalid bit-field size. */
if (DECL_INITIAL (x))
STRIP_NOPS (DECL_INITIAL (x));
- if (DECL_INITIAL (x) && TREE_CODE (DECL_INITIAL (x)) != INTEGER_CST)
- {
- error_with_decl (x, "bit-field `%s' width not an integer constant");
- DECL_INITIAL (x) = NULL;
- }
+ if (DECL_INITIAL (x))
+ if (TREE_CODE (DECL_INITIAL (x)) == INTEGER_CST)
+ constant_expression_warning (DECL_INITIAL (x));
+ else
+ {
+ error_with_decl (x, "bit-field `%s' width not an integer constant");
+ DECL_INITIAL (x) = NULL;
+ }
/* Detect invalid bit-field type. */
if (DECL_INITIAL (x)
if (value)
STRIP_TYPE_NOPS (value);
- if (value != 0 && TREE_CODE (value) != INTEGER_CST)
- {
- error ("enumerator value for `%s' not integer constant",
- IDENTIFIER_POINTER (name));
- value = 0;
- }
+ if (value != 0)
+ if (TREE_CODE (value) == INTEGER_CST)
+ constant_expression_warning (value);
+ else
+ {
+ error ("enumerator value for `%s' not integer constant",
+ IDENTIFIER_POINTER (name));
+ value = 0;
+ }
/* Default based on previous value. */
/* It should no longer be possible to have NON_LVALUE_EXPR