From 82afa2d97d39cc0d5a4897716ec0a80aeab9e14b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 13 May 2009 05:13:44 +0000 Subject: [PATCH] Fix rdar://6880951 by rejecting vectors of vectors. It seems dubious to me that isIntegerType() returns true for vectors of integers, but not complex integers. This should probably be rethought, I'll file a bugzilla. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71640 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclAttr.cpp | 5 +++-- test/Sema/types.c | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 6e2cc699a7..711f5f937f 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -221,8 +221,9 @@ static void HandleVectorSizeAttr(Decl *D, const AttributeList &Attr, Sema &S) { canonType->isFunctionType()); */ } - // the base type must be integer or float. - if (!CurType->isIntegerType() && !CurType->isRealFloatingType()) { + // the base type must be integer or float, and can't already be a vector. + if (CurType->isVectorType() || + (!CurType->isIntegerType() && !CurType->isRealFloatingType())) { S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType; return; } diff --git a/test/Sema/types.c b/test/Sema/types.c index 1232e472ea..e7d4b00a4d 100644 --- a/test/Sema/types.c +++ b/test/Sema/types.c @@ -34,3 +34,6 @@ int j[42]; // expected-error {{redefinition of 'j' with a different type}} // rdar://6880104 _Decimal32 x; // expected-error {{GNU decimal type extension not supported}} + +// rdar://6880951 +int __attribute__ ((vector_size (8), vector_size (8))) v; // expected-error {{invalid vector type}} -- 2.40.0