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:
Martin Jambor 2015-12-11 12:27:11 +01:00 committed by Martin Jambor
parent da0dcab184
commit 9e64af1875
4 changed files with 47 additions and 0 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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.

View File

@ -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);
}