brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · aaad4ea Raw
66 lines · plain
1// RUN: %clang_cc1 -no-enable-noundef-analysis -triple armv7-ios5.0 -std=c++11 -fmerge-all-constants -fobjc-arc -Os -emit-llvm -o - %s | FileCheck %s2 3// CHECK: @[[STR0:.*]] = private unnamed_addr constant [5 x i8] c"str0\00", section "__TEXT,__cstring,cstring_literals"4// CHECK: @[[UNNAMED_CFSTRING0:.*]] = private global %struct.__NSConstantString_tag { ptr @__CFConstantStringClassReference, i32 1992, ptr @[[STR0]], i32 4 }, section "__DATA,__cfstring"5// CHECK: @[[STR1:.*]] = private unnamed_addr constant [5 x i8] c"str1\00", section "__TEXT,__cstring,cstring_literals"6// CHECK: @[[UNNAMED_CFSTRING1:.*]] = private global %struct.__NSConstantString_tag { ptr @__CFConstantStringClassReference, i32 1992, ptr @[[STR1]], i32 4 }, section "__DATA,__cfstring"7// CHECK: @[[REFTMP:.*]] = private constant [2 x ptr] [ptr @[[UNNAMED_CFSTRING0]], ptr @[[UNNAMED_CFSTRING1]]]8 9typedef __SIZE_TYPE__ size_t;10 11namespace std {12template <typename _Ep>13class initializer_list {14  const _Ep* __begin_;15  size_t __size_;16 17  initializer_list(const _Ep* __b, size_t __s);18};19}20 21@interface I22+ (instancetype) new;23@end24 25void function(std::initializer_list<I *>);26 27extern "C" void single() { function({ [I new] }); }28 29// CHECK: [[INSTANCE:%.*]] = {{.*}} call ptr @objc_msgSend(ptr {{.*}}, ptr {{.*}})30// CHECK-NEXT: store ptr [[INSTANCE]], ptr %{{.*}},31// CHECK: call void @llvm.objc.release(ptr {{.*}})32 33extern "C" void multiple() { function({ [I new], [I new] }); }34 35// CHECK: [[INSTANCE:%.*]] = {{.*}} call ptr @objc_msgSend(ptr {{.*}}, ptr {{.*}})36// CHECK-NEXT: store ptr [[INSTANCE]], ptr %{{.*}},37// CHECK: call void @llvm.objc.release(ptr {{.*}})38 39std::initializer_list<id> foo1() {40  return {@"str0", @"str1"};41}42 43// CHECK: define{{.*}} void @_Z4foo1v(ptr {{.*}} %[[AGG_RESULT:.*]])44// CHECK: store ptr @[[REFTMP]], ptr %[[AGG_RESULT]]45// CHECK: %[[SIZE:.*]] = getelementptr inbounds nuw i8, ptr %[[AGG_RESULT]], i32 446// CHECK: store i32 2, ptr %[[SIZE]]47// CHECK: ret void48 49void external();50 51extern "C" void extended() {52  const auto && temporary = { [I new] };53  external();54}55 56// CHECK: [[INSTANCE:%.*]] = {{.*}} call ptr @objc_msgSend(ptr {{.*}}, ptr {{.*}})57// CHECK: {{.*}} call void @_Z8externalv()58// CHECK: {{.*}} call void @llvm.objc.release(ptr {{.*}})59 60std::initializer_list<I *> il = { [I new] };61 62// CHECK: [[POOL:%.*]] = {{.*}} call ptr @llvm.objc.autoreleasePoolPush()63// CHECK: [[INSTANCE:%.*]] = {{.*}} call ptr @objc_msgSend(ptr {{.*}}, ptr {{.*}})64// CHECK-NEXT: store ptr [[INSTANCE]], ptr @_ZGR2il_65// CHECK: {{.*}} call void @llvm.objc.autoreleasePoolPop(ptr [[POOL]])66