[llvm-bugs] [Bug 35651] New: Demangler produces incorrect output for alignof() and array.
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Dec 13 12:23:32 PST 2017
https://bugs.llvm.org/show_bug.cgi?id=35651
Bug ID: 35651
Summary: Demangler produces incorrect output for alignof() and
array.
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: huangs at google.com
CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
Please run the following:
llvm-cxxfilt _Z3fooDTatA123_3barE
The result:
foo(decltype(alignof (bar [123]) [123]))
The extra "[123]" at end seems wrong. Note that replacing "at" with "st" yields
correct result:
llvm-cxxfilt _Z3fooDTstA123_3barE
=>
foo(decltype(sizeof (bar [123]))
This behavior is caused by code in 2 places (see ItaniumDemangle.cpp)
(1) In struct string_pair: We have
StrT move_full() { return std::move(first) + std::move(second); }
this actually does not clear |first| and |second|!
(2) Compare parse_sizeof_type_expr() with parse_alignof_type(): The former has
db.names.back() = "sizeof (" + db.names.back().move_full() + ")
but the latter has
db.names.back().first = "alignof (" + db.names.back().move_full() + ")";
Therefore "st" (sizeof) overwrites |second| whereas "at" (alignof) keeps
stale |second|.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20171213/1cd4c366/attachment.html>
More information about the llvm-bugs
mailing list