24 lines · plain
1// RUN: cir-opt %s --verify-roundtrip | FileCheck %s2 3// Test the parsing and printing of a constructor that uses a vtable addess_point op.4 5!u32i = !cir.int<u, 32>6!u8i = !cir.int<u, 8>7!rec_anon_struct = !cir.record<struct {!cir.array<!cir.ptr<!u8i> x 4>}>8!rec_S = !cir.record<struct "S" {!cir.vptr}>9 10module {11 cir.global "private" external @_ZTV1S : !rec_anon_struct {alignment = 8 : i64}12 cir.func @_ZN1SC2Ev(%arg0: !cir.ptr<!rec_S>) {13 %0 = cir.alloca !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>, ["this", init] {alignment = 8 : i64}14 cir.store %arg0, %0 : !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>15 %1 = cir.load %0 : !cir.ptr<!cir.ptr<!rec_S>>, !cir.ptr<!rec_S>16 %2 = cir.vtable.address_point(@_ZTV1S, address_point = <index = 0, offset = 2>) : !cir.vptr17 %3 = cir.cast bitcast %1 : !cir.ptr<!rec_S> -> !cir.ptr<!cir.vptr>18 cir.store align(8) %2, %3 : !cir.vptr, !cir.ptr<!cir.vptr>19 cir.return20 }21}22 23// CHECK: cir.vtable.address_point(@_ZTV1S, address_point = <index = 0, offset = 2>) : !cir.vptr24