From 770951b5bb6028a8d326ddb4a13cef7d4a128162 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 1 Nov 2007 05:03:41 +0000 Subject: [PATCH] add support for vector type compatibility checking. Patch by Nate Begeman. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43604 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/ASTContext.cpp | 16 +++++++++++++++- clang.xcodeproj/project.pbxproj | 1 + include/clang/AST/ASTContext.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index b83d33da7c..266871b6f0 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -784,7 +784,7 @@ static int getFloatingRank(QualType T) { return getFloatingRank(CT->getElementType()); switch (cast(T)->getKind()) { - default: assert(0 && "getFloatingPointRank(): not a floating type"); + default: assert(0 && "getFloatingRank(): not a floating type"); case BuiltinType::Float: return FloatRank; case BuiltinType::Double: return DoubleRank; case BuiltinType::LongDouble: return LongDoubleRank; @@ -1141,6 +1141,17 @@ bool ASTContext::interfaceTypesAreCompatible(QualType lhs, QualType rhs) { return true; // FIXME: IMPLEMENT. } +bool ASTContext::vectorTypesAreCompatible(QualType lhs, QualType rhs) { + const VectorType *lVector = lhs->getAsVectorType(); + const VectorType *rVector = rhs->getAsVectorType(); + + if ((lVector->getElementType().getCanonicalType() == + rVector->getElementType().getCanonicalType()) && + (lVector->getNumElements() == rVector->getNumElements())) + return true; + return false; +} + // C99 6.2.7p1: If both are complete types, then the following additional // requirements apply...FIXME (handle compatibility across source files). bool ASTContext::tagTypesAreCompatible(QualType lhs, QualType rhs) { @@ -1279,6 +1290,9 @@ bool ASTContext::typesAreCompatible(QualType lhs, QualType rhs) { return builtinTypesAreCompatible(lcanon, rcanon); case Type::ObjcInterface: return interfaceTypesAreCompatible(lcanon, rcanon); + case Type::Vector: + case Type::OCUVector: + return vectorTypesAreCompatible(lcanon, rcanon); default: assert(0 && "unexpected type"); } diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj index de41b4628d..fe4cf8d85b 100644 --- a/clang.xcodeproj/project.pbxproj +++ b/clang.xcodeproj/project.pbxproj @@ -756,6 +756,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */; + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* clang */; projectDirPath = ""; diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index 8e92c7c245..f4c5d02988 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -267,6 +267,7 @@ public: bool functionTypesAreCompatible(QualType, QualType); // C99 6.7.5.3p15 bool arrayTypesAreCompatible(QualType, QualType); // C99 6.7.5.2p6 bool builtinTypesAreCompatible(QualType, QualType); + bool vectorTypesAreCompatible(QualType, QualType); /// Objective-C specific type checking. bool interfaceTypesAreCompatible(QualType, QualType); -- 2.40.0