]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/54515 (cc1plus sigsegv -O2 anonymous namespace)
authorMarkus Trippelsdorf <markus@trippelsdorf.de>
Mon, 10 Sep 2012 09:50:02 +0000 (09:50 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 10 Sep 2012 09:50:02 +0000 (09:50 +0000)
2012-09-10  Markus Trippelsdorf  <markus@trippelsdorf.de>

PR middle-end/54515
* tree-sra.c (disqualify_base_of_expr): Check for possible
NULL_TREE returned by get_base_address()

* g++.dg/tree-ssa/pr54515.C: new testcase

From-SVN: r191131

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr54515.C [new file with mode: 0644]
gcc/tree-sra.c

index e8bb95d33122c80a48b7122acbe36dd6e8664c10..bf56b1f62607af3201abc23f76d1904ceca6a44c 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-10  Markus Trippelsdorf  <markus@trippelsdorf.de>
+
+       PR middle-end/54515
+       * tree-sra.c (disqualify_base_of_expr): Check for possible
+       NULL_TREE returned by get_base_address()
+
 2012-09-05  Bin Cheng  <bin.cheng@arm.com>
 
        Backport from 2012-09-04 mainline r190919
index 29ae25cac8b4f3499a9773a049b86207ac762340..559857a04f4e073804804694c441f6a484cf6f60 100644 (file)
@@ -1,3 +1,8 @@
+2012-09-10  Markus Trippelsdorf  <markus@trippelsdorf.de>
+
+       PR middle-end/54515
+       * g++.dg/tree-ssa/pr54515.C: new testcase
+
 2012-08-10  Ulrich Weigand  <ulrich.weigand@linaro.org>
 
        Backport from mainline
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr54515.C b/gcc/testsuite/g++.dg/tree-ssa/pr54515.C
new file mode 100644 (file)
index 0000000..11ed468
--- /dev/null
@@ -0,0 +1,19 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+template < typename T > T h2le (T)
+{
+    T a;
+    unsigned short &b = a;
+    short c = 0;
+    unsigned char (&d)[2] = reinterpret_cast < unsigned char (&)[2] > (c);
+    unsigned char (&e)[2] = reinterpret_cast < unsigned char (&)[2] > (b);
+    e[0] = d[0];
+    return a;
+}
+
+void
+bar ()
+{
+    h2le ((unsigned short) 0);
+}
index 19646a7a57c35f7543f430f142c617adac95cf52..7f91a936506fc91651c72f4beb06aa230bf23745 100644 (file)
@@ -910,7 +910,8 @@ static void
 disqualify_base_of_expr (tree t, const char *reason)
 {
   t = get_base_address (t);
-  if (sra_mode == SRA_MODE_EARLY_IPA
+  if (t
+      && sra_mode == SRA_MODE_EARLY_IPA
       && TREE_CODE (t) == MEM_REF)
     t = get_ssa_base_param (TREE_OPERAND (t, 0));