88 lines · cpp
1// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s3 4void foo() {5 struct A { char buf[16]; };6 struct B : A {};7 struct C { int i; B bs[1]; } *c;8 9 int gi;10 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)11 gi = __builtin_object_size(&c->bs[0], 0);12 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)13 gi = __builtin_object_size(&c->bs[0], 1);14 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)15 gi = __builtin_object_size(&c->bs[0], 2);16 // CHECK: store i32 1617 gi = __builtin_object_size(&c->bs[0], 3);18}19 20 21void foo2() {22 struct A { int a; };23 struct B { int b; };24 struct C: public A, public B {};25 26 C c;27 28 int gi;29 // CHECK: store i32 830 gi = __builtin_object_size(&c, 0);31 // CHECK: store i32 832 gi = __builtin_object_size((A*)&c, 0);33 // CHECK: store i32 434 gi = __builtin_object_size((B*)&c, 0);35 36 // CHECK: store i32 837 gi = __builtin_object_size((char*)&c, 0);38 // CHECK: store i32 839 gi = __builtin_object_size((char*)(A*)&c, 0);40 // CHECK: store i32 441 gi = __builtin_object_size((char*)(B*)&c, 0);42}43 44 45typedef struct {46 double c[0];47 float f;48} foofoo0_t;49 50unsigned babar0(foofoo0_t *f) {51 // CHECK: ret i32 052 return __builtin_object_size(f->c, 1);53}54 55void test2() {56 struct A { char buf[16]; };57 struct B : A {};58 struct C { int i; B bs[1]; } *c;59 60 int gi;61 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)62 gi = __builtin_object_size(&c->bs[0], 0);63 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)64 gi = __builtin_object_size(&c->bs[0], 1);65 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)66 gi = __builtin_object_size(&c->bs[0], 2);67 // CHECK: store i32 1668 gi = __builtin_object_size(&c->bs[0], 3);69 70 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)71 gi = __builtin_object_size((A*)&c->bs[0], 0);72 // CHECK: store i32 1673 gi = __builtin_object_size((A*)&c->bs[0], 1);74 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)75 gi = __builtin_object_size(&c->bs[0].buf[0], 2);76 // CHECK: store i32 1677 gi = __builtin_object_size(&c->bs[0].buf[0], 3);78 79 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)80 gi = __builtin_object_size(&c->bs[0].buf[0], 0);81 // CHECK: store i32 1682 gi = __builtin_object_size(&c->bs[0].buf[0], 1);83 // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)84 gi = __builtin_object_size(&c->bs[0].buf[0], 2);85 // CHECK: store i32 1686 gi = __builtin_object_size(&c->bs[0].buf[0], 3);87}88