Rebuild dependently-sized ext vectors if either the element type or the size

changed under the transform.

llvm-svn: 84953
This commit is contained in:
John McCall 2009-10-23 17:55:45 +00:00
parent 41d00ac45b
commit 24e7cb6f26
2 changed files with 15 additions and 1 deletions

View File

@ -2331,7 +2331,8 @@ QualType TreeTransform<Derived>::TransformDependentSizedExtVectorType(
QualType Result = TL.getType();
if (getDerived().AlwaysRebuild() ||
(ElementType != T->getElementType() && Size.get() != T->getSizeExpr())) {
ElementType != T->getElementType() ||
Size.get() != T->getSizeExpr()) {
Result = getDerived().RebuildDependentSizedExtVectorType(ElementType,
move(Size),
T->getAttributeLoc());

View File

@ -45,3 +45,16 @@ struct make5 {
typedef int_ptr __attribute__((ext_vector_type(Length))) type; // expected-error{{invalid vector type}}
};
template<int Length>
struct make6 {
typedef int __attribute__((ext_vector_type(Length))) type;
};
int test_make6() {
make6<4>::type x;
x.w = 7;
make6<2>::type y;
y.x = -1;
y.w = -1; // expected-error{{vector component access exceeds type}}
}