mirror of
https://github.com/intel/llvm.git
synced 2026-02-06 23:31:50 +08:00
Substitute "::std::" as "St".
llvm-svn: 82874
This commit is contained in:
@@ -59,6 +59,8 @@ namespace {
|
||||
bool mangleSubstitution(QualType T);
|
||||
bool mangleSubstitution(uintptr_t Ptr);
|
||||
|
||||
bool mangleStandardSubstitution(const NamedDecl *ND);
|
||||
|
||||
void addSubstitution(const NamedDecl *ND) {
|
||||
addSubstitution(reinterpret_cast<uintptr_t>(ND));
|
||||
}
|
||||
@@ -1070,8 +1072,11 @@ void CXXNameMangler::mangleTemplateArgument(const TemplateArgument &A) {
|
||||
|
||||
// <substitution> ::= S <seq-id> _
|
||||
// ::= S_
|
||||
|
||||
bool CXXNameMangler::mangleSubstitution(const NamedDecl *ND) {
|
||||
// Try one of the standard substitutions first.
|
||||
if (mangleStandardSubstitution(ND))
|
||||
return true;
|
||||
|
||||
return mangleSubstitution(reinterpret_cast<uintptr_t>(ND));
|
||||
}
|
||||
|
||||
@@ -1120,6 +1125,22 @@ bool CXXNameMangler::mangleSubstitution(uintptr_t Ptr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CXXNameMangler::mangleStandardSubstitution(const NamedDecl *ND) {
|
||||
// <substitution> ::= St # ::std::
|
||||
|
||||
const NamespaceDecl *NS = dyn_cast<NamespaceDecl>(ND);
|
||||
if (!NS)
|
||||
return false;
|
||||
if (!NS->getParent()->isTranslationUnit())
|
||||
return false;
|
||||
|
||||
if (!NS->getOriginalNamespace()->getIdentifier()->isStr("std"))
|
||||
return false;
|
||||
|
||||
Out << "St";
|
||||
return true;
|
||||
}
|
||||
|
||||
void CXXNameMangler::addSubstitution(QualType T) {
|
||||
if (!T.getCVRQualifiers()) {
|
||||
if (const RecordType *RT = T->getAs<RecordType>()) {
|
||||
|
||||
9
clang/test/CodeGenCXX/mangle-subst-std.cpp
Normal file
9
clang/test/CodeGenCXX/mangle-subst-std.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
// RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
|
||||
|
||||
namespace std {
|
||||
struct A { A(); };
|
||||
|
||||
// CHECK: define void @_ZNSt1AC1Ev
|
||||
// CHECK: define void @_ZNSt1AC2Ev
|
||||
A::A() { }
|
||||
};
|
||||
Reference in New Issue
Block a user