mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-19 02:42:58 +00:00
DebugInfo: Support namespace aliases as DW_TAG_imported_declaration instead of DW_TAG_imported_module
I really should read the spec more often (and test GCC more often too). I just assumed that namespace aliases would be the same as using directives, except with a name. But apparently that's not how the DWARF standards suggests they be implemented. DWARF4 provides an example and other non-normative text suggesting that namespace aliases be implemented by named imported declarations intsead of named imported modules. So be it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205685 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
20384a5583
commit
1c41705d34
@ -647,24 +647,27 @@ namespace llvm {
|
||||
/// @param NS The namespace being imported here
|
||||
/// @param Line Line number
|
||||
DIImportedEntity createImportedModule(DIScope Context, DINameSpace NS,
|
||||
unsigned Line,
|
||||
StringRef Name = StringRef());
|
||||
unsigned Line);
|
||||
|
||||
/// \brief Create a descriptor for an imported module.
|
||||
/// @param Context The scope this module is imported into
|
||||
/// @param NS An aliased namespace
|
||||
/// @param Line Line number
|
||||
DIImportedEntity createImportedModule(DIScope Context, DIImportedEntity NS,
|
||||
unsigned Line, StringRef Name);
|
||||
unsigned Line);
|
||||
|
||||
/// \brief Create a descriptor for an imported function.
|
||||
/// @param Context The scope this module is imported into
|
||||
/// @param Decl The declaration (or definition) of a function, type, or
|
||||
/// variable
|
||||
/// @param Line Line number
|
||||
DIImportedEntity createImportedDeclaration(DIScope Context, DIScope Decl,
|
||||
unsigned Line,
|
||||
StringRef Name = StringRef());
|
||||
DIImportedEntity createImportedDeclaration(DIScope Context,
|
||||
DIScope Decl,
|
||||
unsigned Line);
|
||||
DIImportedEntity NS,
|
||||
unsigned Line,
|
||||
StringRef Name = StringRef());
|
||||
|
||||
/// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
|
||||
/// @param Storage llvm::Value of the variable
|
||||
|
@ -146,13 +146,13 @@ DICompileUnit DIBuilder::createCompileUnit(unsigned Lang, StringRef Filename,
|
||||
}
|
||||
|
||||
static DIImportedEntity
|
||||
createImportedModule(LLVMContext &C, DIScope Context, DIDescriptor NS,
|
||||
unsigned Line, StringRef Name,
|
||||
SmallVectorImpl<TrackingVH<MDNode> > &AllImportedModules) {
|
||||
createImportedModule(LLVMContext &C, dwarf::Tag Tag, DIScope Context,
|
||||
Value *NS, unsigned Line, StringRef Name,
|
||||
SmallVectorImpl<TrackingVH<MDNode>> &AllImportedModules) {
|
||||
const MDNode *R;
|
||||
if (Name.empty()) {
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(C, dwarf::DW_TAG_imported_module),
|
||||
GetTagConstant(C, Tag),
|
||||
Context,
|
||||
NS,
|
||||
ConstantInt::get(Type::getInt32Ty(C), Line),
|
||||
@ -160,7 +160,7 @@ createImportedModule(LLVMContext &C, DIScope Context, DIDescriptor NS,
|
||||
R = MDNode::get(C, Elts);
|
||||
} else {
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(C, dwarf::DW_TAG_imported_module),
|
||||
GetTagConstant(C, Tag),
|
||||
Context,
|
||||
NS,
|
||||
ConstantInt::get(Type::getInt32Ty(C), Line),
|
||||
@ -175,33 +175,32 @@ createImportedModule(LLVMContext &C, DIScope Context, DIDescriptor NS,
|
||||
}
|
||||
|
||||
DIImportedEntity DIBuilder::createImportedModule(DIScope Context,
|
||||
DINameSpace NS, unsigned Line,
|
||||
StringRef Name) {
|
||||
return ::createImportedModule(VMContext, Context, NS, Line, Name,
|
||||
AllImportedModules);
|
||||
DINameSpace NS,
|
||||
unsigned Line) {
|
||||
return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
|
||||
Context, NS, Line, StringRef(), AllImportedModules);
|
||||
}
|
||||
|
||||
DIImportedEntity DIBuilder::createImportedModule(DIScope Context,
|
||||
DIImportedEntity NS,
|
||||
unsigned Line,
|
||||
StringRef Name) {
|
||||
return ::createImportedModule(VMContext, Context, NS, Line, Name,
|
||||
AllImportedModules);
|
||||
unsigned Line) {
|
||||
return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
|
||||
Context, NS, Line, StringRef(), AllImportedModules);
|
||||
}
|
||||
|
||||
DIImportedEntity DIBuilder::createImportedDeclaration(DIScope Context,
|
||||
DIScope Decl,
|
||||
unsigned Line) {
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(VMContext, dwarf::DW_TAG_imported_declaration),
|
||||
Context,
|
||||
Decl.getRef(),
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), Line),
|
||||
};
|
||||
DIImportedEntity M(MDNode::get(VMContext, Elts));
|
||||
assert(M.Verify() && "Imported module should be valid");
|
||||
AllImportedModules.push_back(TrackingVH<MDNode>(M));
|
||||
return M;
|
||||
unsigned Line, StringRef Name) {
|
||||
return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_declaration,
|
||||
Context, Decl.getRef(), Line, Name,
|
||||
AllImportedModules);
|
||||
}
|
||||
|
||||
DIImportedEntity DIBuilder::createImportedDeclaration(DIScope Context,
|
||||
DIImportedEntity Imp,
|
||||
unsigned Line, StringRef Name) {
|
||||
return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_declaration,
|
||||
Context, Imp, Line, Name, AllImportedModules);
|
||||
}
|
||||
|
||||
/// createFile - Create a file descriptor to hold debugging information
|
||||
|
@ -73,13 +73,13 @@
|
||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x16)
|
||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[I]]})
|
||||
; CHECK-NOT: NULL
|
||||
; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_module
|
||||
; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_declaration
|
||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x18)
|
||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
||||
; CHECK-NEXT: DW_AT_name{{.*}}"X"
|
||||
; CHECK-NOT: NULL
|
||||
; CHECK: DW_TAG_imported_module
|
||||
; CHECK: DW_TAG_imported_declaration
|
||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x19)
|
||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[X]]})
|
||||
@ -236,8 +236,8 @@ attributes #1 = { nounwind readnone }
|
||||
!36 = metadata !{i32 786468}
|
||||
!37 = metadata !{i32 786440, metadata !14, metadata !10, i32 21} ; [ DW_TAG_imported_declaration ]
|
||||
!38 = metadata !{i32 786440, metadata !14, metadata !20, i32 22} ; [ DW_TAG_imported_declaration ]
|
||||
!39 = metadata !{i32 786490, metadata !14, metadata !7, i32 24, metadata !"X"} ; [ DW_TAG_imported_module ]
|
||||
!40 = metadata !{i32 786490, metadata !14, metadata !39, i32 25, metadata !"Y"} ; [ DW_TAG_imported_module ]
|
||||
!39 = metadata !{i32 786440, metadata !14, metadata !7, i32 24, metadata !"X"} ; [ DW_TAG_imported_declaration ]
|
||||
!40 = metadata !{i32 786440, metadata !14, metadata !39, i32 25, metadata !"Y"} ; [ DW_TAG_imported_declaration ]
|
||||
!41 = metadata !{i32 3, i32 0, metadata !4, null}
|
||||
!42 = metadata !{i32 786689, metadata !10, metadata !"", metadata !15, i32 16777220, metadata !13, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [line 4]
|
||||
!43 = metadata !{i32 4, i32 0, metadata !10, null}
|
||||
|
Loading…
x
Reference in New Issue
Block a user