Skip to content

Commit 3ff2842

Browse files
committed
Strip most of the DIExpr-based implementation
The IR definitions for the intrinsics and metadata are retained for now to enable stripping them via `opt -strip-debug` Every path for them to be selected, translated, or serialized is replaced with an ungraceful report_fatal_error("unsupported DIExpr-based metadata") In some places there may have been a path to a more graceful error report, but it seemed useful to have a unified message and a uniform reporting mechanism.
1 parent 8875c00 commit 3ff2842

File tree

135 files changed

+2566
-10265
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

135 files changed

+2566
-10265
lines changed

clang/include/clang/Basic/CodeGenOptions.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,11 @@ class CodeGenOptions : public CodeGenOptionsBase {
166166

167167
enum class HeterogeneousDwarfOpts {
168168
Disabled, //< Do not emit any heterogeneous dwarf metadata.
169-
DIExpr, //< Enable DIExpr-based metadata.
170169
DIExpression, //< Enable DIExpression-based metadata.
171170
};
172171
bool isHeterogeneousDwarfEnabled() const {
173172
return getHeterogeneousDwarfMode() != HeterogeneousDwarfOpts::Disabled;
174173
}
175-
bool isHeterogeneousDwarfDIExpr() const {
176-
return getHeterogeneousDwarfMode() == HeterogeneousDwarfOpts::DIExpr;
177-
}
178-
bool isHeterogeneousDwarfDIExpression() const {
179-
return getHeterogeneousDwarfMode() == HeterogeneousDwarfOpts::DIExpression;
180-
}
181174

182175
enum AssignmentTrackingOpts {
183176
Disabled,

clang/include/clang/Driver/Options.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4599,9 +4599,9 @@ def gdwarf32 : Flag<["-"], "gdwarf32">, Group<g_Group>,
45994599
def gheterogeneous_dwarf_EQ : Joined<["-"], "gheterogeneous-dwarf=">,
46004600
Group<g_Group>, Visibility<[ClangOption, CC1Option]>,
46014601
HelpText<"Control DWARF extensions for heterogeneous debugging">,
4602-
Values<"disabled,diexpr,diexpression">,
4602+
Values<"disabled,diexpression">,
46034603
NormalizedValuesScope<"CodeGenOptions::HeterogeneousDwarfOpts">,
4604-
NormalizedValues<["Disabled","DIExpr","DIExpression"]>,
4604+
NormalizedValues<["Disabled","DIExpression"]>,
46054605
MarshallingInfoEnum<CodeGenOpts<"HeterogeneousDwarfMode">, "Disabled">;
46064606
def gheterogeneous_dwarf : Flag<["-"], "gheterogeneous-dwarf">, Group<g_Group>,
46074607
Visibility<[ClangOption, CC1Option]>,

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 43 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -4869,7 +4869,8 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD,
48694869
CGBuilderTy &Builder,
48704870
const bool UsePointerValue) {
48714871
if (CGM.getCodeGenOpts().isHeterogeneousDwarfEnabled())
4872-
return EmitDef(VD, Storage, ArgNo, Builder, UsePointerValue);
4872+
return EmitDeclareForHeterogeneousDwarf(VD, Storage, ArgNo, Builder,
4873+
UsePointerValue);
48734874

48744875
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
48754876
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
@@ -5051,11 +5052,9 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD,
50515052
return D;
50525053
}
50535054

5054-
llvm::DILocalVariable *CGDebugInfo::EmitDef(const BindingDecl *BD,
5055-
llvm::Value *Storage,
5056-
std::optional<unsigned> ArgNo,
5057-
CGBuilderTy &Builder,
5058-
const bool UsePointerValue) {
5055+
llvm::DILocalVariable *CGDebugInfo::EmitDeclareForHeterogeneousDwarf(
5056+
const BindingDecl *BD, llvm::Value *Storage, std::optional<unsigned> ArgNo,
5057+
CGBuilderTy &Builder, const bool UsePointerValue) {
50595058
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
50605059
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
50615060
if (BD->hasAttr<NoDebugAttr>())
@@ -5077,10 +5076,7 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const BindingDecl *BD,
50775076
CGM.getTypes().ConvertTypeForMem(BD->getDecomposedDecl()->getType());
50785077

50795078
llvm::DIExprBuilder ExprBuilder(CGM.getLLVMContext());
5080-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5081-
ExprBuilder.append<llvm::DIOp::Referrer>(Storage->getType());
5082-
else
5083-
ExprBuilder.append<llvm::DIOp::Arg>(0u, Storage->getType());
5079+
ExprBuilder.append<llvm::DIOp::Arg>(0u, Storage->getType());
50845080
ExprBuilder.append<llvm::DIOp::Deref>(DecomposedTy);
50855081

50865082
if (UsePointerValue) {
@@ -5129,25 +5125,16 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const BindingDecl *BD,
51295125
}
51305126
}
51315127

5132-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5133-
DBuilder.insertDef(
5134-
DBuilder.createBoundedLifetime(D, ExprBuilder.intoExpr()), Storage,
5135-
llvm::DILocation::get(CGM.getLLVMContext(), Line, Column, Scope,
5136-
CurInlinedAt),
5137-
Builder.GetInsertBlock());
5138-
else
5139-
DBuilder.insertDeclare(Storage, D, ExprBuilder.intoExpression(),
5140-
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5141-
Column, Scope, CurInlinedAt),
5142-
Builder.GetInsertBlock());
5128+
DBuilder.insertDeclare(Storage, D, ExprBuilder.intoExpression(),
5129+
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5130+
Column, Scope, CurInlinedAt),
5131+
Builder.GetInsertBlock());
51435132
return D;
51445133
}
51455134

