================
@@ -759,19 +759,33 @@ class CXXRecordDecl : public RecordDecl {
needsImplicitDefaultConstructor();
}
+ // Used by HLSL to determine if implicit constructors and operators should
+ // be allowed for structs. This is required for HLSL's resource classes.
+ /// Determines whether this class has any user provided special members.
+ bool hasUserProvidedSpecialMembers() const {
+ return data().UserDeclaredSpecialMembers &
+ (SMF_MoveConstructor | SMF_MoveAssignment | SMF_Destructor |
+ SMF_CopyAssignment | SMF_CopyConstructor) ||
+ data().UserDeclaredConstructor ||
+ data().UserProvidedDefaultConstructor;
+ }
+
/// Determine if we need to declare a default constructor for
/// this class.
///
/// This value is used for lazy creation of default constructors.
bool needsImplicitDefaultConstructor() const {
- return (!data().UserDeclaredConstructor &&
- !(data().DeclaredSpecialMembers & SMF_DefaultConstructor) &&
- (!isLambda() || lambdaIsDefaultConstructibleAndAssignable())) ||
- // FIXME: Proposed fix to core wording issue: if a class inherits
- // a default constructor and doesn't explicitly declare one, one
- // is declared implicitly.
- (data().HasInheritedDefaultConstructor &&
- !(data().DeclaredSpecialMembers & SMF_DefaultConstructor));
+ return ((!data().UserDeclaredConstructor &&
+ !(data().DeclaredSpecialMembers & SMF_DefaultConstructor) &&
+ (!isLambda() || lambdaIsDefaultConstructibleAndAssignable())) ||
+ // FIXME: Proposed fix to core wording issue: if a class inherits
+ // a default constructor and doesn't explicitly declare one, one
+ // is declared implicitly.
+ (data().HasInheritedDefaultConstructor &&
+ !(data().DeclaredSpecialMembers & SMF_DefaultConstructor))) &&
+ (!getLangOpts().HLSL ||
+ (isLambda() && lambdaIsDefaultConstructibleAndAssignable()) ||
----------------
spall wrote:
No, even if that clause is true if we only check if its not HLSL we won't get
what we want. If its HLSL we still want to return true if lambdaIsDefault....
is true.
https://github.com/llvm/llvm-project/pull/190089
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits