Provide a special-case diagnostic when two class member functions instantiate
to the same signature. Fix a bug in the type printer which would cause this
diagnostic to print wonderful types like 'const const int *'.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160161 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/SemaTemplate/instantiate-method.cpp b/test/SemaTemplate/instantiate-method.cpp
index 363115d..5e9da3f 100644
--- a/test/SemaTemplate/instantiate-method.cpp
+++ b/test/SemaTemplate/instantiate-method.cpp
@@ -173,5 +173,12 @@
     typedef X2<> X2_type;
     X2_type c;
   }
+}
 
+namespace SameSignatureAfterInstantiation {
+  template<typename T> struct S {
+    void f(T *); // expected-note {{previous}}
+    void f(const T*); // expected-error {{multiple overloads of 'f' instantiate to the same signature 'void (const int *)'}}
+  };
+  S<const int> s; // expected-note {{instantiation}}
 }