[clang] [Clang] Initialize bypassed variables w/ trivial-auto-var-init (PR #181937)
Justin Stitt via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 6 13:54:18 PDT 2026
================
@@ -1833,6 +1864,33 @@ bool CodeGenFunction::isTrivialInitializer(const Expr *Init) {
return false;
}
+LangOptions::TrivialAutoVarInitKind
+CodeGenFunction::getAutoVarInitKind(QualType type, const VarDecl &D) {
+ auto hasNoTrivialAutoVarInitAttr = [](const Decl *D) {
+ return D && D->hasAttr<NoTrivialAutoVarInitAttr>();
+ };
+ if (D.isConstexpr() || D.getAttr<UninitializedAttr>() ||
+ hasNoTrivialAutoVarInitAttr(type->getAsTagDecl()) ||
+ hasNoTrivialAutoVarInitAttr(CurFuncDecl))
+ return LangOptions::TrivialAutoVarInitKind::Uninitialized;
+ return getContext().getLangOpts().getTrivialAutoVarInit();
+}
+
+void CodeGenFunction::emitBypassedVarInitsForSource(const Stmt *Source) {
+ const auto *Vars = Bypasses.getBypassedVarsForSource(Source);
+ if (!Vars)
+ return;
+ for (const VarDecl *VD : *Vars) {
+ for (const auto &[D, Addr] : BypassedVarInits) {
----------------
JustinStitt wrote:
Ah I meant to go back and fix this. The brute force was what I implemented to begin with but I think we really want `DenseMap` lookup here.
https://github.com/llvm/llvm-project/pull/181937
More information about the cfe-commits
mailing list