summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorEhsan Akhgari <ehsan.akhgari@gmail.com>2015-10-08 00:01:20 +0000
committerEhsan Akhgari <ehsan.akhgari@gmail.com>2015-10-08 00:01:20 +0000
commitf8d44de1438a22c1755b27a0e91dc3b7b21bb7f2 (patch)
tree6b724a3ac0c9f6b7e1d5bc845b5317f661dba873 /clang
parent94fe836afa104c0618a162e294003e9cbc663540 (diff)
downloadbcm5719-llvm-f8d44de1438a22c1755b27a0e91dc3b7b21bb7f2.tar.gz
bcm5719-llvm-f8d44de1438a22c1755b27a0e91dc3b7b21bb7f2.zip
Make clang_Cursor_getMangling not mangle if the declaration isn't mangled
Right now clang_Cursor_getMangling will attempt to mangle any declaration, even if the declaration isn't mangled (extern C). This results in a partially mangled name which isn't useful for much. This patch makes clang_Cursor_getMangling return an empty string if the declaration isn't mangled. Patch by Michael Wu <mwu@mozilla.com>. llvm-svn: 249639
Diffstat (limited to 'clang')
-rw-r--r--clang/test/Index/print-mangled-name.cpp5
-rw-r--r--clang/tools/c-index-test/c-index-test.c2
-rw-r--r--clang/tools/libclang/CIndex.cpp6
3 files changed, 12 insertions, 1 deletions
diff --git a/clang/test/Index/print-mangled-name.cpp b/clang/test/Index/print-mangled-name.cpp
index 3d74fe5520c..dc6f734dfb7 100644
--- a/clang/test/Index/print-mangled-name.cpp
+++ b/clang/test/Index/print-mangled-name.cpp
@@ -29,3 +29,8 @@ int foo(S, S&);
// ITANIUM: mangled=_Z3foo1SRS_
// MACHO: mangled=__Z3foo1SRS_
// MICROSOFT: mangled=?foo@@YAHUS
+
+extern "C" int foo(int);
+// ITANIUM: mangled=foo
+// MACHO: mangled=_foo
+// MICROSOFT: mangled=_foo
diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c
index eeeb832cd87..346bcc65794 100644
--- a/clang/tools/c-index-test/c-index-test.c
+++ b/clang/tools/c-index-test/c-index-test.c
@@ -1429,6 +1429,8 @@ static enum CXChildVisitResult PrintTypeSize(CXCursor cursor, CXCursor p,
static enum CXChildVisitResult PrintMangledName(CXCursor cursor, CXCursor p,
CXClientData d) {
+ if (clang_isUnexposed(clang_getCursorKind(cursor)))
+ return CXChildVisit_Recurse;
CXString MangledName;
PrintCursor(cursor, NULL);
MangledName = clang_Cursor_getMangling(cursor);
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index 7a1fb5b9667..9e66d0c653c 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -3890,7 +3890,11 @@ CXString clang_Cursor_getMangling(CXCursor C) {
std::string FrontendBuf;
llvm::raw_string_ostream FrontendBufOS(FrontendBuf);
- MC->mangleName(ND, FrontendBufOS);
+ if (MC->shouldMangleDeclName(ND)) {
+ MC->mangleName(ND, FrontendBufOS);
+ } else {
+ ND->printName(FrontendBufOS);
+ }
// Now apply backend mangling.
std::unique_ptr<llvm::DataLayout> DL(
OpenPOWER on IntegriCloud