From 11d00cf9721ddb12c336fb7b7c8ca39ba722a448 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 6 Oct 2009 21:58:01 +0000 Subject: [PATCH] When mangling names, always use the canonical decl. Fixes PR5144. llvm-svn: 83420 --- clang/lib/CodeGen/Mangle.cpp | 2 +- clang/test/CodeGenCXX/mangle.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 7555ae5da467..702edf05a962 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -1303,7 +1303,7 @@ namespace clang { "Mangling declaration"); CXXNameMangler Mangler(Context, os); - if (!Mangler.mangle(D)) + if (!Mangler.mangle(cast(D->getCanonicalDecl()))) return false; os.flush(); diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp index 86f5fb0d5bbd..a881a710d490 100644 --- a/clang/test/CodeGenCXX/mangle.cpp +++ b/clang/test/CodeGenCXX/mangle.cpp @@ -198,3 +198,12 @@ template typename __enable_if<__is_scalar::__value, void>::__type template void ft7(); // CHECK: @_Z3ft7IPvEN11__enable_ifIXsr11__is_scalarIT_E7__valueEvE6__typeEv template void ft7(); + +// PR5144 +extern "C" { +void extern_f(void); +}; + +// CHECK: @extern_f +void extern_f(void) { } +