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 | 1d1d16c43e5899111c2340e0b8057eb2254708e7 (patch) | |
| tree | 534a821d06f7d98d01079e4a4a741372bfdc7900 /clang | |
| parent | c97f09f5655b24983c1b0da821fb8d56a0cb0153 (diff) | |
| download | bcm5719-llvm-1d1d16c43e5899111c2340e0b8057eb2254708e7.tar.gz bcm5719-llvm-1d1d16c43e5899111c2340e0b8057eb2254708e7.zip | |
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.
llvm-svn: 77678
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/AST/StmtProfile.cpp | 22 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/canonical-expr-type.cpp | 5 |
2 files changed, 6 insertions, 21 deletions
diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp index 5a04df04065..d0f02ae95bc 100644 --- a/clang/lib/AST/StmtProfile.cpp +++ b/clang/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/clang/test/SemaTemplate/canonical-expr-type.cpp b/clang/test/SemaTemplate/canonical-expr-type.cpp index fec03c60764..0580c677e62 100644 --- a/clang/test/SemaTemplate/canonical-expr-type.cpp +++ b/clang/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> |

