diff options
author | Ehsan Akhgari <ehsan.akhgari@gmail.com> | 2015-10-08 00:01:20 +0000 |
---|---|---|
committer | Ehsan Akhgari <ehsan.akhgari@gmail.com> | 2015-10-08 00:01:20 +0000 |
commit | f8d44de1438a22c1755b27a0e91dc3b7b21bb7f2 (patch) | |
tree | 6b724a3ac0c9f6b7e1d5bc845b5317f661dba873 /clang | |
parent | 94fe836afa104c0618a162e294003e9cbc663540 (diff) | |
download | bcm5719-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.cpp | 5 | ||||
-rw-r--r-- | clang/tools/c-index-test/c-index-test.c | 2 | ||||
-rw-r--r-- | clang/tools/libclang/CIndex.cpp | 6 |
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( |