@@ -551,6 +551,24 @@ ACCEPTS_ANY_OWNERSHIP_INST(ValueMetatype)
551
551
ACCEPTS_ANY_OWNERSHIP_INST(UncheckedOwnershipConversion)
552
552
#undef ACCEPTS_ANY_OWNERSHIP_INST
553
553
554
+ // Trivial if trivial typed, otherwise must accept owned?
555
+ #define ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP_OR_METATYPE ( \
556
+ SHOULD_CHECK_FOR_DATAFLOW_VIOLATIONS, INST) \
557
+ OwnershipUseCheckerResult \
558
+ OwnershipCompatibilityUseChecker::visit##INST##Inst(INST##Inst *I) { \
559
+ assert (I->getNumOperands () && " Expected to have non-zero operands" ); \
560
+ if (getType ().is <AnyMetatypeType>()) { \
561
+ return {true , false }; \
562
+ } \
563
+ assert (!isAddressOrTrivialType () && \
564
+ " Shouldn't have an address or a non trivial type" ); \
565
+ bool compatible = getOwnershipKind () == ValueOwnershipKind::Any || \
566
+ !compatibleWithOwnership (ValueOwnershipKind::Trivial); \
567
+ return {compatible, SHOULD_CHECK_FOR_DATAFLOW_VIOLATIONS}; \
568
+ }
569
+ ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP_OR_METATYPE (false , ClassMethod)
570
+ #undef ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP_OR_METATYPE
571
+
554
572
// Trivial if trivial typed, otherwise must accept owned?
555
573
#define ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP (SHOULD_CHECK_FOR_DATAFLOW_VIOLATIONS, \
556
574
INST) \
@@ -565,7 +583,6 @@ ACCEPTS_ANY_OWNERSHIP_INST(UncheckedOwnershipConversion)
565
583
}
566
584
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP (false , SuperMethod)
567
585
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(false , BridgeObjectToWord)
568
- ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(false , ClassMethod)
569
586
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(false , CopyBlock)
570
587
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(false , DynamicMethod)
571
588
ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(false , OpenExistentialBox)
0 commit comments