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...

llvm-svn: 45784
diff --git a/clang/Sema/SemaDecl.cpp b/clang/Sema/SemaDecl.cpp
index 94c65ac..7d5fc33 100644
--- a/clang/Sema/SemaDecl.cpp
+++ b/clang/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;
   }