diff options
author | John McCall <rjmccall@apple.com> | 2009-10-23 17:55:45 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-10-23 17:55:45 +0000 |
commit | eee91c3efbfc6a1509b42f39beb5533a9636fd70 (patch) | |
tree | 77a525301c503a57764424048732da8f06a5998a | |
parent | 38caf910aa1fbf3953bf05506b1e49577f46ab42 (diff) |
Rebuild dependently-sized ext vectors if either the element type or the size
changed under the transform.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84953 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/TreeTransform.h | 3 | ||||
-rw-r--r-- | test/SemaTemplate/ext-vector-type.cpp | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 7e0972fe03..dec94994a8 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -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()); diff --git a/test/SemaTemplate/ext-vector-type.cpp b/test/SemaTemplate/ext-vector-type.cpp index b6aebc102f..7cc4ae930e 100644 --- a/test/SemaTemplate/ext-vector-type.cpp +++ b/test/SemaTemplate/ext-vector-type.cpp @@ -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}} +} |