================
@@ -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

Reply via email to