1!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s 2 3!REQUIRES: target={{.+}}-aix{{.*}} 4 5! Size and alignment of bind(c) derived types 6subroutine s1() 7 use, intrinsic :: iso_c_binding 8 type, bind(c) :: dt1 9 character(c_char) :: x1 !CHECK: x1 size=1 offset=0: 10 real(c_double) :: x2 !CHECK: x2 size=8 offset=4: 11 end type 12 type, bind(c) :: dt2 13 character(c_char) :: x1(9) !CHECK: x1 size=9 offset=0: 14 real(c_double) :: x2 !CHECK: x2 size=8 offset=12: 15 end type 16 type, bind(c) :: dt3 17 integer(c_short) :: x1 !CHECK: x1 size=2 offset=0: 18 real(c_double) :: x2 !CHECK: x2 size=8 offset=4: 19 end type 20 type, bind(c) :: dt4 21 integer(c_int) :: x1 !CHECK: x1 size=4 offset=0: 22 real(c_double) :: x2 !CHECK: x2 size=8 offset=4: 23 end type 24 type, bind(c) :: dt5 25 real(c_double) :: x1 !CHECK: x1 size=8 offset=0: 26 real(c_double) :: x2 !CHECK: x2 size=8 offset=8: 27 end type 28 type, bind(c) :: dt6 29 integer(c_long) :: x1 !CHECK: x1 size=8 offset=0: 30 character(c_char) :: x2 !CHECK: x2 size=1 offset=8: 31 real(c_double) :: x3 !CHECK: x3 size=8 offset=12: 32 end type 33 type, bind(c) :: dt7 34 integer(c_long) :: x1 !CHECK: x1 size=8 offset=0: 35 integer(c_long) :: x2 !CHECK: x2 size=8 offset=8: 36 character(c_char) :: x3 !CHECK: x3 size=1 offset=16: 37 real(c_double) :: x4 !CHECK: x4 size=8 offset=20: 38 end type 39 type, bind(c) :: dt8 40 character(c_char) :: x1 !CHECK: x1 size=1 offset=0: 41 complex(c_double_complex) :: x2 !CHECK: x2 size=16 offset=4: 42 end type 43end subroutine 44 45subroutine s2() 46 use, intrinsic :: iso_c_binding 47 type, bind(c) :: dt10 48 character(c_char) :: x1 49 real(c_double) :: x2 50 end type 51 type, bind(c) :: dt11 52 type(dt10) :: y1 !CHECK: y1 size=12 offset=0: 53 real(c_double) :: y2 !CHECK: y2 size=8 offset=12: 54 end type 55 type, bind(c) :: dt12 56 character(c_char) :: y1 !CHECK: y1 size=1 offset=0: 57 type(dt10) :: y2 !CHECK: y2 size=12 offset=4: 58 character(c_char) :: y3 !CHECK: y3 size=1 offset=16: 59 end type 60 type, bind(c) :: dt13 61 integer(c_short) :: y1 !CHECK: y1 size=2 offset=0: 62 type(dt10) :: y2 !CHECK: y2 size=12 offset=4: 63 character(c_char) :: y3 !CHECK: y3 size=1 offset=16: 64 end type 65 66 type, bind(c) :: dt20 67 character(c_char) :: x1 68 integer(c_short) :: x2 69 end type 70 type, bind(c) :: dt21 71 real(c_double) :: y1 !CHECK: y1 size=8 offset=0: 72 type(dt20) :: y2 !CHECK: y2 size=4 offset=8: 73 real(c_double) :: y3 !CHECK: y3 size=8 offset=12: 74 end type 75 76 type, bind(c) :: dt30 77 character(c_char) :: x1 78 character(c_char) :: x2 79 end type 80 type, bind(c) :: dt31 81 integer(c_long) :: y1 !CHECK: y1 size=8 offset=0: 82 type(dt30) :: y2 !CHECK: y2 size=2 offset=8: 83 real(c_double) :: y3 !CHECK: y3 size=8 offset=12: 84 end type 85 86 type, bind(c) :: dt40 87 integer(c_short) :: x1 88 real(c_double) :: x2 89 end type 90 type, bind(c) :: dt41 91 real(c_double) :: y1 !CHECK: y1 size=8 offset=0: 92 type(dt40) :: y2 !CHECK: y2 size=12 offset=8: 93 real(c_double) :: y3 !CHECK: y3 size=8 offset=20: 94 end type 95 96 type, bind(c) :: dt50 97 integer(c_short) :: x1 98 complex(c_double_complex) :: x2 99 end type 100 type, bind(c) :: dt51 101 real(c_double) :: y1 !CHECK: y1 size=8 offset=0: 102 type(dt50) :: y2 !CHECK: y2 size=20 offset=8: 103 complex(c_double_complex) :: y3 !CHECK: y3 size=16 offset=28: 104 end type 105end subroutine 106