aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2014-10-17 21:02:54 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2014-10-17 21:02:54 +0000
commit7278465e24b3d5a399ae2474f12870a91ba6af62 (patch)
treee31df103a9c2a703683c07fab2d8a2abd2dc0a27 /gcc/c
parentd83fa499b9895618ae8f63c004f3090b71d488ae (diff)
downloadgcc-7278465e24b3d5a399ae2474f12870a91ba6af62.zip
gcc-7278465e24b3d5a399ae2474f12870a91ba6af62.tar.gz
gcc-7278465e24b3d5a399ae2474f12870a91ba6af62.tar.bz2
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
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog7
-rw-r--r--gcc/c/c-typeck.c4
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 294b4ef..35b8dcd 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,5 +1,12 @@
2014-10-17 Marek Polacek <polacek@redhat.com>
+ 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.
+
+2014-10-17 Marek Polacek <polacek@redhat.com>
+
PR c/63543
* c-tree.h (C_TYPE_ERROR_REPORTED): Define.
* c-typeck.c (build_indirect_ref): Don't print the "dereferencing..."
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 324736a..0dd3366 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -6683,13 +6683,15 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype,
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);
}