[clang] [HLSL] get inout/out ABI for array parameters working (PR #111047)
Chris B via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 7 13:19:39 PDT 2024
================
@@ -2249,6 +2235,25 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
SCS.setAllToTypes(ToType);
return true;
+ } else if (argIsLValue && !FromType->canDecayToPointerType() &&
+ S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
+ // Lvalue-to-rvalue conversion (C++11 4.1):
+ // A glvalue (3.10) of a non-function, non-array type T can
+ // be converted to a prvalue.
+
+ SCS.First = ICK_Lvalue_To_Rvalue;
+
+ // C11 6.3.2.1p2:
+ // ... if the lvalue has atomic type, the value has the non-atomic version
+ // of the type of the lvalue ...
+ if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
+ FromType = Atomic->getValueType();
+
+ // If T is a non-class type, the type of the rvalue is the
+ // cv-unqualified version of T. Otherwise, the type of the rvalue
+ // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
+ // just strip the qualifiers because they don't matter.
+ FromType = FromType.getUnqualifiedType();
----------------
llvm-beanz wrote:
It looks like you moved this block down from above. I assume this is because the ordering of these checks matters, could you add a comment above the HLSL-specific `if` block explaining why?
https://github.com/llvm/llvm-project/pull/111047
More information about the cfe-commits
mailing list