================ @@ -11427,6 +11427,19 @@ static void AnalyzeImplicitConversions( return; } + if (auto *OutArgE = dyn_cast<HLSLOutArgExpr>(E)) { + // The base expression is only used to initialize the parameter for + // arguments to `inout` parameters, so we only traverse down the base + // expression for `inout` cases. ---------------- rjmccall wrote:
I specifically said the original l-value expression. I'm trying to make sure we get warnings in sub-expressions of the l-value that have nothing to do with the final conversion to produce the argument. With that said: > If SemaChecking traverses down both sides we get warnings for the conversion > that would "initialize" the out parameter, but those warnings aren't accurate > because no initialization occurs. Isn't this an argument that you either (1) shouldn't visit the initialization specifically for `out`, but should still do it for `inout`, or (2) shouldn't generate the initialization expression for `out`? Apropos, I know this is a future direction, but what semantics do you want for C++ class types and `out`? Skipping the initialization entirely is definitely incorrect — the callee will get passed a reference to an uninitialized object and (presumably) start calling methods on it. Probably this should default-initialize? https://github.com/llvm/llvm-project/pull/101083 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits