diff options
author | Amr Hesham <amr96@programmer.net> | 2025-03-31 19:41:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-31 19:41:29 +0200 |
commit | 143c37123b93a3dbd0fafd0296516ac1ab2afc36 (patch) | |
tree | 8a052f61b4f8ff55850937457d81b2d7d5898e99 /clang/lib/CIR/CodeGen/CIRGenModule.cpp | |
parent | 7eb99b85995a49972f7a3d5c68cf3543014a787b (diff) | |
download | llvm-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.cpp | 7 |
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); |