Handle complex types in ASTContext::mergeTypes


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63238 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 5e22691..c43ae78 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -2615,6 +2615,9 @@
   case Type::Builtin:
     // Only exactly equal builtin types are compatible, which is tested above.
     return QualType();
+  case Type::Complex:
+    // Distinct complex types are incompatible.
+    return QualType();
   case Type::Vector:
     if (areCompatVectorTypes(LHS->getAsVectorType(), RHS->getAsVectorType()))
       return LHS;
diff --git a/test/Sema/merge-decls.c b/test/Sema/merge-decls.c
index 0d3cce3..468f3f6 100644
--- a/test/Sema/merge-decls.c
+++ b/test/Sema/merge-decls.c
@@ -20,3 +20,12 @@
 // PR2502
 void (*f)(void);
 void (*f)() = 0;
+
+typedef __attribute__(( ext_vector_type(2) )) int Vi2;
+typedef __attribute__(( ext_vector_type(2) )) float Vf2;
+
+Vf2 g0; // expected-note {{previous definition is here}}
+Vi2 g0; // expected-error {{redefinition of 'g0'}}
+
+_Complex int g1; // expected-note {{previous definition is here}}
+_Complex float g1; // expected-error {{redefinition of 'g1'}}