diff options
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 5 | ||||
-rw-r--r-- | test/CodeGenCXX/mangle.cpp | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 10fd1f57f6..d873cfec1b 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -199,10 +199,13 @@ void CXXNameMangler::mangle(const NamedDecl *D, llvm::StringRef Prefix) { return; } - // <mangled-name> ::= _Z <encoding> + // <mangled-name> ::= _Z [L] <encoding> // ::= <data name> // ::= <special-name> Out << Prefix; + if (D->getLinkage() == NamedDecl::InternalLinkage) // match gcc behavior + Out << 'L'; + if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) mangleFunctionEncoding(FD); else diff --git a/test/CodeGenCXX/mangle.cpp b/test/CodeGenCXX/mangle.cpp index e8770dfec3..5947587eec 100644 --- a/test/CodeGenCXX/mangle.cpp +++ b/test/CodeGenCXX/mangle.cpp @@ -308,4 +308,9 @@ template class Alloc<char>; } // CHECK: define void @_Z1fU13block_pointerFiiiE -void f(int (^)(int, int)) { }
\ No newline at end of file +void f(int (^)(int, int)) { } + +// PR5869 +// CHECK: define internal void @_ZL2f2v +static void f2() {} +void f3() { f2(); } |