5146-
llvm::DILocalVariable *CGDebugInfo::EmitDef(const VarDecl *VD,
5147-
llvm::Value *Storage,
5148-
std::optional<unsigned> ArgNo,
5149-
CGBuilderTy &Builder,
5150-
const bool UsePointerValue) {
5135+
llvm::DILocalVariable *CGDebugInfo::EmitDeclareForHeterogeneousDwarf(
5136+
const VarDecl *VD, llvm::Value *Storage, std::optional<unsigned> ArgNo,
5137+
CGBuilderTy &Builder, const bool UsePointerValue) {
51515138
assert(CGM.getCodeGenOpts().hasReducedDebugInfo() &&
51525139
"Call to EmitDef below ReducedDebugInfo");
51535140
assert(CGM.getCodeGenOpts().isHeterogeneousDwarfEnabled() &&
@@ -5203,10 +5190,7 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const VarDecl *VD,
52035190
CGM.getLLVMContext());
52045191

52055192
llvm::DIExprBuilder ExprBuilder(CGM.getLLVMContext());
5206-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5207-
ExprBuilder.append<llvm::DIOp::Referrer>(Storage->getType());
5208-
else
5209-
ExprBuilder.append<llvm::DIOp::Arg>(0u, Storage->getType());
5193+
ExprBuilder.append<llvm::DIOp::Arg>(0u, Storage->getType());
52105194
llvm::Type *ReferrerPointeeTy =
52115195
(!Name.empty() && VD->isEscapingByref()) ? BlockPtrTy : VDMemTy;
52125196
if (UsePointerValue)
@@ -5249,12 +5233,7 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const VarDecl *VD,
52495233
const RecordDecl *RD = RT->getDecl();
52505234
if (RD->isUnion() && RD->isAnonymousStructOrUnion()) {
52515235
llvm::DIExprBuilder UnionExprBuilder{ExprBuilder};
5252-
llvm::DIExpr *UnionDIExpr = nullptr;
5253-
llvm::DIExpression *UnionDIExpression = nullptr;
5254-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5255-
UnionDIExpr = UnionExprBuilder.intoExpr();
5256-
else
5257-
UnionDIExpression = UnionExprBuilder.intoExpression();
5236+
llvm::DIExpression *UnionDIExpression = UnionExprBuilder.intoExpression();
52585237

52595238
// GDB has trouble finding local variables in anonymous unions, so we emit
52605239
// artificial local variables for each of the members.
@@ -5278,18 +5257,11 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const VarDecl *VD,
52785257
Flags | llvm::DINode::FlagArtificial, MS, FieldAlign);
52795258

52805259
// Insert an intrinsic into the current block.
5281-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5282-
DBuilder.insertDef(DBuilder.createBoundedLifetime(D, UnionDIExpr),
5283-
Storage,
5284-
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5285-
Column, Scope, CurInlinedAt),
5286-
Builder.GetInsertBlock());
5287-
else
5288-
DBuilder.insertDeclare(Storage, D, UnionDIExpression,
5289-
llvm::DILocation::get(CGM.getLLVMContext(),
5290-
Line, Column, Scope,
5291-
CurInlinedAt),
5292-
Builder.GetInsertBlock());
5260+
DBuilder.insertDeclare(Storage, D, UnionDIExpression,
5261+
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5262+
Column, Scope,
5263+
CurInlinedAt),
5264+
Builder.GetInsertBlock());
52935265
}
52945266
}
52955267
}
@@ -5349,17 +5321,10 @@ llvm::DILocalVariable *CGDebugInfo::EmitDef(const VarDecl *VD,
53495321
Align);
53505322
}
53515323
// Insert an intrinsic into the current block.
5352-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
5353-
DBuilder.insertDef(
5354-
DBuilder.createBoundedLifetime(D, ExprBuilder.intoExpr()), Storage,
5355-
llvm::DILocation::get(CGM.getLLVMContext(), Line, Column, Scope,
5356-
CurInlinedAt),
5357-
Builder.GetInsertBlock());
5358-
else
5359-
DBuilder.insertDeclare(Storage, D, ExprBuilder.intoExpression(),
5360-
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5361-
Column, Scope, CurInlinedAt),
5362-
Builder.GetInsertBlock());
5324+
DBuilder.insertDeclare(Storage, D, ExprBuilder.intoExpression(),
5325+
llvm::DILocation::get(CGM.getLLVMContext(), Line,
5326+
Column, Scope, CurInlinedAt),
5327+
Builder.GetInsertBlock());
53635328

53645329
llvm::Function *Parent = Builder.GetInsertBlock()->getParent();
53655330
assert(Parent->getSubprogram() && "expected DISubprogram");
@@ -5374,7 +5339,8 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const BindingDecl *BD,
53745339
const bool UsePointerValue) {
53755340

53765341
if (CGM.getCodeGenOpts().isHeterogeneousDwarfEnabled())
5377-
return EmitDef(BD, Storage, ArgNo, Builder, UsePointerValue);
5342+
return EmitDeclareForHeterogeneousDwarf(BD, Storage, ArgNo, Builder,
5343+
UsePointerValue);
53785344

53795345
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
53805346
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
@@ -5837,41 +5803,12 @@ llvm::DIGlobalVariableExpression *CGDebugInfo::CollectAnonRecordDecls(
58375803
return GVE;
58385804
}
58395805

5840-
llvm::DIGlobalVariable *
5841-
CGDebugInfo::CollectAnonRecordDeclsForHeterogeneousDwarfDIExpr(
5842-
const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
5843-
StringRef LinkageName, llvm::dwarf::MemorySpace MS,
5844-
llvm::GlobalVariable *Var, llvm::DIScope *DContext) {
5845-
assert(CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr());
5846-
5847-
llvm::DIGlobalVariable *GV = nullptr;
5848-
5849-
for (const auto *Field : RD->fields()) {
5850-
llvm::DIType *FieldTy = getOrCreateType(Field->getType(), Unit);
5851-
StringRef FieldName = Field->getName();
5852-
5853-
// Ignore unnamed fields, but recurse into anonymous records.
5854-
if (FieldName.empty()) {
5855-
if (const auto *RT = dyn_cast<RecordType>(Field->getType()))
5856-
GV = CollectAnonRecordDeclsForHeterogeneousDwarfDIExpr(
5857-
RT->getDecl(), Unit, LineNo, LinkageName, MS, Var, DContext);
5858-
continue;
5859-
}
5860-
// Use VarDecl's Tag, Scope and Line number.
5861-
GV = DBuilder.createGlobalVariable(DContext, FieldName, LinkageName, Unit,
5862-
LineNo, FieldTy, Var->hasLocalLinkage(),
5863-
MS);
5864-
Var->addDebugInfo(GV);
5865-
}
5866-
return GV;
5867-
}
5868-
58695806
llvm::DIGlobalVariableExpression *
5870-
CGDebugInfo::CollectAnonRecordDeclsForHeterogeneousDwarfDIExpression(
5807+
CGDebugInfo::CollectAnonRecordDeclsForHeterogeneousDwarf(
58715808
const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
58725809
StringRef LinkageName, llvm::dwarf::MemorySpace MS,
58735810
llvm::GlobalVariable *Var, llvm::DIScope *DContext) {
5874-
assert(CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpression());
5811+
assert(CGM.getCodeGenOpts().isHeterogeneousDwarfEnabled());
58755812

58765813
llvm::DIGlobalVariableExpression *GVE = nullptr;
58775814

@@ -5882,7 +5819,7 @@ CGDebugInfo::CollectAnonRecordDeclsForHeterogeneousDwarfDIExpression(
58825819
// Ignore unnamed fields, but recurse into anonymous records.
58835820
if (FieldName.empty()) {
58845821
if (const auto *RT = dyn_cast<RecordType>(Field->getType()))
5885-
GVE = CollectAnonRecordDeclsForHeterogeneousDwarfDIExpression(
5822+
GVE = CollectAnonRecordDeclsForHeterogeneousDwarf(
58865823
RT->getDecl(), Unit, LineNo, LinkageName, MS, Var, DContext);
58875824
continue;
58885825
}
@@ -6239,7 +6176,6 @@ void CGDebugInfo::EmitGlobalVariableForHeterogeneousDwarf(
62396176

62406177
// Attempt to store one global variable for the declaration - even if we
62416178
// emit a lot of fields.
6242-
llvm::DIGlobalVariable *DGV = nullptr;
62436179
llvm::DIGlobalVariableExpression *GVE = nullptr;
62446180

62456181
// If this is an anonymous union then we'll want to emit a global
@@ -6251,12 +6187,8 @@ void CGDebugInfo::EmitGlobalVariableForHeterogeneousDwarf(
62516187
assert(RD->isAnonymousStructOrUnion() &&
62526188
"unnamed non-anonymous struct or union?");
62536189
// FIXME(KZHURAVL): No tests for this path.
6254-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
6255-
DGV = CollectAnonRecordDeclsForHeterogeneousDwarfDIExpr(
6256-
RD, Unit, LineNo, LinkageName, MS, Var, DContext);
6257-
else
6258-
GVE = CollectAnonRecordDeclsForHeterogeneousDwarfDIExpression(
6259-
RD, Unit, LineNo, LinkageName, MS, Var, DContext);
6190+
GVE = CollectAnonRecordDeclsForHeterogeneousDwarf(
6191+
RD, Unit, LineNo, LinkageName, MS, Var, DContext);
62606192
} else {
62616193
auto Align = getDeclAlignIfRequired(D, CGM.getContext());
62626194

@@ -6267,38 +6199,14 @@ void CGDebugInfo::EmitGlobalVariableForHeterogeneousDwarf(
62676199

62686200
llvm::DINodeArray Annotations = CollectBTFDeclTagAnnotations(D);
62696201

6270-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr()) {
6271-
DGV = DBuilder.createGlobalVariable(
6272-
DContext, DeclName, LinkageName, Unit, LineNo,
6273-
getOrCreateType(T, Unit), Var->hasLocalLinkage(), true,
6274-
getOrCreateStaticDataMemberDeclarationOrNull(D), TemplateParameters,
6275-
MS, getDeclAlignIfRequired(D, CGM.getContext()));
6276-
6277-
// Create DIFragment.
6278-
llvm::DIFragment *Fragment = DBuilder.createFragment();
6279-
SmallVector<llvm::Metadata *> LifetimeArgs;
6280-
LifetimeArgs.push_back(Fragment);
6281-
6282-
// Create DILifetime and add to llvm.dbg.retainedNodes named metadata.
6283-
DBuilder.createComputedLifetime(DGV, ExprBuilder.intoExpr(),
6284-
LifetimeArgs);
6285-
6286-
Var->setDbgDef(Fragment);
6287-
6288-
} else {
6289-
GVE = DBuilder.createGlobalVariableExpression(
6290-
DContext, DeclName, LinkageName, Unit, LineNo,
6291-
getOrCreateType(T, Unit), Var->hasLocalLinkage(), true,
6292-
ExprBuilder.intoExpression(),
6293-
getOrCreateStaticDataMemberDeclarationOrNull(D), TemplateParameters,
6294-
MS, Align, Annotations);
6295-
Var->addDebugInfo(GVE);
6296-
}
6202+
GVE = DBuilder.createGlobalVariableExpression(
6203+
DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit),
6204+
Var->hasLocalLinkage(), true, ExprBuilder.intoExpression(),
6205+
getOrCreateStaticDataMemberDeclarationOrNull(D), TemplateParameters, MS,
6206+
Align, Annotations);
6207+
Var->addDebugInfo(GVE);
62976208
}
6298-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr())
6299-
GV.reset(DGV);
6300-
else
6301-
DeclCache[D->getCanonicalDecl()].reset(GVE);
6209+
DeclCache[D->getCanonicalDecl()].reset(GVE);
63026210
}
63036211

63046212
void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) {
@@ -6462,22 +6370,11 @@ void CGDebugInfo::EmitGlobalVariableForHeterogeneousDwarf(
64626370
ExprBuilder.append<llvm::DIOp::Constant>(
64636371
llvm::ConstantFP::get(CGM.getLLVMContext(), Init.getFloat()));
64646372

6465-
if (CGM.getCodeGenOpts().isHeterogeneousDwarfDIExpr()) {
6466-
llvm::DIGlobalVariable *DGV = DBuilder.createGlobalVariable(
6467-
DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
6468-
true, true, getOrCreateStaticDataMemberDeclarationOrNull(VarD),
6469-
TemplateParameters, MS, Align);
6470-
6471-
DBuilder.createComputedLifetime(DGV, ExprBuilder.intoExpr(), {});
6472-
6473-
GV.reset(DGV);
6474-
} else {
6475-
GV.reset(DBuilder.createGlobalVariableExpression(
6476-
DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
6477-
true, true, ExprBuilder.intoExpression(),
6478-
getOrCreateStaticDataMemberDeclarationOrNull(VarD), TemplateParameters,
6479-
MS, Align));
6480-
}
6373+
GV.reset(DBuilder.createGlobalVariableExpression(
6374+
DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty,
6375+
true, true, ExprBuilder.intoExpression(),
6376+
getOrCreateStaticDataMemberDeclarationOrNull(VarD), TemplateParameters,
6377+
MS, Align));
64816378
}
64826379

64836380
void CGDebugInfo::EmitExternalVariable(llvm::GlobalVariable *Var,

clang/lib/CodeGen/CGDebugInfo.h

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -653,21 +653,19 @@ class CGDebugInfo {
653653
CGBuilderTy &Builder,
654654
const bool UsePointerValue = false);
655655

656-
/// Emit call to llvm.dbg.def for a variable definition.
656+
/// Emit call to llvm.dbg.declare for a variable definition.
657657
/// Returns a pointer to the DILocalVariable associated with the
658658
/// llvm.dbg.def, or nullptr otherwise.
659-
llvm::DILocalVariable *EmitDef(const VarDecl *decl, llvm::Value *AI,
660-
std::optional<unsigned> ArgNo,
661-
CGBuilderTy &Builder,
662-
const bool UsePointerValue = false);
659+
llvm::DILocalVariable *EmitDeclareForHeterogeneousDwarf(
660+
const VarDecl *decl, llvm::Value *AI, std::optional<unsigned> ArgNo,
661+
CGBuilderTy &Builder, const bool UsePointerValue = false);
663662

664-
/// Emit call to llvm.dbg.def for a structured binding definition.
663+
/// Emit call to llvm.dbg.declare for a structured binding definition.
665664
/// Returns a pointer to the DILocalVariable associated with the
666665
/// llvm.dbg.def, or nullptr otherwise.
667-
llvm::DILocalVariable *EmitDef(const BindingDecl *decl, llvm::Value *AI,
668-
std::optional<unsigned> ArgNo,
669-
CGBuilderTy &Builder,
670-
const bool UsePointerValue = false);
666+
llvm::DILocalVariable *EmitDeclareForHeterogeneousDwarf(
667+
const BindingDecl *decl, llvm::Value *AI, std::optional<unsigned> ArgNo,
668+
CGBuilderTy &Builder, const bool UsePointerValue = false);
671669

672670
/// Emit call to llvm.dbg.declare for a binding declaration.
673671
/// Returns a pointer to the DILocalVariable associated with the
@@ -812,20 +810,7 @@ class CGDebugInfo {
812810
/// anonymous decl and create static variables for them. The first
813811
/// time this is called it needs to be on a union and then from
814812
/// there we can have additional unnamed fields.
815-
llvm::DIGlobalVariable *CollectAnonRecordDeclsForHeterogeneousDwarfDIExpr(
816-
const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
817-
StringRef LinkageName, llvm::dwarf::MemorySpace MS,
818-
llvm::GlobalVariable *Var, llvm::DIScope *DContext);
819-
820-
/// Return a global variable that represents one of the collection of global
821-
/// variables created for an anonmyous union (-gheterogeneous-dwarf).
822-
///
823-
/// Recursively collect all of the member fields of a global
824-
/// anonymous decl and create static variables for them. The first
825-
/// time this is called it needs to be on a union and then from
826-
/// there we can have additional unnamed fields.
827-
llvm::DIGlobalVariableExpression *
828-
CollectAnonRecordDeclsForHeterogeneousDwarfDIExpression(
813+
llvm::DIGlobalVariableExpression *CollectAnonRecordDeclsForHeterogeneousDwarf(
829814
const RecordDecl *RD, llvm::DIFile *Unit, unsigned LineNo,
830815
StringRef LinkageName, llvm::dwarf::MemorySpace MS,
831816
llvm::GlobalVariable *Var, llvm::DIScope *DContext);

0 commit comments

Comments
 (0)