backport: re PR ipa/81112 (internal compiler error: tree check: expected integer_cst, have range_expr in get_len, at tree.h:5321)
2017-06-29 Richard Biener <rguenther@suse.de> Backport from mainline 2017-06-19 Richard Biener <rguenther@suse.de> PR ipa/81112 * ipa-prop.c (find_constructor_constant_at_offset): Handle RANGE_EXPR conservatively. * g++.dg/torture/pr81112.C: New testcase. From-SVN: r249772
This commit is contained in:
parent
6974c4026e
commit
4d69799530
|
@ -1,3 +1,12 @@
|
|||
2017-06-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
2017-06-19 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/81112
|
||||
* ipa-prop.c (find_constructor_constant_at_offset): Handle
|
||||
RANGE_EXPR conservatively.
|
||||
|
||||
2017-06-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -3030,7 +3030,10 @@ find_constructor_constant_at_offset (tree constructor, HOST_WIDE_INT req_offset)
|
|||
|
||||
if (index)
|
||||
{
|
||||
off = wi::to_offset (index);
|
||||
if (TREE_CODE (index) == RANGE_EXPR)
|
||||
off = wi::to_offset (TREE_OPERAND (index, 0));
|
||||
else
|
||||
off = wi::to_offset (index);
|
||||
if (TYPE_DOMAIN (type) && TYPE_MIN_VALUE (TYPE_DOMAIN (type)))
|
||||
{
|
||||
tree low_bound = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
|
||||
|
@ -3039,6 +3042,8 @@ find_constructor_constant_at_offset (tree constructor, HOST_WIDE_INT req_offset)
|
|||
TYPE_PRECISION (TREE_TYPE (index)));
|
||||
}
|
||||
off *= wi::to_offset (unit_size);
|
||||
/* ??? Handle more than just the first index of a
|
||||
RANGE_EXPR. */
|
||||
}
|
||||
else
|
||||
off = wi::to_offset (unit_size) * ix;
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2017-06-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
2017-06-19 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/81112
|
||||
* g++.dg/torture/pr81112.C: New testcase.
|
||||
|
||||
2017-06-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
// { dg-do compile }
|
||||
// { dg-additional-options "-Wno-psabi" }
|
||||
|
||||
class AssertionResult {
|
||||
bool success_;
|
||||
};
|
||||
|
||||
AssertionResult AssertionSuccess();
|
||||
|
||||
template <typename T1>
|
||||
AssertionResult EXPECT_EQ(const T1& expected, const T1& actual) {
|
||||
if (expected == actual) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
struct uuid
|
||||
{
|
||||
unsigned char data[16];
|
||||
};
|
||||
|
||||
bool operator== (uuid const& lhs, uuid const& rhs);
|
||||
|
||||
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
typedef int __v4si __attribute__ ((__vector_size__ (16)));
|
||||
typedef char __v16qi __attribute__ ((__vector_size__ (16)));
|
||||
typedef long long __m128i_u __attribute__ ((__vector_size__ (16), __may_alias__, __aligned__ (1)));
|
||||
|
||||
int foo (__v16qi);
|
||||
|
||||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_loadu_si128 (__m128i_u const *__P)
|
||||
{
|
||||
return *__P;
|
||||
}
|
||||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_cmpeq_epi32 (__m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) ((__v4si)__A == (__v4si)__B);
|
||||
}
|
||||
extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_movemask_epi8 (__m128i __A)
|
||||
{
|
||||
return foo ((__v16qi)__A);
|
||||
}
|
||||
|
||||
|
||||
__m128i load_unaligned_si128(const unsigned char* p)
|
||||
{
|
||||
return _mm_loadu_si128(reinterpret_cast< const __m128i* >(p));
|
||||
}
|
||||
|
||||
inline bool operator== (uuid const& lhs, uuid const& rhs)
|
||||
{
|
||||
__m128i mm_left = load_unaligned_si128(lhs.data);
|
||||
__m128i mm_right = load_unaligned_si128(rhs.data);
|
||||
|
||||
__m128i mm_cmp = _mm_cmpeq_epi32(mm_left, mm_right);
|
||||
|
||||
return _mm_movemask_epi8(mm_cmp) == 0xFFFF;
|
||||
}
|
||||
|
||||
void crash_gcc7()
|
||||
{
|
||||
static const uuid u = uuid();
|
||||
EXPECT_EQ(u, u);
|
||||
}
|
Loading…
Reference in New Issue