[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.
This commit is contained in:
parent
257cc5ad89
commit
66483dfe34
@ -595,11 +595,11 @@ public:
|
||||
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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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()),
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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() ||
|
||||
|
||||
@ -1474,7 +1474,7 @@ public:
|
||||
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);
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user