brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · f6ddbeb Raw
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