mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-09 00:41:03 +08:00
re PR ada/43096 (miscompilation of ACATS c37105a at -O2)
PR ada/43096 * tree-ssa-alias.c (same_type_for_tbaa): Return -1 if the types have the same alias set. From-SVN: r157102
This commit is contained in:
parent
4d16c0dc91
commit
2743db69c5
@ -1,3 +1,9 @@
|
||||
2010-02-26 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR ada/43096
|
||||
* tree-ssa-alias.c (same_type_for_tbaa): Return -1 if the types have
|
||||
the same alias set.
|
||||
|
||||
2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config.gcc: Set the default arch at least to Prescott for
|
||||
|
@ -544,13 +544,15 @@ same_type_for_tbaa (tree type1, tree type2)
|
||||
&& TREE_CODE (type2) == ARRAY_TYPE)
|
||||
return -1;
|
||||
|
||||
/* In Ada, an lvalue of unconstrained type can be used to access an object
|
||||
of one of its constrained subtypes, for example when a function with an
|
||||
unconstrained parameter passed by reference is called on a constrained
|
||||
object and inlined. In this case, the types have the same alias set. */
|
||||
if (TYPE_SIZE (type1) && TYPE_SIZE (type2)
|
||||
&& TREE_CONSTANT (TYPE_SIZE (type1)) != TREE_CONSTANT (TYPE_SIZE (type2))
|
||||
&& get_alias_set (type1) == get_alias_set (type2))
|
||||
/* ??? In Ada, an lvalue of an unconstrained type can be used to access an
|
||||
object of one of its constrained subtypes, e.g. when a function with an
|
||||
unconstrained parameter passed by reference is called on an object and
|
||||
inlined. But, even in the case of a fixed size, type and subtypes are
|
||||
not equivalent enough as to share the same TYPE_CANONICAL, since this
|
||||
would mean that conversions between them are useless, whereas they are
|
||||
not (e.g. type and subtypes can have different modes). So, in the end,
|
||||
they are only guaranteed to have the same alias set. */
|
||||
if (get_alias_set (type1) == get_alias_set (type2))
|
||||
return -1;
|
||||
|
||||
/* The types are known to be not equal. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user