mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 00:06:50 +00:00
Avoid assert when a non-static member function is qualified with __unaligned
Under -fms-extensions __unaligned is a type-qualifier that can be applied to a non-static member function declaration. This causes an assertion when mangling the name under Itanium, where that qualifier is not mangled. This patch justs makes the minimal change to avoid the crash and avoid mangling __unaligned, as it currently happens with non-member functions. Differential Revision: https://reviews.llvm.org/D31976 llvm-svn: 300686
This commit is contained in:
parent
f3f923c9d2
commit
cb89513bc7
@ -1455,10 +1455,12 @@ void CXXNameMangler::mangleNestedName(const NamedDecl *ND,
|
||||
Out << 'N';
|
||||
if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(ND)) {
|
||||
Qualifiers MethodQuals =
|
||||
Qualifiers::fromCVRMask(Method->getTypeQualifiers());
|
||||
Qualifiers::fromCVRUMask(Method->getTypeQualifiers());
|
||||
// We do not consider restrict a distinguishing attribute for overloading
|
||||
// purposes so we must not mangle it.
|
||||
MethodQuals.removeRestrict();
|
||||
// __unaligned is not currently mangled in any way, so remove it.
|
||||
MethodQuals.removeUnaligned();
|
||||
mangleQualifiers(MethodQuals);
|
||||
mangleRefQualifier(Method->getRefQualifier());
|
||||
}
|
||||
|
20
clang/test/CodeGenCXX/unaligned-duplicated-mangle-name.cpp
Normal file
20
clang/test/CodeGenCXX/unaligned-duplicated-mangle-name.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
// RUN: %clang_cc1 -triple %itanium_abi_triple -fms-extensions -emit-llvm-only %s -verify
|
||||
|
||||
struct A
|
||||
{
|
||||
int x;
|
||||
void foo() __unaligned;
|
||||
void foo();
|
||||
};
|
||||
|
||||
void A::foo() __unaligned
|
||||
{
|
||||
this->x++;
|
||||
}
|
||||
|
||||
void A::foo() // expected-error {{definition with same mangled name as another definition}}
|
||||
// expected-note@-6 {{previous definition is here}}
|
||||
{
|
||||
this->x++;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user