diff options
-rw-r--r-- | lib/AST/Type.cpp | 2 | ||||
-rw-r--r-- | test/ARCMT/cxx-checking.mm | 6 | ||||
-rw-r--r-- | test/CodeGenObjC/arc.m | 14 | ||||
-rw-r--r-- | test/SemaObjC/arc.m | 8 | ||||
-rw-r--r-- | test/SemaObjCXX/arc-non-pod.mm | 7 |
5 files changed, 29 insertions, 8 deletions
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index 1f0a37efac..08971eb034 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -915,8 +915,6 @@ bool QualType::isPODType(ASTContext &Context) const { return false; case Qualifiers::OCL_None: - if ((*this)->isObjCLifetimeType()) - return false; break; } } diff --git a/test/ARCMT/cxx-checking.mm b/test/ARCMT/cxx-checking.mm index c298b94b82..27e0ea3869 100644 --- a/test/ARCMT/cxx-checking.mm +++ b/test/ARCMT/cxx-checking.mm @@ -75,12 +75,12 @@ struct HasBlockPointerMemberAndNonPOD1 { // expected-warning{{'HasBlockPointerMe int (^bp[2][3])(int); }; -int check_non_pod_objc_pointer0[__is_pod(id)? -1 : 1]; +int check_non_pod_objc_pointer0[__is_pod(id)? 1 : -1]; int check_non_pod_objc_pointer1[__is_pod(__strong id)? -1 : 1]; int check_non_pod_objc_pointer2[__is_pod(__unsafe_unretained id)? 1 : -1]; -int check_non_pod_objc_pointer3[__is_pod(id[2][3])? -1 : 1]; +int check_non_pod_objc_pointer3[__is_pod(id[2][3])? 1 : -1]; int check_non_pod_objc_pointer4[__is_pod(__unsafe_unretained id[2][3])? 1 : -1]; -int check_non_pod_block0[__is_pod(int (^)(int))? -1 : 1]; +int check_non_pod_block0[__is_pod(int (^)(int))? 1 : -1]; int check_non_pod_block1[__is_pod(int (^ __unsafe_unretained)(int))? 1 : -1]; struct FlexibleArrayMember0 { diff --git a/test/CodeGenObjC/arc.m b/test/CodeGenObjC/arc.m index df3968722e..55b7747aa6 100644 --- a/test/CodeGenObjC/arc.m +++ b/test/CodeGenObjC/arc.m @@ -1526,3 +1526,17 @@ void test53(void) { // CHECK-NEXT: call void @objc_release(i8* [[T0]]) // CHECK-NEXT: ret void } + +// <rdar://problem/9758798> +// CHECK: define void @test54(i32 %first, ...) +void test54(int first, ...) { + __builtin_va_list arglist; + // CHECK: call void @llvm.va_start + __builtin_va_start(arglist, first); + // CHECK: call i8* @objc_retain + id obj = __builtin_va_arg(arglist, id); + // CHECK: call void @llvm.va_end + __builtin_va_end(arglist); + // CHECK: call void @objc_release + // CHECK: ret void +} diff --git a/test/SemaObjC/arc.m b/test/SemaObjC/arc.m index 61dc0e0525..3d190e5c53 100644 --- a/test/SemaObjC/arc.m +++ b/test/SemaObjC/arc.m @@ -618,3 +618,11 @@ void test35(void) { __strong int non_objc_type; // expected-warning {{'__strong' only applies to objective-c object or block pointer types}} } + +void test36(int first, ...) { + // <rdar://problem/9758798> + __builtin_va_list arglist; + __builtin_va_start(arglist, first); + id obj = __builtin_va_arg(arglist, id); + __builtin_va_end(arglist); +} diff --git a/test/SemaObjCXX/arc-non-pod.mm b/test/SemaObjCXX/arc-non-pod.mm index 6c809bb7b3..6a47b3d856 100644 --- a/test/SemaObjCXX/arc-non-pod.mm +++ b/test/SemaObjCXX/arc-non-pod.mm @@ -75,13 +75,14 @@ struct HasBlockPointerMemberAndNonPOD1 { // expected-warning{{'HasBlockPointerMe int (^bp[2][3])(int); }; -int check_non_pod_objc_pointer0[__is_pod(id)? -1 : 1]; +int check_non_pod_objc_pointer0[__is_pod(id)? 1 : -1]; int check_non_pod_objc_pointer1[__is_pod(__strong id)? -1 : 1]; int check_non_pod_objc_pointer2[__is_pod(__unsafe_unretained id)? 1 : -1]; -int check_non_pod_objc_pointer3[__is_pod(id[2][3])? -1 : 1]; +int check_non_pod_objc_pointer3[__is_pod(id[2][3])? 1 : -1]; int check_non_pod_objc_pointer4[__is_pod(__unsafe_unretained id[2][3])? 1 : -1]; -int check_non_pod_block0[__is_pod(int (^)(int))? -1 : 1]; +int check_non_pod_block0[__is_pod(int (^)(int))? 1 : -1]; int check_non_pod_block1[__is_pod(int (^ __unsafe_unretained)(int))? 1 : -1]; +int check_non_pod_block2[__is_pod(int (^ __strong)(int))? -1 : 1]; struct FlexibleArrayMember0 { int length; |