]> granicus.if.org Git - clang/commitdiff
add support for vector type compatibility checking. Patch by Nate Begeman.
authorChris Lattner <sabre@nondot.org>
Thu, 1 Nov 2007 05:03:41 +0000 (05:03 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 1 Nov 2007 05:03:41 +0000 (05:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43604 91177308-0d34-0410-b5e6-96231b3b80d8

AST/ASTContext.cpp
clang.xcodeproj/project.pbxproj
include/clang/AST/ASTContext.h

index b83d33da7ccd14d3738796ac17c117d87d534ef4..266871b6f01feaf81505336d53946c10cdb8887f 100644 (file)
@@ -784,7 +784,7 @@ static int getFloatingRank(QualType T) {
     return getFloatingRank(CT->getElementType());
   
   switch (cast<BuiltinType>(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");
   }
index de41b4628d0c47ae944965792f26798c623eb63f..fe4cf8d85be8296188b8454e3723b21a50eb5906 100644 (file)
                08FB7793FE84155DC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
+                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
                        projectDirPath = "";
index 8e92c7c24587b6a2c177bce33e95a809c770649c..f4c5d02988dada0f8b30db7ff78510b56a51375b 100644 (file)
@@ -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);