File: offsets03.f90

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (67 lines) | stat: -rw-r--r-- 2,613 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s

! Size and alignment with EQUIVALENCE and COMMON

! a1 depends on a2 depends on a3
module ma
  real :: a1(10), a2(10), a3(10)
  equivalence(a1, a2(3)) !CHECK: a1, PUBLIC size=40 offset=20:
  equivalence(a2, a3(4)) !CHECK: a2, PUBLIC size=40 offset=12:
  !CHECK: a3, PUBLIC size=40 offset=0:
end

! equivalence and 2-dimensional array
module mb
  real :: b1(4), b2, b3, b4
  real :: b(-1:1,2:6)     !CHECK: b, PUBLIC size=60 offset=0:
  equivalence(b(1,6), b1) !CHECK: b1, PUBLIC size=16 offset=56:
  equivalence(b(1,5), b2) !CHECK: b2, PUBLIC size=4 offset=44:
  equivalence(b(0,6), b3) !CHECK: b3, PUBLIC size=4 offset=52:
  equivalence(b(0,4), b4) !CHECK: b4, PUBLIC size=4 offset=28:
end

! equivalence and substring
subroutine mc         !CHECK: Subprogram scope: mc size=12 alignment=1
  character(10) :: c1 !CHECK: c1 size=10 offset=0:
  character(5)  :: c2 !CHECK: c2 size=5 offset=7:
  equivalence(c1(9:), c2(2:4))
end

! Common block: objects are in order from COMMON statement and not part of module
module md                   !CHECK: Module scope: md size=1 alignment=1
  integer(1) :: i 
  integer(2) :: d1          !CHECK: d1, PUBLIC size=2 offset=8:
  integer(4) :: d2          !CHECK: d2, PUBLIC size=4 offset=4:
  integer(1) :: d3          !CHECK: d3, PUBLIC size=1 offset=0:
  real(2) :: d4             !CHECK: d4, PUBLIC size=2 offset=0:
  common /common1/ d3,d2,d1 !CHECK: common1 size=10 offset=0: CommonBlockDetails alignment=4:
  common /common2/ d4       !CHECK: common2 size=2 offset=0: CommonBlockDetails alignment=2:
end

! Test extension of common block size through equivalence statements.
module me
  integer :: i1, j1, l1(10)
  equivalence(i1, l1)
  common /common3/ j1, i1   ! CHECK: common3 size=44 offset=0: CommonBlockDetails alignment=4:

  integer :: i2, j2, l2(10)
  equivalence(i2, l2(2))
  common /common4/ j2, i2   ! CHECK: common4 size=40 offset=0: CommonBlockDetails alignment=4:

  integer :: i3, j3, l3(10)
  equivalence(i3, l3)
  common /common5/ i3, j3   ! CHECK: common5 size=40 offset=0: CommonBlockDetails alignment=4:

  integer :: i4, j4, l4(10), k4(10)
  equivalence(i4, l4)
  equivalence(l4(10), k4)
  common /common6/ i4, j4   ! CHECK: common6 size=76 offset=0: CommonBlockDetails alignment=4:

  integer :: i5, j5, l5(10)
  equivalence(l5(1), i5)
  common /common7/ j5, i5   ! CHECK: common7 size=44 offset=0: CommonBlockDetails alignment=4:

  real :: a1, a2, a3(2)
  equivalence(a1,a3(1)),(a2,a3(2))
  common /common8/ a1, a2   ! CHECK: common8 size=8 offset=0: CommonBlockDetails alignment=4:
end