Commit 0710ccff by Nathan Sidwell Committed by Nathan Sidwell

re PR c++/18672 (Segfault with simple template code)

.:	PR c++/18672
	* gimplify.c (canonicalize_addr_expr): Cope with array of
	incomplete type.
	(gimplify_conversion): Remove redundant checks.
testsuite:
	PR c++/18672
	* g++.dg/opt/array1.C: New.

From-SVN: r91865
parent e6aef969
2004-12-08 Nathan Sidwell <nathan@codesourcery.com>
PR c++/18672
* gimplify.c (canonicalize_addr_expr): Cope with array of
incomplete type.
(gimplify_conversion): Remove redundant checks.
* doc/trouble.texi (Non-bugs): Clarify empty loop removal.
2004-12-08 Uros Bizjak <uros@kss-loka.si>
......
......@@ -1336,7 +1336,8 @@ canonicalize_addr_expr (tree *expr_p)
return;
/* The lower bound and element sizes must be constant. */
if (TREE_CODE (TYPE_SIZE_UNIT (dctype)) != INTEGER_CST
if (!TYPE_SIZE_UNIT (dctype)
|| TREE_CODE (TYPE_SIZE_UNIT (dctype)) != INTEGER_CST
|| !TYPE_DOMAIN (datype) || !TYPE_MIN_VALUE (TYPE_DOMAIN (datype))
|| TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (datype))) != INTEGER_CST)
return;
......@@ -1356,16 +1357,15 @@ canonicalize_addr_expr (tree *expr_p)
static enum gimplify_status
gimplify_conversion (tree *expr_p)
{
/* If we still have a conversion at the toplevel, then strip
away all but the outermost conversion. */
if (TREE_CODE (*expr_p) == NOP_EXPR || TREE_CODE (*expr_p) == CONVERT_EXPR)
{
STRIP_SIGN_NOPS (TREE_OPERAND (*expr_p, 0));
/* And remove the outermost conversion if it's useless. */
if (tree_ssa_useless_type_conversion (*expr_p))
*expr_p = TREE_OPERAND (*expr_p, 0);
}
gcc_assert (TREE_CODE (*expr_p) == NOP_EXPR
|| TREE_CODE (*expr_p) == CONVERT_EXPR);
/* Then strip away all but the outermost conversion. */
STRIP_SIGN_NOPS (TREE_OPERAND (*expr_p, 0));
/* And remove the outermost conversion if it's useless. */
if (tree_ssa_useless_type_conversion (*expr_p))
*expr_p = TREE_OPERAND (*expr_p, 0);
/* If we still have a conversion at the toplevel,
then canonicalize some constructs. */
......
2004-12-08 Nathan Sidwell <nathan@codesourcery.com>
PR c++/18672
* g++.dg/opt/array1.C: New.
PR c++/18803
* g++.dg/template/operator5.C: New.
......
// Copyright (C) 2004 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 29 Nov 2004 <nathan@codesourcery.com>
// PR 18672:ICE gimplifying incomplete array type.
// Origin: Magnus Fromreide <gcc@magfr.user.lysator.liu.se>
struct A;
struct D {
static A ary[];
};
extern A ary[];
void Foo (A const *);
void Bar ()
{
Foo (D::ary);
Foo (::ary);
}
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