Add an asssert and testcase for PR 68064
2015-12-11 Martin Jambor <mjambor@suse.cz> PR ipa/68064 * ipa-prop.c (ipa_compute_jump_functions_for_edge): Add checking assert that align is nonzero. testsuite/ * g++.dg/torture/pr68064.C: New test. From-SVN: r231559
This commit is contained in:
parent
da0dcab184
commit
9e64af1875
|
@ -1,3 +1,9 @@
|
|||
2015-12-11 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR ipa/68064
|
||||
* ipa-prop.c (ipa_compute_jump_functions_for_edge): Add checking
|
||||
assert that align is nonzero.
|
||||
|
||||
2015-12-11 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/s390.c (s390_expand_setmem): Use new expanders.
|
||||
|
|
|
@ -1646,6 +1646,7 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi,
|
|||
&& align % BITS_PER_UNIT == 0
|
||||
&& hwi_bitpos % BITS_PER_UNIT == 0)
|
||||
{
|
||||
gcc_checking_assert (align != 0);
|
||||
jfunc->alignment.known = true;
|
||||
jfunc->alignment.align = align / BITS_PER_UNIT;
|
||||
jfunc->alignment.misalign = hwi_bitpos / BITS_PER_UNIT;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-12-11 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR ipa/68064
|
||||
* g++.dg/torture/pr68064.C: New test.
|
||||
|
||||
2015-12-11 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.target/s390/md/setmem_long-1.c: New test.
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
// { dg-do compile }
|
||||
|
||||
template <class Config> class A {
|
||||
public:
|
||||
class B;
|
||||
typedef typename Config::template D<A>::type TypeHandle;
|
||||
static A *Tagged() { return B::New(B::kTagged); }
|
||||
static TypeHandle Union(TypeHandle);
|
||||
static TypeHandle Representation(TypeHandle, typename Config::Region *);
|
||||
bool Is();
|
||||
};
|
||||
|
||||
template <class Config> class A<Config>::B {
|
||||
friend A;
|
||||
enum { kTaggedPointer = 1 << 31, kTagged = kTaggedPointer };
|
||||
static A *New(int p1) { return Config::from_bitset(p1); }
|
||||
};
|
||||
|
||||
struct C {
|
||||
typedef int Region;
|
||||
template <class> struct D { typedef A<C> *type; };
|
||||
static A<C> *from_bitset(unsigned);
|
||||
};
|
||||
A<C> *C::from_bitset(unsigned p1) { return reinterpret_cast<A<C> *>(p1); }
|
||||
|
||||
namespace {
|
||||
int *a;
|
||||
void fn1(A<C> *p1) { A<C>::Union(A<C>::Representation(p1, a)); }
|
||||
}
|
||||
|
||||
void fn2() {
|
||||
A<C> b;
|
||||
A<C> *c = b.Is() ? 0 : A<C>::Tagged();
|
||||
fn1(c);
|
||||
}
|
Loading…
Reference in New Issue