================
@@ -181,6 +182,16 @@ RValue
CodeGenFunction::EmitAMDGPUDevicePrintfCallExpr(const CallExpr *E) {
Args.push_back(Arg);
}
+ // The expansion reads the format from the initializer of the global it
points
+ // to, which may not be emitted yet for a deferred constant array. Pass a
copy
+ // of the evaluated format instead.
+ StringRef FmtStr;
+ if (!llvm::getConstantStringInfo(Args[0], FmtStr))
+ if (std::optional<std::string> Fmt =
+ E->getArg(0)->tryEvaluateString(getContext()))
----------------
efriedma-quic wrote:
I assume you also need some kind of special handling for %n.
If you want to specifically say "if printf has a pointer argument, the format
string must be a string literal", that could work, I guess. I don't want to
leave a hole here where we miscompile if we fail to fold the format string.
https://github.com/llvm/llvm-project/pull/231967
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits