Commit 0fe4913b by Jason Merrill Committed by Jason Merrill

re PR c++/55032 (Internal compiler error: in strip_typedefs, at cp/tree.c:1199)

	PR c++/55032
	* tree.c (build_array_type_1): Re-layout if we found it in the
	hash table.

From-SVN: r194265
parent 84fd832c
2012-12-06 Jason Merrill <jason@redhat.com>
PR c++/55032
* tree.c (build_array_type_1): Re-layout if we found it in the
hash table.
2012-12-06 Jack Howarth <howarth@bromo.med.uc.edu> 2012-12-06 Jack Howarth <howarth@bromo.med.uc.edu>
PR 55599/sanitizer PR 55599/sanitizer
// PR c++/55032
template<typename T>
struct vec3t {
T c[3];
};
typedef vec3t<float> vec3;
class Bounds {
public:
Bounds(const vec3 bb[2]);
void foo(const vec3 & v) { v.c[0]; }
};
template<typename T>
void work(T& value);
void foo() {
vec3 bb[2];
work(bb);
}
...@@ -7505,7 +7505,12 @@ build_array_type_1 (tree elt_type, tree index_type, bool shared) ...@@ -7505,7 +7505,12 @@ build_array_type_1 (tree elt_type, tree index_type, bool shared)
hashval_t hashcode = iterative_hash_object (TYPE_HASH (elt_type), 0); hashval_t hashcode = iterative_hash_object (TYPE_HASH (elt_type), 0);
if (index_type) if (index_type)
hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode); hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
tree old_t = t;
t = type_hash_canon (hashcode, t); t = type_hash_canon (hashcode, t);
if (t != old_t)
/* Lay it out again in case the element type has been completed since
the array was added to the hash table. */
layout_type (t);
} }
if (TYPE_CANONICAL (t) == t) if (TYPE_CANONICAL (t) == t)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment