]> granicus.if.org Git - clang/commitdiff
Simplify typesAreBlockCompatible().
authorSteve Naroff <snaroff@apple.com>
Tue, 9 Sep 2008 13:47:19 +0000 (13:47 +0000)
committerSteve Naroff <snaroff@apple.com>
Tue, 9 Sep 2008 13:47:19 +0000 (13:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55989 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp

index 62364bab318ba7ae9d3e54f484e9289adf970fdf..bcda5ffcb535c037cbf7126d500b705a580bacf7 100644 (file)
@@ -1795,47 +1795,7 @@ bool ASTContext::isObjCObjectPointerType(QualType Ty) const {
 /// FIXME: When the dust settles on this integration, fold this into mergeTypes.
 ///
 bool ASTContext::typesAreBlockCompatible(QualType lhs, QualType rhs) {
-  if (lhs.getCVRQualifiers() != rhs.getCVRQualifiers())
-    return false;
-  
-  QualType lcanon = getCanonicalType(lhs);
-  QualType rcanon = getCanonicalType(rhs);
-  
-  // If two types are identical, they are are compatible
-  if (lcanon == rcanon)
-    return true;
-  if (isa<FunctionType>(lcanon) && isa<FunctionType>(rcanon)) {
-    const FunctionType *lbase = cast<FunctionType>(lcanon);
-    const FunctionType *rbase = cast<FunctionType>(rcanon);
-    
-    // First check the return types.
-    if (!typesAreBlockCompatible(lbase->getResultType(),rbase->getResultType()))
-      return false;
-
-    // Return types matched, now check the argument types.
-    const FunctionTypeProto *lproto = dyn_cast<FunctionTypeProto>(lbase);
-    const FunctionTypeProto *rproto = dyn_cast<FunctionTypeProto>(rbase);
-        
-    if (lproto && rproto) { // two C99 style function prototypes
-      unsigned lproto_nargs = lproto->getNumArgs();
-      unsigned rproto_nargs = rproto->getNumArgs();
-      
-      if (lproto_nargs != rproto_nargs)
-        return false;
-      
-      if (lproto->isVariadic() || rproto->isVariadic())
-        return false;
-
-      // The use of ellipsis agree...now check the argument types.
-      for (unsigned i = 0; i < lproto_nargs; i++)
-        if (!typesAreBlockCompatible(lproto->getArgType(i), 
-                                     rproto->getArgType(i)))
-          return false;
-      return true;
-    }
-    return (!lproto && !rproto); // two K&R style function decls match.
-  }
-  return false;
+ return getCanonicalType(lhs) == getCanonicalType(rhs);
 }
 
 /// areCompatVectorTypes - Return true if the two specified vector types are