aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2017-05-17 09:59:20 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2017-05-17 09:59:20 +0000
commit142473df8ea4f3ff7ebd480bf827bfb795da6861 (patch)
tree5c3bbb54b2f753777427ba964bc1673eb4254256
parent26092cc782a0e027601d4764caa15accefdb56d1 (diff)
downloadgcc-142473df8ea4f3ff7ebd480bf827bfb795da6861.zip
gcc-142473df8ea4f3ff7ebd480bf827bfb795da6861.tar.gz
gcc-142473df8ea4f3ff7ebd480bf827bfb795da6861.tar.bz2
re PR sanitizer/80659 (-fsanitize=address evokes ICE in in gimplify_switch_expr)
PR sanitizer/80659 * c-decl.c (build_compound_literal): Set DECL_ARTIFICIAL and DECL_IGNORED_P even for non-static compound literals. * gcc.dg/asan/pr80659.c: New test. From-SVN: r248143
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-decl.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/asan/pr80659.c13
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index e0c1e99..6862b53 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-17 Marek Polacek <polacek@redhat.com>
+
+ PR sanitizer/80659
+ * c-decl.c (build_compound_literal): Set DECL_ARTIFICIAL and
+ DECL_IGNORED_P even for non-static compound literals.
+
2017-05-17 Martin Liska <mliska@suse.cz>
* c-decl.c (c_parse_final_cleanups): Introduce dump_flags_t type and
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 5b4bb49..bd6c4c1 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -5261,6 +5261,8 @@ build_compound_literal (location_t loc, tree type, tree init, bool non_const)
DECL_CONTEXT (decl) = current_function_decl;
TREE_USED (decl) = 1;
DECL_READ_P (decl) = 1;
+ DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
TREE_TYPE (decl) = type;
TREE_READONLY (decl) = (TYPE_READONLY (type)
|| (TREE_CODE (type) == ARRAY_TYPE
@@ -5297,8 +5299,6 @@ build_compound_literal (location_t loc, tree type, tree init, bool non_const)
set_compound_literal_name (decl);
DECL_DEFER_OUTPUT (decl) = 1;
DECL_COMDAT (decl) = 1;
- DECL_ARTIFICIAL (decl) = 1;
- DECL_IGNORED_P (decl) = 1;
pushdecl (decl);
rest_of_decl_compilation (decl, 1, 0);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c4f7687..44f5841 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-17 Marek Polacek <polacek@redhat.com>
+
+ PR sanitizer/80659
+ * gcc.dg/asan/pr80659.c: New test.
+
2017-05-17 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* gcc.dg/tree-ssa/pr78886.c: Use __SIZE_TYPE__ instead of
diff --git a/gcc/testsuite/gcc.dg/asan/pr80659.c b/gcc/testsuite/gcc.dg/asan/pr80659.c
new file mode 100644
index 0000000..0cbf2e4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr80659.c
@@ -0,0 +1,13 @@
+/* PR sanitizer/80659 */
+/* { dg-do compile } */
+
+void
+foo (int a)
+{
+ switch (a)
+ {
+ case 0:
+ (int[3]) { };
+ int h;
+ }
+}