be3b765e2a
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
182 lines
5.9 KiB
Fortran
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
|