Skip to content

Commit c13422d

Browse files
Merge pull request #71479 from nate-chandler/bitwise-copyable/ban-nontrivial-cxx
[BitwiseCopyable] Ban non-trivial C++ types.
2 parents 5e92df0 + e0487b6 commit c13422d

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7619,6 +7619,8 @@ ERROR(non_bitwise_copyable_type_noncopyable,none,
76197619
"noncopyable type cannot conform to 'BitwiseCopyable'", ())
76207620
ERROR(non_bitwise_copyable_type_nonescapable,none,
76217621
"nonescapable type cannot conform to 'BitwiseCopyable'", ())
7622+
ERROR(non_bitwise_copyable_type_cxx_nontrivial,none,
7623+
"non-trivial C++ type cannot conform to 'BitwiseCopyable'", ())
76227624
ERROR(non_bitwise_copyable_type_member,none,
76237625
"%select{stored property %2|associated value %2}1 of "
76247626
"'BitwiseCopyable'-conforming %kind3 has non-bitwise-copyable type %0",

lib/Sema/TypeCheckBitwise.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,14 @@ static bool checkBitwiseCopyableInstanceStorage(NominalTypeDecl *nominal,
262262
return true;
263263
}
264264

265+
auto *sd = dyn_cast<StructDecl>(nominal);
266+
if (sd && sd->isCxxNonTrivial()) {
267+
if (!isImplicit(check)) {
268+
nominal->diagnose(diag::non_bitwise_copyable_type_cxx_nontrivial);
269+
}
270+
return true;
271+
}
272+
265273
BitwiseCopyableStorageVisitor visitor(nominal, dc, check);
266274

267275
return visitor.visit(nominal, dc) || visitor.invalid;

0 commit comments

Comments
 (0)