llvm/flang/test/semantics/modfile17.f90
peter klausler be3b765e2a [flang] basic skeleton of assignment analyzer
remove needless template<> on some function overloads

dodge bogus compiler warning from gcc 8.1.0 only

stricter typing of expressions in symbols

adjust modfile12.f90 expected test results

add Unwrap, massage folding a bit

Use Unwrap to simplify folding

Move KindSelector analysis into expression semantics

fix crash

checkpoint

updates to TypeParamInquiry

support of %KIND type parameter inquiry

equality testing for expressions

checkpoint during PDT implementation

reformat

checkpoint derived type instantiation

checkpoint

resolve merge

debugging failed tests

fix failing resolve37.f90 test

all existing tests pass

clean up all build warnings

fix bug

update copyright dates

fix copyright dates

address review comments

review comment

merge with master after peeling off changes

bugfixing new feature

fix warning from old g++s

tweaks after merging with latest head

more bugfixing

making modfile17.f90 test work

Make kinds into expressions in symbol table types

big refactor for deferring kinds in intrinsic types

modfile17.f90 test passes

clean up TODOs

Simplify types as stored in scopes

Test KIND parameter default init expressions, debug them

Update copyright dates

address comments

remove dead line

address comments

Original-commit: flang-compiler/f18@1f43d0a048
Reviewed-on: https://github.com/flang-compiler/f18/pull/260
Tree-same-pre-rewrite: false
2019-01-17 10:41:08 -08:00

182 lines
5.9 KiB
Fortran

! Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
!
! Licensed under the Apache License, Version 2.0 (the "License");
! you may not use this file except in compliance with the License.
! You may obtain a copy of the License at
!
! http://www.apache.org/licenses/LICENSE-2.0
!
! Unless required by applicable law or agreed to in writing, software
! distributed under the License is distributed on an "AS IS" BASIS,
! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
! See the License for the specific language governing permissions and
! limitations under the License.
! Tests parameterized derived type instantiation with KIND parameters
module m
type :: capture(k1,k2,k4,k8)
integer(kind=1), kind :: k1
integer(kind=2), kind :: k2
integer(kind=4), kind :: k4
integer(kind=8), kind :: k8
integer(kind=k1) :: j1
integer(kind=k2) :: j2
integer(kind=k4) :: j4
integer(kind=k8) :: j8
end type capture
type :: defaulted(n1,n2,n4,n8)
integer(kind=1), kind :: n1 = 1
integer(kind=2), kind :: n2 = n1 * 2
integer(kind=4), kind :: n4 = 2 * n2
integer(kind=8), kind :: n8 = 12 - n4
type(capture(n1,n2,n4,n8)) :: cap
end type defaulted
type, extends(defaulted) :: extension(k5)
integer(kind=4), kind :: k5 = 4
integer(kind=k5) :: j5
end type extension
type(capture(1,1,1,1)) :: x1111
integer(kind=x1111%j1%kind) :: res01_1
integer(kind=x1111%j2%kind) :: res02_1
integer(kind=x1111%j4%kind) :: res03_1
integer(kind=x1111%j8%kind) :: res04_1
type(capture(8,8,8,8)) :: x8888
integer(kind=x8888%j1%kind) :: res05_8
integer(kind=x8888%j2%kind) :: res06_8
integer(kind=x8888%j4%kind) :: res07_8
integer(kind=x8888%j8%kind) :: res08_8
type(capture(2,k8=1,k4=8,k2=4)) :: x2481
integer(kind=x2481%j1%kind) :: res09_2
integer(kind=x2481%j2%kind) :: res10_4
integer(kind=x2481%j4%kind) :: res11_8
integer(kind=x2481%j8%kind) :: res12_1
type(capture(2,1,k4=8,k8=4)) :: x2184
integer(kind=x2184%j1%kind) :: res13_2
integer(kind=x2184%j2%kind) :: res14_1
integer(kind=x2184%j4%kind) :: res15_8
integer(kind=x2184%j8%kind) :: res16_4
type(defaulted) :: x1248
integer(kind=x1248%cap%j1%kind) :: res17_1
integer(kind=x1248%cap%j2%kind) :: res18_2
integer(kind=x1248%cap%j4%kind) :: res19_4
integer(kind=x1248%cap%j8%kind) :: res20_8
type(defaulted(2)) :: x2484
integer(kind=x2484%cap%j1%kind) :: res21_2
integer(kind=x2484%cap%j2%kind) :: res22_4
integer(kind=x2484%cap%j4%kind) :: res23_8
integer(kind=x2484%cap%j8%kind) :: res24_4
type(defaulted(n8=2)) :: x1242
integer(kind=x1242%cap%j1%kind) :: res25_1
integer(kind=x1242%cap%j2%kind) :: res26_2
integer(kind=x1242%cap%j4%kind) :: res27_4
integer(kind=x1242%cap%j8%kind) :: res28_2
type(extension(1,1,1,1,1)) :: x11111
integer(kind=x11111%defaulted%cap%j1%kind) :: res29_1
integer(kind=x11111%cap%j2%kind) :: res30_1
integer(kind=x11111%cap%j4%kind) :: res31_1
integer(kind=x11111%cap%j8%kind) :: res32_1
integer(kind=x11111%j5%kind) :: res33_1
type(extension(2,8,4,1,8)) :: x28418
integer(kind=x28418%defaulted%cap%j1%kind) :: res34_2
integer(kind=x28418%cap%j2%kind) :: res35_8
integer(kind=x28418%cap%j4%kind) :: res36_4
integer(kind=x28418%cap%j8%kind) :: res37_1
integer(kind=x28418%j5%kind) :: res38_8
type(extension(8,n8=1,k5=2,n2=4,n4=8)) :: x84812
integer(kind=x84812%defaulted%cap%j1%kind) :: res39_8
integer(kind=x84812%cap%j2%kind) :: res40_4
integer(kind=x84812%cap%j4%kind) :: res41_8
integer(kind=x84812%cap%j8%kind) :: res42_1
integer(kind=x84812%j5%kind) :: res43_2
type(extension(k5=2)) :: x12482
integer(kind=x12482%defaulted%cap%j1%kind) :: res44_1
integer(kind=x12482%cap%j2%kind) :: res45_2
integer(kind=x12482%cap%j4%kind) :: res46_4
integer(kind=x12482%cap%j8%kind) :: res47_8
integer(kind=x12482%j5%kind) :: res48_2
end module
!Expect: m.mod
!module m
!type::capture(k1,k2,k4,k8)
!integer(1),kind::k1
!integer(2),kind::k2
!integer(4),kind::k4
!integer(8),kind::k8
!integer(int(k1,kind=8))::j1
!integer(int(k2,kind=8))::j2
!integer(int(k4,kind=8))::j4
!integer(k8)::j8
!end type
!type::defaulted(n1,n2,n4,n8)
!integer(1),kind::n1=1_4
!integer(2),kind::n2=(int(n1,kind=4)*2_4)
!integer(4),kind::n4=(2_4*int(n2,kind=4))
!integer(8),kind::n8=(12_4-n4)
!type(capture(k1=n1,k2=n2,k4=n4,k8=n8))::cap
!end type
!type,extends(defaulted)::extension(k5)
!integer(4),kind::k5=4_4
!integer(int(k5,kind=8))::j5
!end type
!type(capture(k1=1_4,k2=1_4,k4=1_4,k8=1_4))::x1111
!integer(1)::res01_1
!integer(1)::res02_1
!integer(1)::res03_1
!integer(1)::res04_1
!type(capture(k1=8_4,k2=8_4,k4=8_4,k8=8_4))::x8888
!integer(8)::res05_8
!integer(8)::res06_8
!integer(8)::res07_8
!integer(8)::res08_8
!type(capture(k1=2_4,k2=4_4,k4=8_4,k8=1_4))::x2481
!integer(2)::res09_2
!integer(4)::res10_4
!integer(8)::res11_8
!integer(1)::res12_1
!type(capture(k1=2_4,k2=1_4,k4=8_4,k8=4_4))::x2184
!integer(2)::res13_2
!integer(1)::res14_1
!integer(8)::res15_8
!integer(4)::res16_4
!type(defaulted)::x1248
!integer(1)::res17_1
!integer(2)::res18_2
!integer(4)::res19_4
!integer(8)::res20_8
!type(defaulted(n1=2_4))::x2484
!integer(2)::res21_2
!integer(4)::res22_4
!integer(8)::res23_8
!integer(4)::res24_4
!type(defaulted(n8=2_4))::x1242
!integer(1)::res25_1
!integer(2)::res26_2
!integer(4)::res27_4
!integer(2)::res28_2
!type(extension(k5=1_4,n1=1_4,n2=1_4,n4=1_4,n8=1_4))::x11111
!integer(1)::res29_1
!integer(1)::res30_1
!integer(1)::res31_1
!integer(1)::res32_1
!integer(1)::res33_1
!type(extension(k5=8_4,n1=2_4,n2=8_4,n4=4_4,n8=1_4))::x28418
!integer(2)::res34_2
!integer(8)::res35_8
!integer(4)::res36_4
!integer(1)::res37_1
!integer(8)::res38_8
!type(extension(k5=2_4,n1=8_4,n2=4_4,n4=8_4,n8=1_4))::x84812
!integer(8)::res39_8
!integer(4)::res40_4
!integer(8)::res41_8
!integer(1)::res42_1
!integer(2)::res43_2
!type(extension(k5=2_4,n1=1_4,n2=2_4,n4=4_4,n8=8_4))::x12482
!integer(1)::res44_1
!integer(2)::res45_2
!integer(4)::res46_4
!integer(8)::res47_8
!integer(2)::res48_2
!end