[clang] 66483df - [clang][AST][NFC] Add default value to `Expr::isConstantInitializer()` parameter (#190313)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Apr 4 21:54:12 PDT 2026
Author: Timm Baeder
Date: 2026-04-05T06:54:06+02:00
New Revision: 66483dfe34529f990fdf68d8ae7355e3e1cc5e67
URL: https://github.com/llvm/llvm-project/commit/66483dfe34529f990fdf68d8ae7355e3e1cc5e67
DIFF: https://github.com/llvm/llvm-project/commit/66483dfe34529f990fdf68d8ae7355e3e1cc5e67.diff
LOG: [clang][AST][NFC] Add default value to `Expr::isConstantInitializer()` parameter (#190313)
Almost every caller passes `false` for `ForRef`, or rather, doesn't care
what the value is. Use a default value instead.
Added:
Modified:
clang/include/clang/AST/Expr.h
clang/lib/CIR/CodeGen/CIRGenDecl.cpp
clang/lib/CodeGen/CGDecl.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaExprObjC.cpp
clang/lib/Sema/SemaInit.cpp
clang/lib/Sema/SemaModule.cpp
clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index 37a1af584716a..a0ab599fa82d2 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -595,11 +595,11 @@ class Expr : public ValueStmt {
SmallVectorImpl<
PartialDiagnosticAt> &Diags);
- /// isConstantInitializer - Returns true if this expression can be emitted to
+ /// Returns true if this expression can be emitted to
/// IR as a constant, and thus can be used as a constant initializer in C.
/// If this expression is not constant and Culprit is non-null,
/// it is used to store the address of first non constant expr.
- bool isConstantInitializer(ASTContext &Ctx, bool ForRef,
+ bool isConstantInitializer(ASTContext &Ctx, bool ForRef = false,
const Expr **Culprit = nullptr) const;
/// If this expression is an unambiguous reference to a single declaration,
diff --git a/clang/lib/CIR/CodeGen/CIRGenDecl.cpp b/clang/lib/CIR/CodeGen/CIRGenDecl.cpp
index 26a1a17243130..c3c0ec1c1af0d 100644
--- a/clang/lib/CIR/CodeGen/CIRGenDecl.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenDecl.cpp
@@ -66,7 +66,7 @@ CIRGenFunction::emitAutoVarAlloca(const VarDecl &d,
(d.isConstexpr() ||
((ty.isPODType(getContext()) ||
getContext().getBaseElementType(ty)->isObjCObjectPointerType()) &&
- d.getInit()->isConstantInitializer(getContext(), false)))) {
+ d.getInit()->isConstantInitializer(getContext())))) {
// If the variable's a const type, and it's neither an NRVO
// candidate nor a __block variable and has no mutable members,
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 3f32fecc50998..748362105cb02 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -1528,7 +1528,7 @@ CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) {
(D.isConstexpr() ||
((Ty.isPODType(getContext()) ||
getContext().getBaseElementType(Ty)->isObjCObjectPointerType()) &&
- D.getInit()->isConstantInitializer(getContext(), false)))) {
+ D.getInit()->isConstantInitializer(getContext())))) {
// If the variable's a const type, and it's neither an NRVO
// candidate nor a __block variable and has no mutable members,
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 94a52f51118a7..68a403e02968d 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -8315,8 +8315,7 @@ void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {
auto *VD = cast<VarDecl>(cast<DeclRefExpr>(RefExpr)->getDecl());
bool PerformInit =
VD->getAnyInitializer() &&
- !VD->getAnyInitializer()->isConstantInitializer(getContext(),
- /*ForRef=*/false);
+ !VD->getAnyInitializer()->isConstantInitializer(getContext());
Address Addr(GetAddrOfGlobalVar(VD),
getTypes().ConvertTypeForMem(VD->getType()),
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index a479ff68c35c5..fe89460314b26 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -12890,7 +12890,7 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
return true;
}
const Expr *Culprit;
- if (Init->isConstantInitializer(Context, false, &Culprit))
+ if (Init->isConstantInitializer(Context, /*ForRef=*/false, &Culprit))
return false;
// Emit ObjC-specific diagnostics for non-constant literals at file scope.
@@ -12900,7 +12900,7 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
// the offender.
if (auto ALE = dyn_cast<ObjCArrayLiteral>(Init)) {
for (auto *Elm : ALE->elements()) {
- if (!Elm->isConstantInitializer(Context, false, nullptr)) {
+ if (!Elm->isConstantInitializer(Context)) {
Diag(Elm->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm->getSourceRange();
@@ -12915,14 +12915,14 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
// Check that the key is a string literal and is constant.
if (!isa<ObjCStringLiteral>(Elm.Key) ||
- !Elm.Key->isConstantInitializer(Context, false, nullptr)) {
+ !Elm.Key->isConstantInitializer(Context)) {
Diag(Elm.Key->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm.Key->getSourceRange();
return true;
}
- if (!Elm.Value->isConstantInitializer(Context, false, nullptr)) {
+ if (!Elm.Value->isConstantInitializer(Context)) {
Diag(Elm.Value->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm.Value->getSourceRange();
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index c9642ed298bf3..9fd8c6a0a5451 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -7475,7 +7475,7 @@ Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo,
for (unsigned i = 0, j = ILE->getNumInits(); i != j; i++) {
Expr *Init = ILE->getInit(i);
if (!Init->isTypeDependent() && !Init->isValueDependent() &&
- !Init->isConstantInitializer(Context, /*IsForRef=*/false)) {
+ !Init->isConstantInitializer(Context)) {
Diag(Init->getExprLoc(), diag::err_init_element_not_constant)
<< Init->getSourceBitField();
return ExprError();
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 50766449401ea..36be822c817d2 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -982,7 +982,7 @@ ExprResult SemaObjC::BuildObjCArrayLiteral(SourceRange SR,
// to be in constant collections since they *could* be modified / reassigned
if (ExpressibleAsConstantInitLiteral &&
(!isa<ObjCObjectLiteral>(ElementsBuffer[I]->IgnoreImpCasts()) ||
- !ElementsBuffer[I]->isConstantInitializer(Context, false)))
+ !ElementsBuffer[I]->isConstantInitializer(Context)))
ExpressibleAsConstantInitLiteral = false;
}
@@ -1226,7 +1226,7 @@ ExprResult SemaObjC::BuildObjCDictionaryLiteral(
Element.Value = Value.get();
if (ExpressibleAsConstantInitLiteral &&
- !Element.Key->isConstantInitializer(Context, false))
+ !Element.Key->isConstantInitializer(Context))
ExpressibleAsConstantInitLiteral = false;
// Only support string keys like plists
@@ -1238,7 +1238,7 @@ ExprResult SemaObjC::BuildObjCDictionaryLiteral(
// to be in constant collections since they *could* be modified / reassigned
if (ExpressibleAsConstantInitLiteral &&
(!isa<ObjCObjectLiteral>(Element.Value->IgnoreImpCasts()) ||
- !Element.Value->isConstantInitializer(Context, false)))
+ !Element.Value->isConstantInitializer(Context)))
ExpressibleAsConstantInitLiteral = false;
if (Element.EllipsisLoc.isInvalid())
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index a5b7004515da3..e54a25405c816 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -8784,7 +8784,7 @@ ExprResult InitializationSequence::Perform(Sema &S,
// Check initializer is 32 bit integer constant.
// If the initializer is taken from global variable, do not diagnose since
// this has already been done when parsing the variable declaration.
- if (!Init->isConstantInitializer(S.Context, false))
+ if (!Init->isConstantInitializer(S.Context))
break;
if (!SourceType->isIntegerType() ||
diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp
index ab6419a5abef9..7618c795d9d4c 100644
--- a/clang/lib/Sema/SemaModule.cpp
+++ b/clang/lib/Sema/SemaModule.cpp
@@ -1474,7 +1474,7 @@ class ReferenceTULocalChecker : public DynamicRecursiveASTVisitor {
if (DRE->isNonOdrUse() && (L == Linkage::Internal || L == Linkage::None))
if (auto *VD = dyn_cast<VarDecl>(Referenced);
VD && VD->getInit() && !VD->getInit()->isValueDependent() &&
- VD->getInit()->isConstantInitializer(Context, /*IsForRef=*/false))
+ VD->getInit()->isConstantInitializer(Context))
return true;
Callback(DRE, Referenced);
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index cc24e03e77c07..61878cba32235 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -6249,8 +6249,7 @@ void Sema::InstantiateVariableInitializer(
Expr *InitExpr = Init.get();
if (Var->hasAttr<DLLImportAttr>() &&
- (!InitExpr ||
- !InitExpr->isConstantInitializer(getASTContext(), false))) {
+ (!InitExpr || !InitExpr->isConstantInitializer(getASTContext()))) {
// Do not dynamically initialize dllimport variables.
} else if (InitExpr) {
bool DirectInit = OldVar->isDirectInit();
More information about the cfe-commits
mailing list