aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CIR/CodeGen/CIRGenModule.cpp
diff options
context:
space:
mode:
authorAmr Hesham <amr96@programmer.net>2025-03-31 19:41:29 +0200
committerGitHub <noreply@github.com>2025-03-31 19:41:29 +0200
commit143c37123b93a3dbd0fafd0296516ac1ab2afc36 (patch)
tree8a052f61b4f8ff55850937457d81b2d7d5898e99 /clang/lib/CIR/CodeGen/CIRGenModule.cpp
parent7eb99b85995a49972f7a3d5c68cf3543014a787b (diff)
downloadllvm-143c37123b93a3dbd0fafd0296516ac1ab2afc36.zip
llvm-143c37123b93a3dbd0fafd0296516ac1ab2afc36.tar.gz
llvm-143c37123b93a3dbd0fafd0296516ac1ab2afc36.tar.bz2
[CIR] Upstream zero init for global variables (#133100)
This change adds zero initialization for global variables
Diffstat (limited to 'clang/lib/CIR/CodeGen/CIRGenModule.cpp')
-rw-r--r--clang/lib/CIR/CodeGen/CIRGenModule.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
index 9776a4e..2a37d6c 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
@@ -140,17 +140,20 @@ void CIRGenModule::emitGlobalVarDefinition(const clang::VarDecl *vd,
// certain constant expressions is implemented for now.
const VarDecl *initDecl;
const Expr *initExpr = vd->getAnyInitializer(initDecl);
+ mlir::Attribute initializer;
if (initExpr) {
- mlir::Attribute initializer;
if (APValue *value = initDecl->evaluateValue()) {
ConstantEmitter emitter(*this);
initializer = emitter.tryEmitPrivateForMemory(*value, astTy);
} else {
errorNYI(initExpr->getSourceRange(), "non-constant initializer");
}
- varOp.setInitialValueAttr(initializer);
+ } else {
+ initializer = builder.getZeroInitAttr(convertType(astTy));
}
+ varOp.setInitialValueAttr(initializer);
+
// Set CIR's linkage type as appropriate.
cir::GlobalLinkageKind linkage =
getCIRLinkageVarDefinition(vd, /*IsConstant=*/false);