summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-06-22 23:13:52 +0000
committerDouglas Gregor <dgregor@apple.com>2010-06-22 23:13:52 +0000
commitc646d130548a032cdcc932487e981f3a242d6d91 (patch)
treeca88f23435e06ed790ea3f35e5c31bdded58f20f /clang
parent49b4d734519559f3bd9cebf706cd35f27c1e2b3a (diff)
downloadbcm5719-llvm-c646d130548a032cdcc932487e981f3a242d6d91.tar.gz
bcm5719-llvm-c646d130548a032cdcc932487e981f3a242d6d91.zip
Teach Type::isRealType() that vector types are never real types. All
of the callers of isRealType() already assumed this, and one of them (increment/decrement) mistakenly permitted increments of vector types because of it. llvm-svn: 106596
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/Type.cpp2
-rw-r--r--clang/test/Sema/ext_vector_casts.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index a8ead6d46ba..af4b7eb3a64 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -585,8 +585,6 @@ bool Type::isRealType() const {
BT->getKind() <= BuiltinType::LongDouble;
if (const TagType *TT = dyn_cast<TagType>(CanonicalType))
return TT->getDecl()->isEnum() && TT->getDecl()->isDefinition();
- if (const VectorType *VT = dyn_cast<VectorType>(CanonicalType))
- return VT->getElementType()->isRealType();
return false;
}
diff --git a/clang/test/Sema/ext_vector_casts.c b/clang/test/Sema/ext_vector_casts.c
index be09903e00f..7b7b0caf0aa 100644
--- a/clang/test/Sema/ext_vector_casts.c
+++ b/clang/test/Sema/ext_vector_casts.c
@@ -45,3 +45,7 @@ static void test() {
}
typedef __attribute__(( ext_vector_type(2) )) float2 vecfloat2; // expected-error{{invalid vector type 'float2'}}
+
+void inc(float2 f2) {
+ f2++; // expected-error{{cannot increment value of type 'float2'}}
+}
OpenPOWER on IntegriCloud