Commit 5a27a197 by Richard Guenther Committed by Richard Biener

re PR middle-end/54515 (cc1plus sigsegv -O2 anonymous namespace)

2012-09-11  Richard Guenther  <rguenther@suse.de>

	PR middle-end/54515
	* gimple.c (get_base_address): Do not return NULL_TREE apart
	from for WITH_SIZE_EXPR.
	* gimple-fold.c (canonicalize_constructor_val): Do not call
	get_base_address when not necessary.

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

From-SVN: r191174
parent d0150401
2012-09-11 Richard Guenther <rguenther@suse.de>
PR middle-end/54515
* gimple.c (get_base_address): Do not return NULL_TREE apart
from for WITH_SIZE_EXPR.
* gimple-fold.c (canonicalize_constructor_val): Do not call
get_base_address when not necessary.
2012-09-10 Andrew Pinski <apinski@cavium.com> 2012-09-10 Andrew Pinski <apinski@cavium.com>
PR tree-opt/54362 PR tree-opt/54362
......
...@@ -154,13 +154,15 @@ canonicalize_constructor_val (tree cval, tree from_decl) ...@@ -154,13 +154,15 @@ canonicalize_constructor_val (tree cval, tree from_decl)
} }
if (TREE_CODE (cval) == ADDR_EXPR) if (TREE_CODE (cval) == ADDR_EXPR)
{ {
tree base = get_base_address (TREE_OPERAND (cval, 0)); tree base = NULL_TREE;
if (!base && TREE_CODE (TREE_OPERAND (cval, 0)) == COMPOUND_LITERAL_EXPR) if (TREE_CODE (TREE_OPERAND (cval, 0)) == COMPOUND_LITERAL_EXPR)
{ {
base = COMPOUND_LITERAL_EXPR_DECL (TREE_OPERAND (cval, 0)); base = COMPOUND_LITERAL_EXPR_DECL (TREE_OPERAND (cval, 0));
if (base) if (base)
TREE_OPERAND (cval, 0) = base; TREE_OPERAND (cval, 0) = base;
} }
else
base = get_base_address (TREE_OPERAND (cval, 0));
if (!base) if (!base)
return NULL_TREE; return NULL_TREE;
......
...@@ -2878,16 +2878,12 @@ get_base_address (tree t) ...@@ -2878,16 +2878,12 @@ get_base_address (tree t)
&& TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR) && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
t = TREE_OPERAND (TREE_OPERAND (t, 0), 0); t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
if (TREE_CODE (t) == SSA_NAME /* ??? Either the alias oracle or all callers need to properly deal
|| DECL_P (t) with WITH_SIZE_EXPRs before we can look through those. */
|| TREE_CODE (t) == STRING_CST if (TREE_CODE (t) == WITH_SIZE_EXPR)
|| TREE_CODE (t) == CONSTRUCTOR
|| INDIRECT_REF_P (t)
|| TREE_CODE (t) == MEM_REF
|| TREE_CODE (t) == TARGET_MEM_REF)
return t;
else
return NULL_TREE; return NULL_TREE;
return t;
} }
void void
......
2012-09-11 Richard Guenther <rguenther@suse.de>
PR middle-end/54515
* g++.dg/tree-ssa/pr54515.C: New testcase.
2012-09-10 Andrew Pinski <apinski@cavium.com> 2012-09-10 Andrew Pinski <apinski@cavium.com>
PR tree-opt/c54362 PR tree-opt/c54362
......
// { 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment