forked from OSchip/llvm-project
[DebugInfo] Add another level to DebugInfoKind called Constructor
The option will limit debug info by only emitting complete class type information when its constructor is emitted. This patch changes comparisons with LimitedDebugInfo to use the new level instead. Differential Revision: https://reviews.llvm.org/D72427
This commit is contained in:
parent
c774840492
commit
53539bb032
|
@ -357,6 +357,11 @@ public:
|
||||||
|
|
||||||
/// Check if CSIR profile use is on.
|
/// Check if CSIR profile use is on.
|
||||||
bool hasProfileCSIRUse() const { return getProfileUse() == ProfileCSIRInstr; }
|
bool hasProfileCSIRUse() const { return getProfileUse() == ProfileCSIRInstr; }
|
||||||
|
|
||||||
|
/// Check if type and variable info should be emitted.
|
||||||
|
bool hasReducedDebugInfo() const {
|
||||||
|
return getDebugInfo() >= codegenoptions::DebugInfoConstructor;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace clang
|
} // end namespace clang
|
||||||
|
|
|
@ -34,6 +34,11 @@ enum DebugInfoKind {
|
||||||
/// (-gline-tables-only).
|
/// (-gline-tables-only).
|
||||||
DebugLineTablesOnly,
|
DebugLineTablesOnly,
|
||||||
|
|
||||||
|
/// Limit generated debug info for classes to reduce size. This emits class
|
||||||
|
/// type info only where the constructor is emitted, if it is a class that
|
||||||
|
/// has a constructor.
|
||||||
|
DebugInfoConstructor,
|
||||||
|
|
||||||
/// Limit generated debug info to reduce size (-fno-standalone-debug). This
|
/// Limit generated debug info to reduce size (-fno-standalone-debug). This
|
||||||
/// emits forward decls for types that could be replaced with forward decls in
|
/// emits forward decls for types that could be replaced with forward decls in
|
||||||
/// the source code. For dynamic C++ classes type info is only emitted into
|
/// the source code. For dynamic C++ classes type info is only emitted into
|
||||||
|
|
|
@ -1483,8 +1483,7 @@ void CodeGenFunction::setBlockContextParameter(const ImplicitParamDecl *D,
|
||||||
Address alloc = CreateMemTemp(D->getType(), D->getName() + ".addr");
|
Address alloc = CreateMemTemp(D->getType(), D->getName() + ".addr");
|
||||||
Builder.CreateStore(arg, alloc);
|
Builder.CreateStore(arg, alloc);
|
||||||
if (CGDebugInfo *DI = getDebugInfo()) {
|
if (CGDebugInfo *DI = getDebugInfo()) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() >=
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
codegenoptions::LimitedDebugInfo) {
|
|
||||||
DI->setLocation(D->getLocation());
|
DI->setLocation(D->getLocation());
|
||||||
DI->EmitDeclareOfBlockLiteralArgVariable(
|
DI->EmitDeclareOfBlockLiteralArgVariable(
|
||||||
*BlockInfo, D->getName(), argNum,
|
*BlockInfo, D->getName(), argNum,
|
||||||
|
@ -1656,8 +1655,7 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD,
|
||||||
const VarDecl *variable = CI.getVariable();
|
const VarDecl *variable = CI.getVariable();
|
||||||
DI->EmitLocation(Builder, variable->getLocation());
|
DI->EmitLocation(Builder, variable->getLocation());
|
||||||
|
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() >=
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
codegenoptions::LimitedDebugInfo) {
|
|
||||||
const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable);
|
const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable);
|
||||||
if (capture.isConstant()) {
|
if (capture.isConstant()) {
|
||||||
auto addr = LocalDeclMap.find(variable)->second;
|
auto addr = LocalDeclMap.find(variable)->second;
|
||||||
|
|
|
@ -591,6 +591,7 @@ void CGDebugInfo::CreateCompileUnit() {
|
||||||
case codegenoptions::DebugDirectivesOnly:
|
case codegenoptions::DebugDirectivesOnly:
|
||||||
EmissionKind = llvm::DICompileUnit::DebugDirectivesOnly;
|
EmissionKind = llvm::DICompileUnit::DebugDirectivesOnly;
|
||||||
break;
|
break;
|
||||||
|
case codegenoptions::DebugInfoConstructor:
|
||||||
case codegenoptions::LimitedDebugInfo:
|
case codegenoptions::LimitedDebugInfo:
|
||||||
case codegenoptions::FullDebugInfo:
|
case codegenoptions::FullDebugInfo:
|
||||||
EmissionKind = llvm::DICompileUnit::FullDebug;
|
EmissionKind = llvm::DICompileUnit::FullDebug;
|
||||||
|
@ -2043,7 +2044,7 @@ void CGDebugInfo::CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile *Unit,
|
||||||
|
|
||||||
llvm::DIType *CGDebugInfo::getOrCreateRecordType(QualType RTy,
|
llvm::DIType *CGDebugInfo::getOrCreateRecordType(QualType RTy,
|
||||||
SourceLocation Loc) {
|
SourceLocation Loc) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
llvm::DIType *T = getOrCreateType(RTy, getOrCreateFile(Loc));
|
llvm::DIType *T = getOrCreateType(RTy, getOrCreateFile(Loc));
|
||||||
return T;
|
return T;
|
||||||
}
|
}
|
||||||
|
@ -2055,7 +2056,7 @@ llvm::DIType *CGDebugInfo::getOrCreateInterfaceType(QualType D,
|
||||||
|
|
||||||
llvm::DIType *CGDebugInfo::getOrCreateStandaloneType(QualType D,
|
llvm::DIType *CGDebugInfo::getOrCreateStandaloneType(QualType D,
|
||||||
SourceLocation Loc) {
|
SourceLocation Loc) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
assert(!D.isNull() && "null type");
|
assert(!D.isNull() && "null type");
|
||||||
llvm::DIType *T = getOrCreateType(D, getOrCreateFile(Loc));
|
llvm::DIType *T = getOrCreateType(D, getOrCreateFile(Loc));
|
||||||
assert(T && "could not create debug info for type");
|
assert(T && "could not create debug info for type");
|
||||||
|
@ -3270,7 +3271,7 @@ void CGDebugInfo::collectFunctionDeclProps(GlobalDecl GD, llvm::DIFile *Unit,
|
||||||
DebugKind <= codegenoptions::DebugLineTablesOnly))
|
DebugKind <= codegenoptions::DebugLineTablesOnly))
|
||||||
LinkageName = StringRef();
|
LinkageName = StringRef();
|
||||||
|
|
||||||
if (DebugKind >= codegenoptions::LimitedDebugInfo) {
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
if (const NamespaceDecl *NSDecl =
|
if (const NamespaceDecl *NSDecl =
|
||||||
dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
|
dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext()))
|
||||||
FDContext = getOrCreateNamespace(NSDecl);
|
FDContext = getOrCreateNamespace(NSDecl);
|
||||||
|
@ -3957,7 +3958,7 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD,
|
||||||
llvm::Optional<unsigned> ArgNo,
|
llvm::Optional<unsigned> ArgNo,
|
||||||
CGBuilderTy &Builder,
|
CGBuilderTy &Builder,
|
||||||
const bool UsePointerValue) {
|
const bool UsePointerValue) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
||||||
if (VD->hasAttr<NoDebugAttr>())
|
if (VD->hasAttr<NoDebugAttr>())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -4091,12 +4092,12 @@ llvm::DILocalVariable *
|
||||||
CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, llvm::Value *Storage,
|
CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, llvm::Value *Storage,
|
||||||
CGBuilderTy &Builder,
|
CGBuilderTy &Builder,
|
||||||
const bool UsePointerValue) {
|
const bool UsePointerValue) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
return EmitDeclare(VD, Storage, llvm::None, Builder, UsePointerValue);
|
return EmitDeclare(VD, Storage, llvm::None, Builder, UsePointerValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGDebugInfo::EmitLabel(const LabelDecl *D, CGBuilderTy &Builder) {
|
void CGDebugInfo::EmitLabel(const LabelDecl *D, CGBuilderTy &Builder) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
||||||
|
|
||||||
if (D->hasAttr<NoDebugAttr>())
|
if (D->hasAttr<NoDebugAttr>())
|
||||||
|
@ -4132,7 +4133,7 @@ llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy,
|
||||||
void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
|
void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
|
||||||
const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder,
|
const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder,
|
||||||
const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint) {
|
const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
|
||||||
|
|
||||||
if (Builder.GetInsertBlock() == nullptr)
|
if (Builder.GetInsertBlock() == nullptr)
|
||||||
|
@ -4203,7 +4204,7 @@ void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
|
||||||
void CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
|
void CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
|
||||||
unsigned ArgNo,
|
unsigned ArgNo,
|
||||||
CGBuilderTy &Builder) {
|
CGBuilderTy &Builder) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
EmitDeclare(VD, AI, ArgNo, Builder);
|
EmitDeclare(VD, AI, ArgNo, Builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4260,7 +4261,7 @@ void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
|
||||||
unsigned ArgNo,
|
unsigned ArgNo,
|
||||||
llvm::AllocaInst *Alloca,
|
llvm::AllocaInst *Alloca,
|
||||||
CGBuilderTy &Builder) {
|
CGBuilderTy &Builder) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
ASTContext &C = CGM.getContext();
|
ASTContext &C = CGM.getContext();
|
||||||
const BlockDecl *blockDecl = block.getBlockDecl();
|
const BlockDecl *blockDecl = block.getBlockDecl();
|
||||||
|
|
||||||
|
@ -4426,7 +4427,7 @@ llvm::DIGlobalVariableExpression *CGDebugInfo::CollectAnonRecordDecls(
|
||||||
|
|
||||||
void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
|
void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
|
||||||
const VarDecl *D) {
|
const VarDecl *D) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
if (D->hasAttr<NoDebugAttr>())
|
if (D->hasAttr<NoDebugAttr>())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -4495,7 +4496,7 @@ void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) {
|
void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
if (VD->hasAttr<NoDebugAttr>())
|
if (VD->hasAttr<NoDebugAttr>())
|
||||||
return;
|
return;
|
||||||
llvm::TimeTraceScope TimeScope("DebugConstGlobalVariable", [&]() {
|
llvm::TimeTraceScope TimeScope("DebugConstGlobalVariable", [&]() {
|
||||||
|
@ -4594,7 +4595,7 @@ void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, const APValue &Init) {
|
||||||
|
|
||||||
void CGDebugInfo::EmitExternalVariable(llvm::GlobalVariable *Var,
|
void CGDebugInfo::EmitExternalVariable(llvm::GlobalVariable *Var,
|
||||||
const VarDecl *D) {
|
const VarDecl *D) {
|
||||||
assert(DebugKind >= codegenoptions::LimitedDebugInfo);
|
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
|
||||||
if (D->hasAttr<NoDebugAttr>())
|
if (D->hasAttr<NoDebugAttr>())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -4619,7 +4620,7 @@ llvm::DIScope *CGDebugInfo::getCurrentContextDescriptor(const Decl *D) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
|
void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
|
if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
|
||||||
return;
|
return;
|
||||||
const NamespaceDecl *NSDecl = UD.getNominatedNamespace();
|
const NamespaceDecl *NSDecl = UD.getNominatedNamespace();
|
||||||
if (!NSDecl->isAnonymousNamespace() ||
|
if (!NSDecl->isAnonymousNamespace() ||
|
||||||
|
@ -4632,7 +4633,7 @@ void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGDebugInfo::EmitUsingDecl(const UsingDecl &UD) {
|
void CGDebugInfo::EmitUsingDecl(const UsingDecl &UD) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
|
if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
|
||||||
return;
|
return;
|
||||||
assert(UD.shadow_size() &&
|
assert(UD.shadow_size() &&
|
||||||
"We shouldn't be codegening an invalid UsingDecl containing no decls");
|
"We shouldn't be codegening an invalid UsingDecl containing no decls");
|
||||||
|
@ -4673,7 +4674,7 @@ void CGDebugInfo::EmitImportDecl(const ImportDecl &ID) {
|
||||||
|
|
||||||
llvm::DIImportedEntity *
|
llvm::DIImportedEntity *
|
||||||
CGDebugInfo::EmitNamespaceAlias(const NamespaceAliasDecl &NA) {
|
CGDebugInfo::EmitNamespaceAlias(const NamespaceAliasDecl &NA) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
|
if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
auto &VH = NamespaceAliasCache[&NA];
|
auto &VH = NamespaceAliasCache[&NA];
|
||||||
if (VH)
|
if (VH)
|
||||||
|
@ -4795,7 +4796,7 @@ void CGDebugInfo::finalize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGDebugInfo::EmitExplicitCastType(QualType Ty) {
|
void CGDebugInfo::EmitExplicitCastType(QualType Ty) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() < codegenoptions::LimitedDebugInfo)
|
if (!CGM.getCodeGenOpts().hasReducedDebugInfo())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (auto *DieTy = getOrCreateType(Ty, TheCU->getFile()))
|
if (auto *DieTy = getOrCreateType(Ty, TheCU->getFile()))
|
||||||
|
|
|
@ -446,8 +446,7 @@ void CodeGenFunction::EmitStaticVarDecl(const VarDecl &D,
|
||||||
|
|
||||||
// Emit global variable debug descriptor for static vars.
|
// Emit global variable debug descriptor for static vars.
|
||||||
CGDebugInfo *DI = getDebugInfo();
|
CGDebugInfo *DI = getDebugInfo();
|
||||||
if (DI &&
|
if (DI && CGM.getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
CGM.getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo) {
|
|
||||||
DI->setLocation(D.getLocation());
|
DI->setLocation(D.getLocation());
|
||||||
DI->EmitGlobalVariable(var, &D);
|
DI->EmitGlobalVariable(var, &D);
|
||||||
}
|
}
|
||||||
|
@ -1394,8 +1393,7 @@ CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) {
|
||||||
EmitVariablyModifiedType(Ty);
|
EmitVariablyModifiedType(Ty);
|
||||||
|
|
||||||
auto *DI = getDebugInfo();
|
auto *DI = getDebugInfo();
|
||||||
bool EmitDebugInfo = DI && CGM.getCodeGenOpts().getDebugInfo() >=
|
bool EmitDebugInfo = DI && CGM.getCodeGenOpts().hasReducedDebugInfo();
|
||||||
codegenoptions::LimitedDebugInfo;
|
|
||||||
|
|
||||||
Address address = Address::invalid();
|
Address address = Address::invalid();
|
||||||
Address AllocaAddr = Address::invalid();
|
Address AllocaAddr = Address::invalid();
|
||||||
|
@ -2496,9 +2494,7 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, ParamValue Arg,
|
||||||
|
|
||||||
// Emit debug info for param declarations in non-thunk functions.
|
// Emit debug info for param declarations in non-thunk functions.
|
||||||
if (CGDebugInfo *DI = getDebugInfo()) {
|
if (CGDebugInfo *DI = getDebugInfo()) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() >=
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo() && !CurFuncIsThunk) {
|
||||||
codegenoptions::LimitedDebugInfo &&
|
|
||||||
!CurFuncIsThunk) {
|
|
||||||
DI->EmitDeclareOfArgVariable(&D, DeclPtr.getPointer(), ArgNo, Builder);
|
DI->EmitDeclareOfArgVariable(&D, DeclPtr.getPointer(), ArgNo, Builder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -562,8 +562,7 @@ void CodeGenFunction::EmitLabel(const LabelDecl *D) {
|
||||||
|
|
||||||
// Emit debug info for labels.
|
// Emit debug info for labels.
|
||||||
if (CGDebugInfo *DI = getDebugInfo()) {
|
if (CGDebugInfo *DI = getDebugInfo()) {
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() >=
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
codegenoptions::LimitedDebugInfo) {
|
|
||||||
DI->setLocation(D->getLocation());
|
DI->setLocation(D->getLocation());
|
||||||
DI->EmitLabel(D, Builder);
|
DI->EmitLabel(D, Builder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -567,8 +567,7 @@ CodeGenFunction::GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S) {
|
||||||
const CapturedDecl *CD = S.getCapturedDecl();
|
const CapturedDecl *CD = S.getCapturedDecl();
|
||||||
// Build the argument list.
|
// Build the argument list.
|
||||||
bool NeedWrapperFunction =
|
bool NeedWrapperFunction =
|
||||||
getDebugInfo() &&
|
getDebugInfo() && CGM.getCodeGenOpts().hasReducedDebugInfo();
|
||||||
CGM.getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo;
|
|
||||||
FunctionArgList Args;
|
FunctionArgList Args;
|
||||||
llvm::MapVector<const Decl *, std::pair<const VarDecl *, Address>> LocalAddrs;
|
llvm::MapVector<const Decl *, std::pair<const VarDecl *, Address>> LocalAddrs;
|
||||||
llvm::DenseMap<const Decl *, std::pair<const Expr *, llvm::Value *>> VLASizes;
|
llvm::DenseMap<const Decl *, std::pair<const Expr *, llvm::Value *>> VLASizes;
|
||||||
|
|
|
@ -2110,7 +2110,7 @@ void CodeGenFunction::EmitDeclRefExprDbgValue(const DeclRefExpr *E,
|
||||||
const APValue &Init) {
|
const APValue &Init) {
|
||||||
assert(Init.hasValue() && "Invalid DeclRefExpr initializer!");
|
assert(Init.hasValue() && "Invalid DeclRefExpr initializer!");
|
||||||
if (CGDebugInfo *Dbg = getDebugInfo())
|
if (CGDebugInfo *Dbg = getDebugInfo())
|
||||||
if (CGM.getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo)
|
if (CGM.getCodeGenOpts().hasReducedDebugInfo())
|
||||||
Dbg->EmitGlobalVariable(E->getDecl(), Init);
|
Dbg->EmitGlobalVariable(E->getDecl(), Init);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4118,13 +4118,13 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D,
|
||||||
|
|
||||||
// Emit global variable debug information.
|
// Emit global variable debug information.
|
||||||
if (CGDebugInfo *DI = getModuleDebugInfo())
|
if (CGDebugInfo *DI = getModuleDebugInfo())
|
||||||
if (getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo)
|
if (getCodeGenOpts().hasReducedDebugInfo())
|
||||||
DI->EmitGlobalVariable(GV, D);
|
DI->EmitGlobalVariable(GV, D);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeGenModule::EmitExternalVarDeclaration(const VarDecl *D) {
|
void CodeGenModule::EmitExternalVarDeclaration(const VarDecl *D) {
|
||||||
if (CGDebugInfo *DI = getModuleDebugInfo())
|
if (CGDebugInfo *DI = getModuleDebugInfo())
|
||||||
if (getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo) {
|
if (getCodeGenOpts().hasReducedDebugInfo()) {
|
||||||
QualType ASTTy = D->getType();
|
QualType ASTTy = D->getType();
|
||||||
llvm::Type *Ty = getTypes().ConvertTypeForMem(D->getType());
|
llvm::Type *Ty = getTypes().ConvertTypeForMem(D->getType());
|
||||||
llvm::PointerType *PTy =
|
llvm::PointerType *PTy =
|
||||||
|
@ -5371,7 +5371,7 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
|
||||||
ObjCRuntime->GenerateClass(OMD);
|
ObjCRuntime->GenerateClass(OMD);
|
||||||
// Emit global variable debug information.
|
// Emit global variable debug information.
|
||||||
if (CGDebugInfo *DI = getModuleDebugInfo())
|
if (CGDebugInfo *DI = getModuleDebugInfo())
|
||||||
if (getCodeGenOpts().getDebugInfo() >= codegenoptions::LimitedDebugInfo)
|
if (getCodeGenOpts().hasReducedDebugInfo())
|
||||||
DI->getOrCreateInterfaceType(getContext().getObjCInterfaceType(
|
DI->getOrCreateInterfaceType(getContext().getObjCInterfaceType(
|
||||||
OMD->getClassInterface()), OMD->getLocation());
|
OMD->getClassInterface()), OMD->getLocation());
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -999,6 +999,9 @@ static void RenderDebugEnablingArgs(const ArgList &Args, ArgStringList &CmdArgs,
|
||||||
case codegenoptions::DebugLineTablesOnly:
|
case codegenoptions::DebugLineTablesOnly:
|
||||||
CmdArgs.push_back("-debug-info-kind=line-tables-only");
|
CmdArgs.push_back("-debug-info-kind=line-tables-only");
|
||||||
break;
|
break;
|
||||||
|
case codegenoptions::DebugInfoConstructor:
|
||||||
|
CmdArgs.push_back("-debug-info-kind=constructor");
|
||||||
|
break;
|
||||||
case codegenoptions::LimitedDebugInfo:
|
case codegenoptions::LimitedDebugInfo:
|
||||||
CmdArgs.push_back("-debug-info-kind=limited");
|
CmdArgs.push_back("-debug-info-kind=limited");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -731,6 +731,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
llvm::StringSwitch<unsigned>(A->getValue())
|
llvm::StringSwitch<unsigned>(A->getValue())
|
||||||
.Case("line-tables-only", codegenoptions::DebugLineTablesOnly)
|
.Case("line-tables-only", codegenoptions::DebugLineTablesOnly)
|
||||||
.Case("line-directives-only", codegenoptions::DebugDirectivesOnly)
|
.Case("line-directives-only", codegenoptions::DebugDirectivesOnly)
|
||||||
|
.Case("constructor", codegenoptions::DebugInfoConstructor)
|
||||||
.Case("limited", codegenoptions::LimitedDebugInfo)
|
.Case("limited", codegenoptions::LimitedDebugInfo)
|
||||||
.Case("standalone", codegenoptions::FullDebugInfo)
|
.Case("standalone", codegenoptions::FullDebugInfo)
|
||||||
.Default(~0U);
|
.Default(~0U);
|
||||||
|
@ -787,8 +788,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
llvm::Triple::arm, llvm::Triple::armeb};
|
llvm::Triple::arm, llvm::Triple::armeb};
|
||||||
|
|
||||||
llvm::Triple T(TargetOpts.Triple);
|
llvm::Triple T(TargetOpts.Triple);
|
||||||
if (Opts.OptimizationLevel > 0 &&
|
if (Opts.OptimizationLevel > 0 && Opts.hasReducedDebugInfo() &&
|
||||||
Opts.getDebugInfo() >= codegenoptions::LimitedDebugInfo &&
|
|
||||||
llvm::is_contained(DebugEntryValueArchs, T.getArch()))
|
llvm::is_contained(DebugEntryValueArchs, T.getArch()))
|
||||||
Opts.EnableDebugEntryValues = Args.hasArg(OPT_femit_debug_entry_values);
|
Opts.EnableDebugEntryValues = Args.hasArg(OPT_femit_debug_entry_values);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue