re PR middle-end/51959 (ICE in set_mem_alias_set, at emit-rtl.c:1884)
2012-01-27 Richard Guenther <rguenther@suse.de> PR middle-end/51959 * expr.c (store_field): Use the alias-set of the scratch memory for storing to it. * g++.dg/torture/pr51959.C: New testcase. From-SVN: r183616
This commit is contained in:
parent
10c7477699
commit
45c8342998
@ -1,3 +1,9 @@
|
||||
2012-01-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/51959
|
||||
* expr.c (store_field): Use the alias-set of the scratch memory
|
||||
for storing to it.
|
||||
|
||||
2012-01-27 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/51990
|
||||
|
@ -6299,7 +6299,7 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
|
||||
|
||||
store_field (blk_object, bitsize, bitpos,
|
||||
bitregion_start, bitregion_end,
|
||||
mode, exp, type, alias_set, nontemporal);
|
||||
mode, exp, type, MEM_ALIAS_SET (blk_object), nontemporal);
|
||||
|
||||
emit_move_insn (target, object);
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-01-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/51959
|
||||
* g++.dg/torture/pr51959.C: New testcase.
|
||||
|
||||
2012-01-27 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/51990
|
||||
|
80
gcc/testsuite/g++.dg/torture/pr51959.C
Normal file
80
gcc/testsuite/g++.dg/torture/pr51959.C
Normal file
@ -0,0 +1,80 @@
|
||||
// { dg-do compile }
|
||||
|
||||
namespace std {
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
}
|
||||
inline void* operator new(std::size_t, void* __p) throw() {
|
||||
return __p;
|
||||
}
|
||||
template <typename T> class QTypeInfo {
|
||||
};
|
||||
enum { Q_COMPLEX_TYPE = 0, Q_PRIMITIVE_TYPE = 0x1, Q_STATIC_TYPE = 0, Q_MOVABLE_TYPE = 0x2, Q_DUMMY_TYPE = 0x4 };
|
||||
template<typename Enum> class QFlags {
|
||||
int i;
|
||||
inline QFlags(Enum f) : i(f) { }
|
||||
};
|
||||
class __attribute__((visibility("default"))) QSize {
|
||||
public:
|
||||
bool isEmpty() const;
|
||||
friend inline bool operator==(const QSize &, const QSize &);
|
||||
int wd;
|
||||
int ht;
|
||||
};
|
||||
template<> class QTypeInfo<QSize > {
|
||||
public:
|
||||
enum {
|
||||
isComplex = (((Q_MOVABLE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_MOVABLE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isLarge = (sizeof(QSize)>sizeof(void*)), isPointer = false, isDummy = (((Q_MOVABLE_TYPE) & Q_DUMMY_TYPE) != 0) };
|
||||
};
|
||||
class __attribute__((visibility("default"))) QBasicAtomicInt {
|
||||
public:
|
||||
inline bool operator!=(int value) const { }
|
||||
};
|
||||
struct __attribute__((visibility("default"))) QListData {
|
||||
struct Data {
|
||||
QBasicAtomicInt ref;
|
||||
};
|
||||
void **append();
|
||||
};
|
||||
template <typename T> class QList {
|
||||
struct Node {
|
||||
void *v;
|
||||
};
|
||||
union {
|
||||
QListData p;
|
||||
QListData::Data *d;
|
||||
};
|
||||
public:
|
||||
void append(const T &t);
|
||||
inline void push_back(const T &t) {
|
||||
append(t);
|
||||
}
|
||||
void node_construct(Node *n, const T &t);
|
||||
void node_destruct(Node *n);
|
||||
};
|
||||
template <typename T> inline void QList<T>::node_construct(Node *n, const T &t) {
|
||||
if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) n->v = new T(t);
|
||||
else if (QTypeInfo<T>::isComplex) new (n) T(t);
|
||||
}
|
||||
template <typename T> inline void QList<T>::node_destruct(Node *n) {
|
||||
}
|
||||
template <typename T> void QList<T>::append(const T &t) {
|
||||
if (d->ref != 1) {
|
||||
try {
|
||||
}
|
||||
catch (...) {
|
||||
}
|
||||
if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) {
|
||||
}
|
||||
else {
|
||||
Node *n, copy;
|
||||
node_construct(©, t);
|
||||
try { n = reinterpret_cast<Node *>(p.append());; }
|
||||
catch (...) { node_destruct(©); throw; }
|
||||
*n = copy;
|
||||
}
|
||||
}
|
||||
};
|
||||
void virtual_hook(QSize sz, QList<QSize> &arg)
|
||||
{
|
||||
arg.push_back(sz);
|
||||
}
|
Loading…
Reference in New Issue
Block a user