re PR tree-optimization/53364 (Wrong code generation)

2012-05-16  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/53364
	* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Properly
	detect a view-conversion of the decl.

	* g++.dg/torture/pr53364.C: New testcase.

From-SVN: r187590
This commit is contained in:
Richard Guenther 2012-05-16 13:11:01 +00:00 committed by Richard Biener
parent 219d42f11a
commit a952cc068c
4 changed files with 49 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2012-05-16 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53364
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Properly
detect a view-conversion of the decl.
2012-05-16 Dodji Seketeli <dodji@redhat.com>
PR preprocessor/7263

View File

@ -1,3 +1,8 @@
2012-05-16 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53364
* g++.dg/torture/pr53364.C: New testcase.
2012-05-16 Georg-Johann Lay <avr@gjlay.de>
PR testsuite/52641

View File

@ -0,0 +1,37 @@
// { dg-do run }
extern "C" void abort (void);
template<typename _Tp>
inline const _Tp&
min(const _Tp& __a, const _Tp& __b)
{
if (__b < __a)
return __b;
return __a;
}
struct A
{
int m_x;
explicit A(int x) : m_x(x) {}
operator int() const { return m_x; }
};
struct B : public A
{
public:
explicit B(int x) : A(x) {}
};
int data = 1;
int main()
{
B b = B(10);
b = min(b, B(data));
if (b != 1)
abort ();
return 0;
}

View File

@ -850,8 +850,7 @@ indirect_ref_may_alias_decl_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
/* If either reference is view-converted, give up now. */
if (same_type_for_tbaa (TREE_TYPE (base1), TREE_TYPE (ptrtype1)) != 1
|| same_type_for_tbaa (TREE_TYPE (dbase2),
TREE_TYPE (reference_alias_ptr_type (dbase2))) != 1)
|| same_type_for_tbaa (TREE_TYPE (dbase2), TREE_TYPE (base2)) != 1)
return true;
/* If both references are through the same type, they do not alias