================ @@ -7071,6 +7071,102 @@ class ArraySectionExpr : public Expr { void setRBracketLoc(SourceLocation L) { RBracketLoc = L; } }; +/// This class represents temporary values used to represent inout and out +/// arguments in HLSL. From the callee perspective these parameters are more or +/// less __restrict__ T&. They are guaranteed to not alias any memory. inout +/// parameters are initialized by the caller, and out parameters are references +/// to uninitialized memory. +/// +/// In the caller, the argument expression creates a temporary in local memory +/// and the address of the temporary is passed into the callee. There may be +/// implicit conversion sequences to initialize the temporary, and on expiration +/// of the temporary an inverse conversion sequence is applied as a write-back +/// conversion to the source l-value. +/// +/// This AST node has three sub-expressions: +/// - An OpaqueValueExpr with a source that is the argument lvalue expression. +/// - An OpaqueValueExpr with a source that is a an implicit conversion +/// sequence from the source lvalue to the argument type. +/// - A BinaryOperatorExpr that assigns the first sub-expression with the +/// value from an implict conversion sequence from the second expression to +/// the argument expression's type. ---------------- rjmccall wrote:
Maybe just "An expression that assigns the second expression into the first, performing any necessary conversions." 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