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 | 24e7cb6f2604bfa56cde4d7adf88202e001d9d0d (patch) | |
tree | ece13ea1a878d194e1dc5e2f2d2ec932d22e8c3e | |
parent | 41d00ac45b17946b3fe4f2e2c974a99a7c1191eb (diff) | |
download | bcm5719-llvm-24e7cb6f2604bfa56cde4d7adf88202e001d9d0d.tar.gz bcm5719-llvm-24e7cb6f2604bfa56cde4d7adf88202e001d9d0d.zip |
Rebuild dependently-sized ext vectors if either the element type or the size
changed under the transform.
llvm-svn: 84953
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 3 | ||||
-rw-r--r-- | clang/test/SemaTemplate/ext-vector-type.cpp | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 7e0972fe03c..dec94994a8a 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/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/clang/test/SemaTemplate/ext-vector-type.cpp b/clang/test/SemaTemplate/ext-vector-type.cpp index b6aebc102fb..7cc4ae930ed 100644 --- a/clang/test/SemaTemplate/ext-vector-type.cpp +++ b/clang/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}} +} |