brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 39c0f35 Raw
66 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s3 4// C++-specific tests for __builtin_object_size5 6int gi;7 8// CHECK-LABEL: define{{.*}} void @_Z5test1v()9void test1() {10  // Guaranteeing that our cast removal logic doesn't break more interesting11  // cases.12  struct A { int a; };13  struct B { int b; };14  struct C: public A, public B {};15 16  C c;17 18  // CHECK: store i32 819  gi = __builtin_object_size(&c, 0);20  // CHECK: store i32 821  gi = __builtin_object_size((A*)&c, 0);22  // CHECK: store i32 423  gi = __builtin_object_size((B*)&c, 0);24 25  // CHECK: store i32 826  gi = __builtin_object_size((char*)&c, 0);27  // CHECK: store i32 828  gi = __builtin_object_size((char*)(A*)&c, 0);29  // CHECK: store i32 430  gi = __builtin_object_size((char*)(B*)&c, 0);31}32 33// CHECK-LABEL: define{{.*}} void @_Z5test2v()34void test2() {35  struct A { char buf[16]; };36  struct B : A {};37  struct C { int i; B bs[1]; } *c;38 39  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)40  gi = __builtin_object_size(&c->bs[0], 0);41  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)42  gi = __builtin_object_size(&c->bs[0], 1);43  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)44  gi = __builtin_object_size(&c->bs[0], 2);45  // CHECK: store i32 1646  gi = __builtin_object_size(&c->bs[0], 3);47 48  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)49  gi = __builtin_object_size((A*)&c->bs[0], 0);50  // CHECK: store i32 1651  gi = __builtin_object_size((A*)&c->bs[0], 1);52  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)53  gi = __builtin_object_size((A*)&c->bs[0], 2);54  // CHECK: store i32 1655  gi = __builtin_object_size((A*)&c->bs[0], 3);56 57  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 false, i1 true, i1 false)58  gi = __builtin_object_size(&c->bs[0].buf[0], 0);59  // CHECK: store i32 1660  gi = __builtin_object_size(&c->bs[0].buf[0], 1);61  // CHECK: call i64 @llvm.objectsize.i64.p0(ptr %{{.*}}, i1 true, i1 true, i1 false)62  gi = __builtin_object_size(&c->bs[0].buf[0], 2);63  // CHECK: store i32 1664  gi = __builtin_object_size(&c->bs[0].buf[0], 3);65}66