diff options
| -rw-r--r-- | clang/lib/Sema/Sema.h | 6 | ||||
| -rw-r--r-- | clang/test/SemaCXX/function-overloaded-redecl.cpp | 10 | ||||
| -rw-r--r-- | clang/test/SemaCXX/overloaded-operator.cpp | 2 |
3 files changed, 15 insertions, 3 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 14c71af934c..60220834dba 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -3683,8 +3683,10 @@ public: QualType adjustFunctionParamType(QualType T) const { if (!Context.getLangOptions().CPlusPlus) return T; - - return T.getUnqualifiedType(); + return + T->isDependentType() ? T.getUnqualifiedType() + : T.getDesugaredType().getUnqualifiedType(); + } /// \name Code completion diff --git a/clang/test/SemaCXX/function-overloaded-redecl.cpp b/clang/test/SemaCXX/function-overloaded-redecl.cpp new file mode 100644 index 00000000000..4d8e57c1b9f --- /dev/null +++ b/clang/test/SemaCXX/function-overloaded-redecl.cpp @@ -0,0 +1,10 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +typedef const int cInt; + +void f (int); +void f (const int); // redecl + +void f (int) { } // expected-note {{previous definition is here}} +void f (cInt) { } // expected-error {{redefinition of 'f'}} + diff --git a/clang/test/SemaCXX/overloaded-operator.cpp b/clang/test/SemaCXX/overloaded-operator.cpp index 02b47bd7b19..77b5d6c7010 100644 --- a/clang/test/SemaCXX/overloaded-operator.cpp +++ b/clang/test/SemaCXX/overloaded-operator.cpp @@ -155,7 +155,7 @@ typedef INTREF Func1(FLOAT, double); typedef float& Func2(int, double); struct ConvertToFunc { - operator Func1*(); // expected-note{{conversion candidate of type 'INTREF (*)(FLOAT, double)'}} + operator Func1*(); // expected-note{{conversion candidate of type 'INTREF (*)(float, double)'}} operator Func2&(); // expected-note{{conversion candidate of type 'float &(&)(int, double)'}} void operator()(); }; |

