Add name mangling for address spaces. We use the vendor-extension

mangling for types, where the <source-name> is ASxxx (xxx is the
address-space number).

llvm-svn: 105975
This commit is contained in:
Douglas Gregor 2010-06-14 23:15:08 +00:00
parent c8c2efa7f7
commit 1726d1517e
2 changed files with 18 additions and 0 deletions

View File

@ -1050,6 +1050,18 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals) {
if (Quals.hasConst()) if (Quals.hasConst())
Out << 'K'; Out << 'K';
if (Quals.hasAddressSpace()) {
// Extension:
//
// <type> ::= U <address-space-number>
//
// where <address-space-number> is a source name consisting of 'AS'
// followed by the address space <number>.
llvm::SmallString<64> ASString;
ASString = "AS" + llvm::utostr_32(Quals.getAddressSpace());
Out << 'U' << ASString.size() << ASString;
}
// FIXME: For now, just drop all extension qualifiers on the floor. // FIXME: For now, just drop all extension qualifiers on the floor.
} }

View File

@ -0,0 +1,6 @@
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
// CHECK: define void @_Z2f0Pc
void f0(char *p) { }
// CHECK: define void @_Z2f0PU3AS1c
void f0(char __attribute__((address_space(1))) *p) { }