[clang] [HLSL] Disable implicit constructors for user-defined structs/classes (PR #194989)

Helena Kotas via cfe-commits cfe-commits at lists.llvm.org
Thu May 7 11:08:32 PDT 2026


================
@@ -984,9 +1016,13 @@ class CXXRecordDecl : public RecordDecl {
     return !(data().DeclaredSpecialMembers & SMF_MoveAssignment) &&
            !hasUserDeclaredCopyConstructor() &&
            !hasUserDeclaredCopyAssignment() &&
-           !hasUserDeclaredMoveConstructor() &&
-           !hasUserDeclaredDestructor() &&
-           (!isLambda() || lambdaIsDefaultConstructibleAndAssignable());
+           !hasUserDeclaredMoveConstructor() && !hasUserDeclaredDestructor() &&
+           (!isLambda() || lambdaIsDefaultConstructibleAndAssignable()) &&
+           // In HLSL, only built-in records like resources classes can have
+           // constructors.
+           (!getLangOpts().HLSL ||
+            (isLambda() && lambdaIsDefaultConstructibleAndAssignable()) ||
----------------
hekota wrote:

I've updated the condition to be clearer.

https://github.com/llvm/llvm-project/pull/194989


More information about the cfe-commits mailing list