diff options
author | Siva Chandra <sivachandra@google.com> | 2015-04-09 18:48:34 +0000 |
---|---|---|
committer | Siva Chandra <sivachandra@google.com> | 2015-04-09 18:48:34 +0000 |
commit | 0f404e057501728e819a8955c893fb4b772ba97f (patch) | |
tree | 0f3630849d40921eea8787cb51d442366e2c9c90 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | 10821e5283fd190c8ff38dcad8b5e2a2fcdc4e5a (diff) | |
download | llvm-0f404e057501728e819a8955c893fb4b772ba97f.zip llvm-0f404e057501728e819a8955c893fb4b772ba97f.tar.gz llvm-0f404e057501728e819a8955c893fb4b772ba97f.tar.bz2 |
[IRForTarget] Strenghten handling of alternate mangling.
Summary:
This fixes an issue with GCC generated binaries wherein an expression
with method invocations on std::string variables was failing. Such use
cases are tested in TestSTL (albeit, in a test marked with
@unittest2.expectedFailure because of other reasons).
The reason for this particular failure with GCC is that the generated
DWARF for std::basic_string<...> is incomplete, which makes clang not
to use the alternate mangling scheme. GCC correctly generates the name
of basic_string<...>:
DW_AT_name "basic_string<char, std::char_traits<char>, std::allocator<char> >"
It also lists the template parameters of basic_string correctly:
DW_TAG_template_type_parameter
DW_AT_name "_CharT"
DW_AT_type <0x0000009c>
DW_TAG_template_type_parameter
DW_AT_name "_Traits"
DW_AT_type <0x00000609>
DW_TAG_template_type_parameter
DW_AT_name "_Alloc"
DW_AT_type <0x000007fb>
However, it does not list the template parameters of std::char_traits<>.
This makes Clang feel (while parsing the expression) that the string
variable is not actually a basic_string instance, and consequently does
not use the alternate mangling scheme.
Test Plan:
dotest.py -C gcc -p TestSTL
-- See it go past the "for" loop expression successfully.
Reviewers: clayborg, spyffe
Reviewed By: clayborg, spyffe
Subscribers: tberghammer, zturner, lldb-commits
Differential Revision: http://reviews.llvm.org/D8846
llvm-svn: 234522
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions