From: Markus Trippelsdorf Date: Mon, 10 Sep 2012 09:50:02 +0000 (+0000) Subject: re PR middle-end/54515 (cc1plus sigsegv -O2 anonymous namespace) X-Git-Tag: releases/gcc-4.6.4~377 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb5ca86e40624440c63dfbabd4011a3d5437cb6a;p=thirdparty%2Fgcc.git re PR middle-end/54515 (cc1plus sigsegv -O2 anonymous namespace) 2012-09-10 Markus Trippelsdorf 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8bb95d33122..bf56b1f62607 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-10 Markus Trippelsdorf + + 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 Backport from 2012-09-04 mainline r190919 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 29ae25cac8b4..559857a04f4e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-09-10 Markus Trippelsdorf + + PR middle-end/54515 + * g++.dg/tree-ssa/pr54515.C: new testcase + 2012-08-10 Ulrich Weigand 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 index 000000000000..11ed46893bf9 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr54515.C @@ -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); +} diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 19646a7a57c3..7f91a936506f 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -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));