diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-07-31 16:07:31 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-07-31 16:07:31 +0000 |
commit | 6f2c46b58894d5a81ad7ed7654e3768c72aa0d74 (patch) | |
tree | ecce4a0ee3ea95640b11540552809991d95251dd | |
parent | a2ffb983a4db32e11860a65309e8e2b72f556763 (diff) |
Make canonicalization of overloaded function declarations match the
Itanium C++ ABI's name mangling, since both are related to the notion
of "equivalent" function templates.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77678 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/StmtProfile.cpp | 22 | ||||
-rw-r--r-- | test/SemaTemplate/canonical-expr-type.cpp | 5 |
2 files changed, 6 insertions, 21 deletions
diff --git a/lib/AST/StmtProfile.cpp b/lib/AST/StmtProfile.cpp index 5a04df0406..d0f02ae95b 100644 --- a/lib/AST/StmtProfile.cpp +++ b/lib/AST/StmtProfile.cpp @@ -629,25 +629,9 @@ void StmtProfiler::VisitDecl(Decl *D) { } if (OverloadedFunctionDecl *Ovl = dyn_cast<OverloadedFunctionDecl>(D)) { - // Canonicalize all of the function declarations within the overload - // set. - llvm::SmallVector<Decl *, 4> Functions; - for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(), - FEnd = Ovl->function_end(); - F != FEnd; ++F) - Functions.push_back(F->get()->getCanonicalDecl()); - - // Sorting the functions based on the point means that the ID generated - // will be different from one execution of the compiler to another. - // Since these IDs don't persist over time, the change in ordering will - // not affect compilation. - std::sort(Functions.begin(), Functions.end()); - - for (llvm::SmallVector<Decl *, 4>::iterator F = Functions.begin(), - FEnd = Functions.end(); - F != FEnd; ++F) - VisitDecl(*F); - + // The Itanium C++ ABI mangles references to a set of overloaded + // functions using just the function name, so we do the same here. + VisitName(Ovl->getDeclName()); return; } } diff --git a/test/SemaTemplate/canonical-expr-type.cpp b/test/SemaTemplate/canonical-expr-type.cpp index fec03c6076..0580c677e6 100644 --- a/test/SemaTemplate/canonical-expr-type.cpp +++ b/test/SemaTemplate/canonical-expr-type.cpp @@ -22,12 +22,13 @@ void f0a(T x, __typeof__(f(N)) y) { } // expected-note{{previous}} void f(int); template<typename T, T N> -void f0a(T x, __typeof__(f(N)) y) { } // expected-error{{redefinition}} +void f0a(T x, __typeof__(f(N)) y) { } // expected-error{{redefinition}} \ + // expected-note{{previous}} void f(float); template<typename T, T N> -void f0a(T x, __typeof__(f(N)) y) { } +void f0a(T x, __typeof__(f(N)) y) { } // expected-error{{redefinition}} // Test dependently-sized array canonicalization template<typename T, int N, int M> |