storage duration with compound literals even in C99. [bsc#1177947] OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc48?expand=0&rev=235
39 lines
1.5 KiB
Diff
39 lines
1.5 KiB
Diff
commit 7278465e24b3d5a399ae2474f12870a91ba6af62
|
|
Author: Marek Polacek <polacek@redhat.com>
|
|
Date: Fri Oct 17 21:02:54 2014 +0000
|
|
|
|
re PR c/63567 (Linux kernel build error due to non-static initializers)
|
|
|
|
PR c/63567
|
|
* c-typeck.c (digest_init): Allow initializing objects with static
|
|
storage duration with compound literals even in C99 and add pedwarn
|
|
for it.
|
|
|
|
* gcc.dg/pr61096-1.c: Change dg-error into dg-warning.
|
|
* gcc.dg/pr63567-1.c: New test.
|
|
* gcc.dg/pr63567-2.c: New test.
|
|
|
|
From-SVN: r216416
|
|
|
|
Index: gcc/c/c-typeck.c
|
|
===================================================================
|
|
--- gcc/c/c-typeck.c (revision 235439)
|
|
+++ gcc/c/c-typeck.c (working copy)
|
|
@@ -6223,13 +6223,15 @@ digest_init (location_t init_loc, tree t
|
|
inside_init = convert (type, inside_init);
|
|
|
|
if (require_constant
|
|
- && (code == VECTOR_TYPE || !flag_isoc99)
|
|
&& TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
|
|
{
|
|
/* As an extension, allow initializing objects with static storage
|
|
duration with compound literals (which are then treated just as
|
|
the brace enclosed list they contain). Also allow this for
|
|
vectors, as we can only assign them with compound literals. */
|
|
+ if (flag_isoc99 && code != VECTOR_TYPE)
|
|
+ pedwarn_init (init_loc, OPT_Wpedantic, "initializer element "
|
|
+ "is not constant");
|
|
tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
|
|
inside_init = DECL_INITIAL (decl);
|
|
}
|