brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.2 KiB · 25bc8b3 Raw
233 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -fobjc-runtime-has-weak -verify -std=c++11 %s -Wno-deprecated-builtins2// expected-no-diagnostics3 4// Check the results of the various type-trait query functions on5// lifetime-qualified types in ARC.6 7#define JOIN3(X,Y) X ## Y8#define JOIN2(X,Y) JOIN3(X,Y)9#define JOIN(X,Y) JOIN2(X,Y)10 11#define TRAIT_IS_TRUE(Trait, Type) char JOIN2(Trait,__LINE__)[Trait(Type)? 1 : -1]12#define TRAIT_IS_FALSE(Trait, Type) char JOIN2(Trait,__LINE__)[Trait(Type)? -1 : 1]13#define TRAIT_IS_TRUE_2(Trait, Type1, Type2) char JOIN2(Trait,__LINE__)[Trait(Type1, Type2)? 1 : -1]14#define TRAIT_IS_FALSE_2(Trait, Type1, Type2) char JOIN2(Trait,__LINE__)[Trait(Type1, Type2)? -1 : 1]15 16struct HasStrong { id obj; };17struct HasWeak { __weak id obj; };18struct HasUnsafeUnretained { __unsafe_unretained id obj; };19 20// __has_nothrow_assign21TRAIT_IS_TRUE(__has_nothrow_assign, __strong id);22TRAIT_IS_TRUE(__has_nothrow_assign, __weak id);23TRAIT_IS_TRUE(__has_nothrow_assign, __autoreleasing id);24TRAIT_IS_TRUE(__has_nothrow_assign, __unsafe_unretained id);25TRAIT_IS_TRUE(__has_nothrow_assign, HasStrong);26TRAIT_IS_TRUE(__has_nothrow_assign, HasWeak);27TRAIT_IS_TRUE(__has_nothrow_assign, HasUnsafeUnretained);28 29// __has_nothrow_copy30TRAIT_IS_TRUE(__has_nothrow_copy, __strong id);31TRAIT_IS_TRUE(__has_nothrow_copy, __weak id);32TRAIT_IS_TRUE(__has_nothrow_copy, __autoreleasing id);33TRAIT_IS_TRUE(__has_nothrow_copy, __unsafe_unretained id);34TRAIT_IS_TRUE(__has_nothrow_copy, HasStrong);35TRAIT_IS_TRUE(__has_nothrow_copy, HasWeak);36TRAIT_IS_TRUE(__has_nothrow_copy, HasUnsafeUnretained);37 38// __has_nothrow_constructor39TRAIT_IS_TRUE(__has_nothrow_constructor, __strong id);40TRAIT_IS_TRUE(__has_nothrow_constructor, __weak id);41TRAIT_IS_TRUE(__has_nothrow_constructor, __autoreleasing id);42TRAIT_IS_TRUE(__has_nothrow_constructor, __unsafe_unretained id);43TRAIT_IS_TRUE(__has_nothrow_constructor, HasStrong);44TRAIT_IS_TRUE(__has_nothrow_constructor, HasWeak);45TRAIT_IS_TRUE(__has_nothrow_constructor, HasUnsafeUnretained);46 47// __has_trivial_assign48TRAIT_IS_FALSE(__has_trivial_assign, __strong id);49TRAIT_IS_FALSE(__has_trivial_assign, __weak id);50TRAIT_IS_FALSE(__has_trivial_assign, __autoreleasing id);51TRAIT_IS_TRUE(__has_trivial_assign, __unsafe_unretained id);52TRAIT_IS_FALSE(__has_trivial_assign, HasStrong);53TRAIT_IS_FALSE(__has_trivial_assign, HasWeak);54TRAIT_IS_TRUE(__has_trivial_assign, HasUnsafeUnretained);55 56// __has_trivial_copy57TRAIT_IS_FALSE(__has_trivial_copy, __strong id);58TRAIT_IS_FALSE(__has_trivial_copy, __weak id);59TRAIT_IS_FALSE(__has_trivial_copy, __autoreleasing id);60TRAIT_IS_TRUE(__has_trivial_copy, __unsafe_unretained id);61TRAIT_IS_FALSE(__has_trivial_copy, HasStrong);62TRAIT_IS_FALSE(__has_trivial_copy, HasWeak);63TRAIT_IS_TRUE(__has_trivial_copy, HasUnsafeUnretained);64 65// __has_trivial_constructor66TRAIT_IS_FALSE(__has_trivial_constructor, __strong id);67TRAIT_IS_FALSE(__has_trivial_constructor, __weak id);68TRAIT_IS_FALSE(__has_trivial_constructor, __autoreleasing id);69TRAIT_IS_TRUE(__has_trivial_constructor, __unsafe_unretained id);70TRAIT_IS_FALSE(__has_trivial_constructor, HasStrong);71TRAIT_IS_FALSE(__has_trivial_constructor, HasWeak);72TRAIT_IS_TRUE(__has_trivial_constructor, HasUnsafeUnretained);73 74// __has_trivial_destructor75TRAIT_IS_FALSE(__has_trivial_destructor, __strong id);76TRAIT_IS_FALSE(__has_trivial_destructor, __weak id);77TRAIT_IS_TRUE(__has_trivial_destructor, __autoreleasing id);78TRAIT_IS_TRUE(__has_trivial_destructor, __unsafe_unretained id);79TRAIT_IS_FALSE(__has_trivial_destructor, HasStrong);80TRAIT_IS_FALSE(__has_trivial_destructor, HasWeak);81TRAIT_IS_TRUE(__has_trivial_destructor, HasUnsafeUnretained);82 83// __is_literal84TRAIT_IS_TRUE(__is_literal, __strong id);85TRAIT_IS_TRUE(__is_literal, __weak id);86TRAIT_IS_TRUE(__is_literal, __autoreleasing id);87TRAIT_IS_TRUE(__is_literal, __unsafe_unretained id);88 89// __is_literal_type90TRAIT_IS_TRUE(__is_literal_type, __strong id);91TRAIT_IS_TRUE(__is_literal_type, __weak id);92TRAIT_IS_TRUE(__is_literal_type, __autoreleasing id);93TRAIT_IS_TRUE(__is_literal_type, __unsafe_unretained id);94 95// __is_pod96TRAIT_IS_FALSE(__is_pod, __strong id);97TRAIT_IS_FALSE(__is_pod, __weak id);98TRAIT_IS_FALSE(__is_pod, __autoreleasing id);99TRAIT_IS_TRUE(__is_pod, __unsafe_unretained id);100TRAIT_IS_FALSE(__is_pod, HasStrong);101TRAIT_IS_FALSE(__is_pod, HasWeak);102TRAIT_IS_TRUE(__is_pod, HasUnsafeUnretained);103 104// __is_trivial105TRAIT_IS_FALSE(__is_trivial, __strong id);106TRAIT_IS_FALSE(__is_trivial, __weak id);107TRAIT_IS_FALSE(__is_trivial, __autoreleasing id);108TRAIT_IS_TRUE(__is_trivial, __unsafe_unretained id);109TRAIT_IS_FALSE(__is_trivial, HasStrong);110TRAIT_IS_FALSE(__is_trivial, HasWeak);111TRAIT_IS_TRUE(__is_trivial, HasUnsafeUnretained);112 113// __is_scalar114TRAIT_IS_FALSE(__is_scalar, __strong id);115TRAIT_IS_FALSE(__is_scalar, __weak id);116TRAIT_IS_FALSE(__is_scalar, __autoreleasing id);117TRAIT_IS_TRUE(__is_scalar, __unsafe_unretained id);118 119// __is_standard_layout120TRAIT_IS_TRUE(__is_standard_layout, __strong id);121TRAIT_IS_TRUE(__is_standard_layout, __weak id);122TRAIT_IS_TRUE(__is_standard_layout, __autoreleasing id);123TRAIT_IS_TRUE(__is_standard_layout, __unsafe_unretained id);124 125// __is_trivally_assignable126TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __strong id);127TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __weak id);128TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __autoreleasing id);129TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __unsafe_unretained id);130TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __strong id&&);131TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __weak id&&);132TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __autoreleasing id&&);133TRAIT_IS_FALSE_2(__is_trivially_assignable, __strong id&, __unsafe_unretained id&&);134TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __strong id);135TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __weak id);136TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __autoreleasing id);137TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __unsafe_unretained id);138TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __strong id&&);139TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __weak id&&);140TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __autoreleasing id&&);141TRAIT_IS_FALSE_2(__is_trivially_assignable, __weak id&, __unsafe_unretained id&&);142 143TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __strong id);144TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __weak id);145TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __autoreleasing id);146TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __unsafe_unretained id);147TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __strong id&&);148TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __weak id&&);149TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __autoreleasing id&&);150TRAIT_IS_FALSE_2(__is_trivially_assignable, __autoreleasing id&, __unsafe_unretained id&&);151 152TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __strong id);153TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __weak id);154TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __autoreleasing id);155TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __unsafe_unretained id);156TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __strong id&&);157TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __weak id&&);158TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __autoreleasing id&&);159TRAIT_IS_TRUE_2(__is_trivially_assignable, __unsafe_unretained id&, __unsafe_unretained id&&);160 161TRAIT_IS_FALSE_2(__is_trivially_assignable, HasStrong&, HasStrong);162TRAIT_IS_FALSE_2(__is_trivially_assignable, HasStrong&, HasStrong&&);163TRAIT_IS_FALSE_2(__is_trivially_assignable, HasWeak&, HasWeak);164TRAIT_IS_FALSE_2(__is_trivially_assignable, HasWeak&, HasWeak&&);165TRAIT_IS_TRUE_2(__is_trivially_assignable, HasUnsafeUnretained&, HasUnsafeUnretained);166TRAIT_IS_TRUE_2(__is_trivially_assignable, HasUnsafeUnretained&, HasUnsafeUnretained&&);167 168// __is_trivally_constructible169TRAIT_IS_FALSE(__is_trivially_constructible, __strong id);170TRAIT_IS_FALSE(__is_trivially_constructible, __weak id);171TRAIT_IS_FALSE(__is_trivially_constructible, __autoreleasing id);172TRAIT_IS_TRUE(__is_trivially_constructible, __unsafe_unretained id);173 174TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __strong id);175TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __weak id);176TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __autoreleasing id);177TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __unsafe_unretained id);178TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __strong id&&);179TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __weak id&&);180TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __autoreleasing id&&);181TRAIT_IS_FALSE_2(__is_trivially_constructible, __strong id, __unsafe_unretained id&&);182TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __strong id);183TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __weak id);184TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __autoreleasing id);185TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __unsafe_unretained id);186TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __strong id&&);187TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __weak id&&);188TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __autoreleasing id&&);189TRAIT_IS_FALSE_2(__is_trivially_constructible, __weak id, __unsafe_unretained id&&);190 191TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __strong id);192TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __weak id);193TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __autoreleasing id);194TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __unsafe_unretained id);195TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __strong id&&);196TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __weak id&&);197TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __autoreleasing id&&);198TRAIT_IS_FALSE_2(__is_trivially_constructible, __autoreleasing id, __unsafe_unretained id&&);199 200TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __strong id);201TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __weak id);202TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __autoreleasing id);203TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __unsafe_unretained id);204TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __strong id&&);205TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __weak id&&);206TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __autoreleasing id&&);207TRAIT_IS_TRUE_2(__is_trivially_constructible, __unsafe_unretained id, __unsafe_unretained id&&);208 209TRAIT_IS_FALSE_2(__is_trivially_constructible, HasStrong, HasStrong);210TRAIT_IS_FALSE_2(__is_trivially_constructible, HasStrong, HasStrong&&);211TRAIT_IS_FALSE_2(__is_trivially_constructible, HasWeak, HasWeak);212TRAIT_IS_FALSE_2(__is_trivially_constructible, HasWeak, HasWeak&&);213TRAIT_IS_TRUE_2(__is_trivially_constructible, HasUnsafeUnretained, HasUnsafeUnretained);214TRAIT_IS_TRUE_2(__is_trivially_constructible, HasUnsafeUnretained, HasUnsafeUnretained&&);215 216// __is_trivially_relocatable217TRAIT_IS_TRUE(__is_trivially_relocatable, __strong id);218TRAIT_IS_FALSE(__is_trivially_relocatable, __weak id);219TRAIT_IS_TRUE(__is_trivially_relocatable, __autoreleasing id);220TRAIT_IS_TRUE(__is_trivially_relocatable, __unsafe_unretained id);221TRAIT_IS_TRUE(__is_trivially_relocatable, HasStrong);222TRAIT_IS_FALSE(__is_trivially_relocatable, HasWeak);223TRAIT_IS_TRUE(__is_trivially_relocatable, HasUnsafeUnretained);224 225// __is_bitwise_cloneable226TRAIT_IS_FALSE(__is_bitwise_cloneable, __strong id);227TRAIT_IS_FALSE(__is_bitwise_cloneable, __weak id);228TRAIT_IS_FALSE(__is_bitwise_cloneable, __autoreleasing id);229TRAIT_IS_TRUE(__is_trivial, __unsafe_unretained id);230TRAIT_IS_FALSE(__is_bitwise_cloneable, HasStrong);231TRAIT_IS_FALSE(__is_bitwise_cloneable, HasWeak);232TRAIT_IS_TRUE(__is_bitwise_cloneable, HasUnsafeUnretained);233