forked from OSchip/llvm-project
Debug Info: Support for DW_AT_export_symbols for anonymous structs
This implements the DWARF 5 feature described in: http://dwarfstd.org/ShowIssue.php?issue=141212.1 To support recognizing anonymous structs: struct A { struct { // Anonymous struct int y; }; } a; This patch adds support in CGDebugInfo::CreateLimitedType(...) for this new flag and an accompanying test to verify this feature. Differential Revision: https://reviews.llvm.org/D66667 llvm-svn: 370107
This commit is contained in:
parent
0c01d92051
commit
528f5da6d8
|
@ -3121,7 +3121,8 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
|
|||
|
||||
SmallString<256> Identifier = getTypeIdentifier(Ty, CGM, TheCU);
|
||||
|
||||
// Explicitly record the calling convention for C++ records.
|
||||
// Explicitly record the calling convention and export symbols for C++
|
||||
// records.
|
||||
auto Flags = llvm::DINode::FlagZero;
|
||||
if (auto CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
|
||||
if (CGM.getCXXABI().getRecordArgABI(CXXRD) == CGCXXABI::RAA_Indirect)
|
||||
|
@ -3132,6 +3133,10 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
|
|||
// Record if a C++ record is non-trivial type.
|
||||
if (!CXXRD->isTrivial())
|
||||
Flags |= llvm::DINode::FlagNonTrivial;
|
||||
|
||||
// Record exports it symbols to the containing structure.
|
||||
if (CXXRD->isAnonymousStructOrUnion())
|
||||
Flags |= llvm::DINode::FlagExportSymbols;
|
||||
}
|
||||
|
||||
llvm::DICompositeType *RealDecl = DBuilder.createReplaceableCompositeType(
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s
|
||||
|
||||
// CHECK: [[SCOPE:![0-9]+]] = distinct !DICompositeType({{.*}}flags: DIFlagTypePassByValue
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, scope: [[SCOPE]]
|
||||
// CHECK-SAME: DIFlagExportSymbols | DIFlagTypePassByValue
|
||||
struct A {
|
||||
// Anonymous class exports its symbols into A
|
||||
struct {
|
||||
int y;
|
||||
};
|
||||
} a;
|
Loading…
Reference in New Issue