Fix ASTContext::typesAreCompatible to allow for int/enum compatibility (C99 6.7.2.2p4).
Fix Sema::MergeFunctionDecl to allow for function type compatibility (by using the predicate on ASTContext). Function types don't have to be identical to be compatible...


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45784 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 94c65ac..7d5fc33 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -245,7 +245,9 @@
     if (OldQType.getTypePtr()->getTypeClass() == Type::FunctionNoProto && 
         Old->getResultType() == New->getResultType())
       return New;
-    if (OldQType == NewQType)
+    // Function types need to be compatible, not identical. This handles
+    // duplicate function decls like "void f(int); void f(enum X);" properly.
+    if (Context.functionTypesAreCompatible(OldQType, NewQType))
       return New;
   }