Skip to content

Commit f7bc210

Browse files
Michael137zeroomega
authored andcommitted
fixup! use getAnyInitializer instead of canonical decl
This is more idiomatic
1 parent 15249ba commit f7bc210

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,27 @@ static uint32_t getDeclAlignIfRequired(const Decl *D, const ASTContext &Ctx) {
6969
return D->hasAttr<AlignedAttr>() ? D->getMaxAlignment() : 0;
7070
}
7171

72-
static APValue const *evaluateConstantInitializer(clang::VarDecl const *VD) {
72+
/// Given a VarDecl corresponding to either the definition or
73+
/// declaration of a C++ static data member, if it has a constant
74+
/// initializer and is evaluatable, return the evaluated value.
75+
/// Returns std::nullopt on failure.
76+
static std::optional<APValue>
77+
evaluateConstantInitializer(const clang::VarDecl *VD,
78+
const clang::ASTContext &Ctx) {
7379
assert(VD != nullptr);
7480

75-
VD = VD->getCanonicalDecl();
76-
if (!VD)
77-
return nullptr;
81+
if (!VD->isStaticDataMember())
82+
return std::nullopt;
7883

79-
if (!VD->hasConstantInitialization() || !VD->hasInit())
80-
return nullptr;
84+
if (!VD->isUsableInConstantExpressions(Ctx))
85+
return std::nullopt;
86+
87+
auto const *InitExpr = VD->getAnyInitializer();
88+
Expr::EvalResult Result;
89+
if (!InitExpr->EvaluateAsConstantExpr(Result, Ctx))
90+
return std::nullopt;
8191

82-
return VD->evaluateValue();
92+
return Result.Val;
8393
}
8494

8595
CGDebugInfo::CGDebugInfo(CodeGenModule &CGM)
@@ -5520,7 +5530,7 @@ void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
55205530

55215531
llvm::DIExpression *E = nullptr;
55225532
if (Expr.empty()) {
5523-
if (auto const *InitVal = evaluateConstantInitializer(D))
5533+
if (const auto InitVal = evaluateConstantInitializer(D, CGM.getContext()))
55245534
E = createConstantValueExpression(D, *InitVal);
55255535
} else {
55265536
E = DBuilder.createExpression(Expr);
@@ -5622,7 +5632,7 @@ void CGDebugInfo::EmitGlobalVariable(const VarDecl *VD) {
56225632
if (CacheIt != DeclCache.end())
56235633
return;
56245634

5625-
auto const *InitVal = evaluateConstantInitializer(VD);
5635+
const auto InitVal = evaluateConstantInitializer(VD, CGM.getContext());
56265636
if (!InitVal)
56275637
return;
56285638

0 commit comments

Comments
 (0)