blob: 7c8fa8d5ebe182e3e84cb48b01299197644b8c49 [file] [edit]
// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
// Test the parsing and printing of a constructor that uses a vtable addess_point op.
!u32i = !cir.int<u, 32>
!u8i = !cir.int<u, 8>
!rec_anon_struct = !cir.record<struct {!cir.array<!cir.ptr<!u8i> x 4>}>
!rec_S = !cir.record<struct "S" {!cir.vptr}>
module {
cir.global "private" external @_ZTV1S : !rec_anon_struct {alignment = 8 : i64}
cir.func @_ZN1SC2Ev(%arg0: !cir.ptr<!rec_S>) {
%0 = cir.alloca !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>, ["this", init] {alignment = 8 : i64}
cir.store %arg0, %0 : !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>
%1 = cir.load %0 : !cir.ptr<!cir.ptr<!rec_S>>, !cir.ptr<!rec_S>
%2 = cir.vtable.address_point(@_ZTV1S, address_point = <index = 0, offset = 2>) : !cir.vptr
%3 = cir.cast bitcast %1 : !cir.ptr<!rec_S> -> !cir.ptr<!cir.vptr>
cir.store align(8) %2, %3 : !cir.vptr, !cir.ptr<!cir.vptr>
cir.return
}
}
// CHECK: cir.vtable.address_point(@_ZTV1S, address_point = <index = 0, offset = 2>) : !cir.vptr