forked from OSchip/llvm-project
We must always mangle attribute overloadable functions; even if in a
system header. - Prevents a codegen crash when anything used anything in tgmath! :) llvm-svn: 65200
This commit is contained in:
parent
9e6fb74027
commit
0c4eda5923
|
@ -62,14 +62,14 @@ bool CXXNameMangler::mangle(const NamedDecl *D) {
|
|||
// FIXME: Actually use a visitor to decode these?
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
|
||||
bool RequiresMangling = false;
|
||||
// No mangled in an "implicit extern C" header.
|
||||
if (Context.getSourceManager().getFileCharacteristic(FD->getLocation())
|
||||
== SrcMgr::C_ExternCSystem)
|
||||
RequiresMangling = false;
|
||||
// Clang's "overloadable" attribute extension to C/C++ implies
|
||||
// name mangling (always).
|
||||
else if (FD->getAttr<OverloadableAttr>())
|
||||
if (FD->getAttr<OverloadableAttr>())
|
||||
RequiresMangling = true;
|
||||
// No mangled in an "implicit extern C" header.
|
||||
else if (Context.getSourceManager().getFileCharacteristic(FD->getLocation())
|
||||
== SrcMgr::C_ExternCSystem)
|
||||
RequiresMangling = false;
|
||||
else if (Context.getLangOptions().CPlusPlus) {
|
||||
// C++ requires name mangling, unless we're in a C linkage
|
||||
// specification.
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// RUN: clang -arch i386 -emit-llvm -o %t %s &&
|
||||
// RUN: grep '@_Z2f0i' %t &&
|
||||
// RUN: grep '@_Z2f0l' %t
|
||||
|
||||
// Make sure we mangle overloadable, even in C system headers.
|
||||
|
||||
# 1 "somesystemheader.h" 1 3 4
|
||||
void __attribute__((__overloadable__)) f0(int a) {}
|
||||
void __attribute__((__overloadable__)) f0(long b) {}
|
Loading…
Reference in New Issue