summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 3f0a9af)
raw | patch | inline | side by side (parent: 3f0a9af)
author | Adrian Prantl <aprantl@apple.com> | |
Tue, 25 Feb 2014 22:27:14 +0000 (22:27 +0000) | ||
committer | Adrian Prantl <aprantl@apple.com> | |
Tue, 25 Feb 2014 22:27:14 +0000 (22:27 +0000) |
This is refactoring / simplifying code, updating comments and enabling the
testcase on non-x86 platforms.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202199 91177308-0d34-0410-b5e6-96231b3b80d8
testcase on non-x86 platforms.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202199 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/DwarfDebug.cpp | patch | blob | history | |
lib/CodeGen/AsmPrinter/DwarfUnit.cpp | patch | blob | history | |
lib/CodeGen/AsmPrinter/DwarfUnit.h | patch | blob | history | |
test/DebugInfo/varargs.ll | [moved from test/DebugInfo/X86/varargs.ll with 94% similarity] | patch | blob | history |
index 3c5868111d76d9ee5d1909a1384a0255a79b7ba8..b18e8d49ac0bc8706fd5c15a3555130b7de67ec8 100644 (file)
DIArray Args = SPTy.getTypeArray();
uint16_t SPTag = SPTy.getTag();
if (SPTag == dwarf::DW_TAG_subroutine_type)
- // FIXME: Use DwarfUnit::constructSubprogramArguments() here.
- for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
- DIType ATy(Args.getElement(i));
- if (ATy.isUnspecifiedParameter()) {
- assert(i == N-1 && "ellipsis must be the last argument");
- SPCU->createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, *SPDie);
- } else {
- DIE *Arg =
- SPCU->createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie);
- SPCU->addType(Arg, ATy);
- if (ATy.isArtificial())
- SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
- if (ATy.isObjectPointer())
- SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer, Arg);
- }
- }
+ SPCU->constructSubprogramArguments(*SPDie, Args);
DIE *SPDeclDie = SPDie;
SPDie = SPCU->createAndAddDIE(dwarf::DW_TAG_subprogram,
*SPCU->getUnitDie());
ObjectPointer = Arg;
}
- // Create the unspecified parameter that marks a function as variadic.
+ // If this is a variadic function, add an unspecified parameter.
DISubprogram SP(Scope->getScopeNode());
- assert(SP.Verify());
DIArray FnArgs = SP.getType().getTypeArray();
if (FnArgs.getElement(FnArgs.getNumElements()-1).isUnspecifiedParameter()) {
DIE *Ellipsis = new DIE(dwarf::DW_TAG_unspecified_parameters);
index 4626c43f56890066954d4193a6ef0853d0653797..dadb536691a5c8397da84b59699d91efcd0a6cc1 100644 (file)
/// constructSubprogramArguments - Construct function argument DIEs.
void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DIArray Args) {
- for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
- DIDescriptor Ty = Args.getElement(i);
- if (Ty.isUnspecifiedParameter()) {
- assert(i == N-1 && "ellipsis must be the last argument");
- createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
- } else {
- DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
- addType(Arg, DIType(Ty));
- if (DIType(Ty).isArtificial())
- addFlag(Arg, dwarf::DW_AT_artificial);
- }
+ for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
+ DIDescriptor Ty = Args.getElement(i);
+ if (Ty.isUnspecifiedParameter()) {
+ assert(i == N-1 && "Unspecified parameter must be the last argument");
+ createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
+ } else {
+ DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
+ addType(Arg, DIType(Ty));
+ if (DIType(Ty).isArtificial())
+ addFlag(Arg, dwarf::DW_AT_artificial);
}
+ }
}
/// constructTypeDIE - Construct type DIE from DICompositeType.
index bf77272b8a2dad69f341fc6cfbddd627f97860c5..8dd25a0a1da45a12ef7f671657e60b4b32025660 100644 (file)
/// constructVariableDIE - Construct a DIE for the given DbgVariable.
DIE *constructVariableDIE(DbgVariable &DV, bool isScopeAbstract);
+ /// constructSubprogramArguments - Construct function argument DIEs.
+ void constructSubprogramArguments(DIE &Buffer, DIArray Args);
+
/// Create a DIE with the given Tag, add the DIE to its parent, and
/// call insertDIE if MD is not null.
DIE *createAndAddDIE(unsigned Tag, DIE &Parent,
DIE *getOrCreateStaticMemberDIE(DIDerivedType DT);
private:
- /// constructSubprogramArguments - Construct function argument DIEs.
- void constructSubprogramArguments(DIE &Buffer, DIArray Args);
-
/// constructTypeDIE - Construct basic type die from DIBasicType.
void constructTypeDIE(DIE &Buffer, DIBasicType BTy);
similarity index 94%
rename from test/DebugInfo/X86/varargs.ll
rename to test/DebugInfo/varargs.ll
index e724d75445304224e990000ceda4666fb65246da..52e9e8b724d712adc729ede03a25894b7799df3b 100644 (file)
rename from test/DebugInfo/X86/varargs.ll
rename to test/DebugInfo/varargs.ll
index e724d75445304224e990000ceda4666fb65246da..52e9e8b724d712adc729ede03a25894b7799df3b 100644 (file)
; RUN: llc -O0 -filetype=obj -o %t.o %s
; RUN: llvm-dwarfdump -debug-dump=info %t.o | FileCheck %s
+; REQUIRES: object-emission
+;
+; Test debug info for variadic function arguments.
+; Created from tools/clang/tests/CodeGenCXX/debug-info-varargs.cpp
+;
+; The ... parameter of variadic should be emitted as
+; DW_TAG_unspecified_parameters.
;
; Normal variadic function.
+; void b(int c, ...);
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
+; CHECK: DW_AT_name {{.*}} "b"
+; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
; Variadic C++ member function.
+; struct A { void a(int c, ...); }
;
; CHECK: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
+; CHECK: DW_AT_name {{.*}} "a"
+; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_formal_parameter
; CHECK: DW_TAG_unspecified_parameters
;
; Variadic function pointer.
+; void (*fptr)(int, ...);
;
; CHECK: DW_TAG_subroutine_type
; CHECK-NOT: DW_TAG
; CHECK-NOT: DW_TAG
; CHECK: DW_TAG_unspecified_parameters
;
-; Test debug info for variadic function arguments.
-; Created from tools/clang/tests/CodeGenCXX/debug-info-varargs.cpp
-;
; ModuleID = 'llvm/tools/clang/test/CodeGenCXX/debug-info-varargs.cpp'
-target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-apple-macosx10.9.0"
%struct.A = type { i8 }