diff options
author | Steve Naroff <snaroff@apple.com> | 2008-09-09 13:47:19 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-09-09 13:47:19 +0000 |
commit | 3c1b91223908f1848622c3da21beced6d42371d4 (patch) | |
tree | 125d8483a26a4e4d5deba52d31f297d4c51dabd9 | |
parent | 60da102982f28ba1aa4015480a3da794574f6d3e (diff) |
Simplify typesAreBlockCompatible().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55989 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/ASTContext.cpp | 42 |
1 files changed, 1 insertions, 41 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 62364bab31..bcda5ffcb5 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -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 |