[cfe-commits] r55989 - /cfe/trunk/lib/AST/ASTContext.cpp

Steve Naroff snaroff at apple.com
Tue Sep 9 06:47:21 PDT 2008


Author: snaroff
Date: Tue Sep  9 08:47:19 2008
New Revision: 55989

URL: http://llvm.org/viewvc/llvm-project?rev=55989&view=rev
Log:
Simplify typesAreBlockCompatible().

Modified:
    cfe/trunk/lib/AST/ASTContext.cpp

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=55989&r1=55988&r2=55989&view=diff

==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Sep  9 08:47:19 2008
@@ -1795,47 +1795,7 @@
 /// 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 





More information about the cfe-commits mailing list