forked from OSchip/llvm-project
cxa_demangle: fix rvalue ref check
When checking if the type is a r-value ref, we would not do a complete check. This would result in us treating a trailing parameter reference `&)` as a r-value ref, and improperly inject the cv qualifier on the type. We now correctly demangle the type `KFvRmE` as a constant function rather than a constant reference. Fixes PR31741! llvm-svn: 292973
This commit is contained in:
parent
65cb42c1ce
commit
f5d26bb142
|
@ -1927,7 +1927,8 @@ parse_type(const char* first, const char* last, C& db)
|
|||
if (is_function)
|
||||
{
|
||||
size_t p = db.names[k].second.size();
|
||||
if (db.names[k].second[p-2] == '&')
|
||||
if (db.names[k].second[p - 2] == '&' &&
|
||||
db.names[k].second[p - 1] == '&')
|
||||
p -= 2;
|
||||
else if (db.names[k].second.back() == '&')
|
||||
p -= 1;
|
||||
|
|
|
@ -29598,9 +29598,8 @@ const char* cases[][2] =
|
|||
// mangled names can include type manglings too, which don't start with _Z:
|
||||
{"i", "int"},
|
||||
|
||||
// FIXME(compnerd) this should be void (int &) const
|
||||
{"PKFvRiE", "void (*)(int const&)"},
|
||||
// TODO(compnerd) pretty print this as void (*)(unsigned long&) volatile &&"
|
||||
{"PKFvRiE", "void (*)(int&) const"},
|
||||
// FIXME(compnerd) pretty print this as void (*)(unsigned long &) volatile &&
|
||||
{"PVFvRmOE", "void (*)(unsigned long&) volatile&&"},
|
||||
{"PFvRmOE", "void (*)(unsigned long&) &&"},
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue