From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id C21053858D37; Tue, 19 Mar 2024 15:17:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C21053858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C21053858D37 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710861467; cv=none; b=ghMKUvUCtR+JmQA88gIKny9coWY+TIAW21CNceix4wNLQgPb6dhbQXLGVQeDM4IyMcY68cJQayLBk8v+PSuk7xT2aUT2KJt4sIxTZ1RT5siemCLUg0fFysCREdlsgdaKTeD5EiOtNUYFxYxZJfofjoUBnPL7KmWLKEiEatfF2Zs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710861467; c=relaxed/simple; bh=i64wOQbzLsasWd8JErlELgKUgrDu0wjfn7IS8EHW/L0=; h=DKIM-Signature:From:Mime-Version:Subject:Message-Id:Date:To; b=mz1t1OOkV+RgGWkbvomZ2oE/eKJkZJX7E8ox4Fy3OftnzOaK0+5m1x+7WUQPQUlpsqhbhntZASv5n0naTNDjuYX5i3qakOJEjiYpPMP290x+BWzkBJNaOhz9OxYeqO/v4J3wjp6JYVOnnd4qDVuPiXAB9B81IAHFy/6HCPtXYAU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-33ed6097ca0so1050462f8f.1; Tue, 19 Mar 2024 08:17:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710861464; x=1711466264; darn=gcc.gnu.org; h=to:cc:date:message-id:subject:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=WzKgBnR3AtD3iimyBmZkX1BvU7j3Aq0lMwahicVpZfY=; b=OKDbiGgLLDScF/R3u35Zby0fPEuol9NRHcvht2Mj56O2R76aL63S0vHGp5LCI1sjku blqOh8rv0bjwiMy90PG9gLMVXm7x6zRZ7q1rcLyobMx7+aGbcTvO7z2AadjvHtopMbIM YP974sGR572tFmeVylB2MTClP6KPO4HBw8iT0qww0IyDLJf7G4cv9vlPPQ/Szp2i885L PJ5DS1Yo1kJOf60CZcrgs8klUh1Yngh4r1yFjmDDUYw7tKaeBPP4pSnf2GnO34oE9IGt +450ZXk8CjihhSWlv3cMLjvR504XmMyFcmB+hX8KTEWLCPKEG02oSaRUiMoUZcRNTl1O X8Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710861464; x=1711466264; h=to:cc:date:message-id:subject:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WzKgBnR3AtD3iimyBmZkX1BvU7j3Aq0lMwahicVpZfY=; b=V3y1eC8CPD90ZU5XLQOoT2kUdjsky9zR6DF7YnIBboTdpU7Gn8vOKfvTQEwHZRUqwB H2hFC19QHFwywNTx+XJJm+a/GTsLNSgCzxeKNqxdsEd0fMiU4obuimcV1/C9X4G1TSAC a1q1htCOK13yzZ4VzHry0cEyMoG41kymi/Db9pNnZBT6seN5zfHPnN0uzYKnultufnns 8dMkyvgWP+B7z6gX2+zJdEyhkZzzixCw0hdoyASqDKRQuRy43tcUVPSIiqLszq57XO0z wlrLD0dM/dxmscGay8xpfavyaTuRJ6aYuro5Cmj3AOkoITQjcpJuAeUDoyIK4DTR8kB+ tO5w== X-Gm-Message-State: AOJu0YzP8HNOu4hzNJKgIvqMAdxZshZU/+TSShMFcDqkVsN7KFt2y24H xZxULHZi3o6UCEtuAAKNs0Ekzklyla/V7dnAaJbv2PB4LApaxVqgZ7WPLUcA X-Google-Smtp-Source: AGHT+IH0plMCJ2KUYVz2AL+y3oXeMbyLgap+LWfN6f+kEw61VeIJCdCip5I4iG09m0fce5zTTWy8KA== X-Received: by 2002:a05:600c:4e09:b0:414:66c6:48a with SMTP id b9-20020a05600c4e0900b0041466c6048amr1303342wmq.2.1710861464132; Tue, 19 Mar 2024 08:17:44 -0700 (PDT) Received: from smtpclient.apple (chp127.enscp.fr. [193.51.253.127]) by smtp.gmail.com with ESMTPSA id h4-20020a05600c350400b00414128462c2sm6077773wmq.33.2024.03.19.08.17.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Mar 2024 08:17:43 -0700 (PDT) From: FX Coudert Content-Type: multipart/mixed; boundary="Apple-Mail=_056260F7-1448-4637-A155-22517727F4C3" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.500.171.1.1\)) Subject: [PATCH] Fortran: add two small F2023 features Message-Id: <7417DEB0-6EE2-4B0C-A90E-51ACC1321021@gmail.com> Date: Tue, 19 Mar 2024 16:17:32 +0100 Cc: GCC Patches To: gfortran X-Mailer: Apple Mail (2.3774.500.171.1.1) X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --Apple-Mail=_056260F7-1448-4637-A155-22517727F4C3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi, These two (independent) patches add two tiny Fortran 2023 features: new = ISO_FORTRAN_ENV named constants and SELECTED_LOGICAL_KIND intrinsic. Bootstrapped and regtested on x86_64-pc-linux-gnu. Please review, and let me know if it=E2=80=99s okay to push once we=E2=80=99= re back in stage 1. (I know it=E2=80=99s not particularly soon, but I don=E2=80=99t want to = forget these so I=E2=80=99m posting them for review) FX --Apple-Mail=_056260F7-1448-4637-A155-22517727F4C3 Content-Disposition: attachment; filename=0001-Fortran-add-F2023-ISO_FORTRAN_ENV-named-constants.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Fortran-add-F2023-ISO_FORTRAN_ENV-named-constants.patch" Content-Transfer-Encoding: quoted-printable =46rom=20fc5c3b546db514bc09b078b99c80e9517d6a3e42=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Francois-Xavier=20Coudert=20= =0ADate:=20Tue,=2019=20Mar=202024=2014:16:38=20= +0100=0ASubject:=20[PATCH=201/2]=20Fortran:=20add=20F2023=20= ISO_FORTRAN_ENV=20named=20constants=0A=0Agcc/fortran/ChangeLog:=0A=0A=09= *=20iso-fortran-env.def:=20Add=20logical{8,16,32,64}=20and=0A=09real16=20= named=20constants.=0A=0Agcc/testsuite/ChangeLog:=0A=0A=09*=20= gfortran.dg/iso_fortran_env_8.f90:=20New=20test.=0A=09*=20= gfortran.dg/iso_fortran_env_9.f90:=20New=20test.=0A---=0A=20= gcc/fortran/iso-fortran-env.def=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=2010=20++++++=0A=20.../gfortran.dg/iso_fortran_env_8.f90=20=20=20=20= =20=20=20=20=20|=2032=20+++++++++++++++++++=0A=20= .../gfortran.dg/iso_fortran_env_9.f90=20=20=20=20=20=20=20=20=20|=2029=20= +++++++++++++++++=0A=203=20files=20changed,=2071=20insertions(+)=0A=20= create=20mode=20100644=20gcc/testsuite/gfortran.dg/iso_fortran_env_8.f90=0A= =20create=20mode=20100644=20= gcc/testsuite/gfortran.dg/iso_fortran_env_9.f90=0A=0Adiff=20--git=20= a/gcc/fortran/iso-fortran-env.def=20b/gcc/fortran/iso-fortran-env.def=0A= index=20ed7946a2594..069bbc1fb86=20100644=0A---=20= a/gcc/fortran/iso-fortran-env.def=0A+++=20= b/gcc/fortran/iso-fortran-env.def=0A@@=20-68,10=20+68,20=20@@=20= NAMED_INTCST=20(ISOFORTRANENV_IOSTAT_EOR,=20"iostat_eor",=20= LIBERROR_EOR,=20\=0A=20NAMED_INTCST=20= (ISOFORTRANENV_IOSTAT_INQUIRE_INTERNAL_UNIT,=20\=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20"iostat_inquire_internal_unit",=20= LIBERROR_INQUIRE_INTERNAL_UNIT,=20\=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20GFC_STD_F2008)=0A+NAMED_INTCST=20(ISOFORTRANENV_LOGICAL8,=20= "logical8",=20\=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gfc_get_int_kind_from_width_isofortranenv=20(8),=20GFC_STD_F2023)=0A= +NAMED_INTCST=20(ISOFORTRANENV_LOGICAL16,=20"logical16",=20\=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20= gfc_get_int_kind_from_width_isofortranenv=20(16),=20GFC_STD_F2023)=0A= +NAMED_INTCST=20(ISOFORTRANENV_LOGICAL32,=20"logical32",=20\=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20= gfc_get_int_kind_from_width_isofortranenv=20(32),=20GFC_STD_F2023)=0A= +NAMED_INTCST=20(ISOFORTRANENV_LOGICAL64,=20"logical64",=20\=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20= gfc_get_int_kind_from_width_isofortranenv=20(64),=20GFC_STD_F2023)=0A=20= NAMED_INTCST=20(ISOFORTRANENV_NUMERIC_STORAGE_SIZE,=20= "numeric_storage_size",=20\=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gfc_numeric_storage_size,=20GFC_STD_F2003)=0A=20NAMED_INTCST=20= (ISOFORTRANENV_OUTPUT_UNIT,=20"output_unit",=20GFC_STDOUT_UNIT_NUMBER,=20= \=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20GFC_STD_F2003)=0A= +NAMED_INTCST=20(ISOFORTRANENV_REAL16,=20"real16",=20\=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20gfc_get_real_kind_from_width_isofortranenv=20= (16),=20GFC_STD_F2023)=0A=20NAMED_INTCST=20(ISOFORTRANENV_REAL32,=20= "real32",=20\=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= gfc_get_real_kind_from_width_isofortranenv=20(32),=20GFC_STD_F2008)=0A=20= NAMED_INTCST=20(ISOFORTRANENV_REAL64,=20"real64",=20\=0Adiff=20--git=20= a/gcc/testsuite/gfortran.dg/iso_fortran_env_8.f90=20= b/gcc/testsuite/gfortran.dg/iso_fortran_env_8.f90=0Anew=20file=20mode=20= 100644=0Aindex=2000000000000..d3661b3b592=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/iso_fortran_env_8.f90=0A@@=20-0,0=20+1,32=20= @@=0A+!=20{=20dg-do=20run=20}=0A+!=0A+!=20Check=20for=20the=20new=20= Fortran=202023=20ISO_FORTRAN_ENV=20named=20constants=0A+=0A+program=20= test=0A+=20=20use=20iso_fortran_env=0A+=20=20implicit=20none=0A+=0A+=20=20= !=20These=20integer=20kinds=20are=20guaranteed=20on=20=0A+=20=20= integer(int8)=20::=20i8=0A+=20=20integer(int16)=20::=20i16=0A+=20=20= integer(int32)=20::=20i32=0A+=20=20integer(int64)=20::=20i64=0A+=0A+=20=20= logical(logical8)=20::=20l8=0A+=20=20logical(logical16)=20::=20l16=0A+=20= =20logical(logical32)=20::=20l32=0A+=20=20logical(logical64)=20::=20l64=0A= +=0A+=20=20!=20We=20do=20not=20support=20REAL16=20for=20now,=20but=20= check=20it=20can=0A+=20=20!=20still=20be=20used=20in=20specification=20= expressions=0A+=20=20real(kind=3Dmax(real16,=20real32))=20::=20x=0A+=0A+=20= =20if=20(logical8=20/=3D=20int8)=20stop=201=0A+=20=20if=20(logical16=20= /=3D=20int16)=20stop=202=0A+=20=20if=20(logical32=20/=3D=20int32)=20stop=20= 3=0A+=20=20if=20(logical64=20/=3D=20int64)=20stop=204=0A+=0A+=20=20!=20= We=20do=20not=20support=20REAL16=20for=20now=0A+=20=20if=20(real16=20/=3D=20= -2)=20stop=20101=0A+=0A+end=20program=20test=0Adiff=20--git=20= a/gcc/testsuite/gfortran.dg/iso_fortran_env_9.f90=20= b/gcc/testsuite/gfortran.dg/iso_fortran_env_9.f90=0Anew=20file=20mode=20= 100644=0Aindex=2000000000000..ffd70b23159=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/iso_fortran_env_9.f90=0A@@=20-0,0=20+1,29=20= @@=0A+!=20{=20dg-do=20compile=20}=0A+!=20{=20dg-options=20"-std=3Df2018"=20= }=0A+!=0A+!=20Check=20diagnostics=20for=20new=20F2023=20named=20= constants=0A+!=20in=20ISO_FORTRAN_ENV=0A+!=0A+=0A+subroutine=20foo=0A+=20= =20use=20iso_fortran_env=0A+=20=20implicit=20none=0A+=20=20= logical(kind=3Dlogical8)=20::=20x=20!=20{=20dg-error=20"has=20no=20= IMPLICIT=20type"=20}=0A+end=20subroutine=0A+=0A+subroutine=20bar=0A+=20=20= use=20iso_fortran_env,=20only=20:=20logical8=20!=20{=20dg-error=20"not=20= in=20the=20selected=20standard"=20}=0A+=20=20use=20iso_fortran_env,=20= only=20:=20logical16=20!=20{=20dg-error=20"not=20in=20the=20selected=20= standard"=20}=0A+=20=20use=20iso_fortran_env,=20only=20:=20logical32=20!=20= {=20dg-error=20"not=20in=20the=20selected=20standard"=20}=0A+=20=20use=20= iso_fortran_env,=20only=20:=20logical64=20!=20{=20dg-error=20"not=20in=20= the=20selected=20standard"=20}=0A+=20=20use=20iso_fortran_env,=20only=20= :=20real16=20!=20{=20dg-error=20"not=20in=20the=20selected=20standard"=20= }=0A+=20=20implicit=20none=0A+end=20subroutine=0A+=0A+subroutine=20gee=0A= +=20=20use=20iso_fortran_env,=20only=20:=20int8=0A+=20=20use=20= iso_fortran_env,=20only=20:=20int16=0A+=20=20use=20iso_fortran_env,=20= only=20:=20int32=0A+=20=20use=20iso_fortran_env,=20only=20:=20int64=0A+=20= =20implicit=20none=0A+end=20subroutine=0A--=20=0A2.34.1=0A=0A= --Apple-Mail=_056260F7-1448-4637-A155-22517727F4C3 Content-Disposition: attachment; filename=0002-Fortran-add-SELECTED_LOGICAL_KIND.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0002-Fortran-add-SELECTED_LOGICAL_KIND.patch" Content-Transfer-Encoding: quoted-printable =46rom=2017353f9383c7d8a7f7e83a8998d86448ee59ff61=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Francois-Xavier=20Coudert=20= =0ADate:=20Tue,=2019=20Mar=202024=2015:09:22=20= +0100=0ASubject:=20[PATCH=202/2]=20Fortran:=20add=20= SELECTED_LOGICAL_KIND=0A=0Agcc/fortran/ChangeLog:=0A=09*=20expr.cc=20= (check_transformational):=20Add=20SELECTED_LOGICAL_KIND=0A=09to=20= allowed=20functions=20for=20Fortran=202023.=0A=09*=20gfortran.h=20= (GFC_ISYM_SL_KIND):=20New.=0A=09*=20gfortran.texi:=20Mention=20= SELECTED_LOGICAL_KIND.=0A=09*=20intrinsic.cc=20(add_functions):=20Add=20= SELECTED_LOGICAL_KIND.=0A=09(gfc_intrinsic_func_interface):=20Allow=20it=20= in=20initialization=0A=09expressions.=0A=09*=20intrinsic.h=20= (gfc_simplify_selected_logical_kind):=20New=20proto.=0A=09*=20= intrinsic.texi:=20Add=20SELECTED_LOGICAL_KIND.=0A=09*=20simplify.cc=20= (gfc_simplify_selected_logical_kind):=20New=0A=09function.=0A=09*=20= trans-decl.cc=20(gfc_build_intrinsic_function_decls):=20Initialize=0A=09= gfor_fndecl_sl_kind.=0A=09*=20trans-intrinsic.cc=20= (gfc_conv_intrinsic_sl_kind):=20New=20function.=0A=09= (gfc_conv_intrinsic_function):=20Call=20it=20for=20GFC_ISYM_SL_KIND.=0A=09= *=20trans.h=20(gfor_fndecl_sl_kind):=20New=20symbol.=0A=0A= gcc/testsuite/ChangeLog:=0A=0A=09*=20= gfortran.dg/selected_logical_kind_1.f90:=20New=20test.=0A=09*=20= gfortran.dg/selected_logical_kind_2.f90:=20New=20test.=0A=09*=20= gfortran.dg/selected_logical_kind_3.f90:=20New=20test.=0A=09*=20= gfortran.dg/selected_logical_kind_4.f90:=20New=20test.=0A=0A= libgfortran/ChangeLog:=0A=0A=09*=20gfortran.map:=20Add=20= _gfortran_selected_logical_kind.=0A=09*=20= intrinsics/selected_int_kind.f90:=20Add=20SELECTED_LOGICAL_KIND.=0A---=0A= =20gcc/fortran/expr.cc=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20|=2011=20++++-=0A=20gcc/fortran/gfortran.h=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20= =201=20+=0A=20gcc/fortran/gfortran.texi=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20=209=20++--=0A=20gcc/fortran/intrinsic.cc=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=209=20= +++-=0A=20gcc/fortran/intrinsic.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20=201=20+=0A=20gcc/fortran/intrinsic.texi=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2043=20= +++++++++++++++++++=0A=20gcc/fortran/simplify.cc=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2022=20++++++++++=0A=20= gcc/fortran/trans-decl.cc=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20|=20=207=20+++=0A=20gcc/fortran/trans-intrinsic.cc=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20|=2025=20+++++++++++=0A=20= gcc/fortran/trans.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20=201=20+=0A=20= .../gfortran.dg/selected_logical_kind_1.f90=20=20=20|=2029=20= +++++++++++++=0A=20.../gfortran.dg/selected_logical_kind_2.f90=20=20=20|=20= =209=20++++=0A=20.../gfortran.dg/selected_logical_kind_3.f90=20=20=20|=20= 18=20++++++++=0A=20.../gfortran.dg/selected_logical_kind_4.f90=20=20=20|=20= 23=20++++++++++=0A=20libgfortran/gfortran.map=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20|=20=205=20+++=0A=20= libgfortran/intrinsics/selected_int_kind.f90=20=20|=2032=20= ++++++++++++--=0A=2016=20files=20changed,=20236=20insertions(+),=209=20= deletions(-)=0A=20create=20mode=20100644=20= gcc/testsuite/gfortran.dg/selected_logical_kind_1.f90=0A=20create=20mode=20= 100644=20gcc/testsuite/gfortran.dg/selected_logical_kind_2.f90=0A=20= create=20mode=20100644=20= gcc/testsuite/gfortran.dg/selected_logical_kind_3.f90=0A=20create=20mode=20= 100644=20gcc/testsuite/gfortran.dg/selected_logical_kind_4.f90=0A=0Adiff=20= --git=20a/gcc/fortran/expr.cc=20b/gcc/fortran/expr.cc=0Aindex=20= e4b1e8307e3..fc7563ca3c7=20100644=0A---=20a/gcc/fortran/expr.cc=0A+++=20= b/gcc/fortran/expr.cc=0A@@=20-2885,6=20+2885,13=20@@=20= check_transformational=20(gfc_expr=20*e)=0A=20=20=20=20=20"trim",=20= "unpack",=20"findloc",=20NULL=0A=20=20=20};=0A=20=0A+=20=20static=20= const=20char=20*=20const=20trans_func_f2023[]=20=3D=20=20{=0A+=20=20=20=20= "all",=20"any",=20"count",=20"dot_product",=20"matmul",=20"null",=20= "pack",=0A+=20=20=20=20"product",=20"repeat",=20"reshape",=20= "selected_char_kind",=20"selected_int_kind",=0A+=20=20=20=20= "selected_logical_kind",=20"selected_real_kind",=20"spread",=20"sum",=20= "transfer",=0A+=20=20=20=20"transpose",=20"trim",=20"unpack",=20= "findloc",=20NULL=0A+=20=20};=0A+=0A=20=20=20int=20i;=0A=20=20=20const=20= char=20*name;=0A=20=20=20const=20char=20*const=20*functions;=0A@@=20= -2895,7=20+2902,9=20@@=20check_transformational=20(gfc_expr=20*e)=0A=20=0A= =20=20=20name=20=3D=20e->symtree->n.sym->name;=0A=20=0A-=20=20if=20= (gfc_option.allow_std=20&=20GFC_STD_F2008)=0A+=20=20if=20= (gfc_option.allow_std=20&=20GFC_STD_F2023)=0A+=20=20=20=20functions=20=3D=20= trans_func_f2023;=0A+=20=20else=20if=20(gfc_option.allow_std=20&=20= GFC_STD_F2008)=0A=20=20=20=20=20functions=20=3D=20trans_func_f2008;=0A=20= =20=20else=20if=20(gfc_option.allow_std=20&=20GFC_STD_F2003)=0A=20=20=20=20= =20functions=20=3D=20trans_func_f2003;=0Adiff=20--git=20= a/gcc/fortran/gfortran.h=20b/gcc/fortran/gfortran.h=0Aindex=20= c7039730fad..0305b6a293b=20100644=0A---=20a/gcc/fortran/gfortran.h=0A+++=20= b/gcc/fortran/gfortran.h=0A@@=20-662,6=20+662,7=20@@=20enum=20= gfc_isym_id=0A=20=20=20GFC_ISYM_SIND,=0A=20=20=20GFC_ISYM_SINH,=0A=20=20=20= GFC_ISYM_SIZE,=0A+=20=20GFC_ISYM_SL_KIND,=0A=20=20=20GFC_ISYM_SLEEP,=0A=20= =20=20GFC_ISYM_SIZEOF,=0A=20=20=20GFC_ISYM_SNGL,=0Adiff=20--git=20= a/gcc/fortran/gfortran.texi=20b/gcc/fortran/gfortran.texi=0Aindex=20= 371666dcbb6..7e8783a3690=20100644=0A---=20a/gcc/fortran/gfortran.texi=0A= +++=20b/gcc/fortran/gfortran.texi=0A@@=20-862,8=20+862,8=20@@=20data=20= types=20are:=0A=20The=20@code{KIND}=20value=20matches=20the=20storage=20= size=20in=20bytes,=20except=20for=0A=20@code{COMPLEX}=20where=20the=20= storage=20size=20is=20twice=20as=20much=20(or=20both=20real=20and=0A=20= imaginary=20part=20are=20a=20real=20value=20of=20the=20given=20size).=20=20= It=20is=20recommended=20to=20use=0A-the=20@ref{SELECTED_CHAR_KIND},=20= @ref{SELECTED_INT_KIND}=20and=0A-@ref{SELECTED_REAL_KIND}=20intrinsics=20= or=20the=20@code{INT8},=20@code{INT16},=0A+the=20= @ref{SELECTED_CHAR_KIND},=20@ref{SELECTED_INT_KIND},=20= @ref{SELECTED_LOGICAL_KIND}=0A+and=20@ref{SELECTED_REAL_KIND}=20= intrinsics=20or=20the=20@code{INT8},=20@code{INT16},=0A=20@code{INT32},=20= @code{INT64},=20@code{REAL32},=20@code{REAL64},=20and=20@code{REAL128}=0A= =20parameters=20of=20the=20@code{ISO_FORTRAN_ENV}=20module=20instead=20= of=20the=20concrete=20values.=0A=20The=20available=20kind=20parameters=20= can=20be=20found=20in=20the=20constant=20arrays=0A@@=20-1272,8=20+1272,9=20= @@=20equivalent=20to=20the=20standard-conforming=20declaration=0A=20= @noindent=0A=20where=20@code{k}=20is=20the=20kind=20parameter=20suitable=20= for=20the=20intended=20precision.=20=20As=0A=20kind=20parameters=20are=20= implementation-dependent,=20use=20the=20@code{KIND},=0A= -@code{SELECTED_INT_KIND}=20and=20@code{SELECTED_REAL_KIND}=20intrinsics=20= to=20retrieve=0A-the=20correct=20value,=20for=20instance=20@code{REAL*8=20= x}=20can=20be=20replaced=20by:=0A+@code{SELECTED_INT_KIND},=20= @code{SELECTED_LOGICAL_KIND}=20and=0A+@code{SELECTED_REAL_KIND}=20= intrinsics=20to=20retrieve=20the=20correct=20value,=20for=0A+instance=20= @code{REAL*8=20x}=20can=20be=20replaced=20by:=0A=20@smallexample=0A=20= INTEGER,=20PARAMETER=20::=20dbl=20=3D=20KIND(1.0d0)=0A=20REAL(KIND=3Ddbl)=20= ::=20x=0Adiff=20--git=20a/gcc/fortran/intrinsic.cc=20= b/gcc/fortran/intrinsic.cc=0Aindex=20c35f2bdd183..40f4c4f4b0b=20100644=0A= ---=20a/gcc/fortran/intrinsic.cc=0A+++=20b/gcc/fortran/intrinsic.cc=0A@@=20= -2952,6=20+2952,12=20@@=20add_functions=20(void)=0A=20=0A=20=20=20= make_generic=20("selected_int_kind",=20GFC_ISYM_SI_KIND,=20GFC_STD_F95);=0A= =20=0A+=20=20add_sym_1=20("selected_logical_kind",=20GFC_ISYM_SL_KIND,=20= CLASS_TRANSFORMATIONAL,=20ACTUAL_NO,=20BT_INTEGER,=20di,=0A+=09=20=20=20=20= =20GFC_STD_F2023,=20/*=20it=20has=20the=20same=20requirements=20*/=20= gfc_check_selected_int_kind,=0A+=09=20=20=20=20=20= gfc_simplify_selected_logical_kind,=20NULL,=20r,=20BT_INTEGER,=20di,=20= REQUIRED);=0A+=0A+=20=20make_generic=20("selected_logical_kind",=20= GFC_ISYM_SL_KIND,=20GFC_STD_F2023);=0A+=0A=20=20=20add_sym_3=20= ("selected_real_kind",=20GFC_ISYM_SR_KIND,=20CLASS_TRANSFORMATIONAL,=20= ACTUAL_NO,=20BT_INTEGER,=20di,=0A=20=09=20=20=20=20=20GFC_STD_F95,=20= gfc_check_selected_real_kind,=0A=20=09=20=20=20=20=20= gfc_simplify_selected_real_kind,=20NULL,=0A@@=20-5003,7=20+5009,8=20@@=20= gfc_intrinsic_func_interface=20(gfc_expr=20*expr,=20int=20error_flag)=0A=20= =20=20=20=20=20=20gfc_isym_id=20id=20=3D=20isym->id;=0A=20=20=20=20=20=20= =20if=20(id=20!=3D=20GFC_ISYM_REPEAT=20&&=20id=20!=3D=20GFC_ISYM_RESHAPE=0A= =20=09=20=20&&=20id=20!=3D=20GFC_ISYM_SI_KIND=20&&=20id=20!=3D=20= GFC_ISYM_SR_KIND=0A-=09=20=20&&=20id=20!=3D=20GFC_ISYM_TRANSFER=20&&=20= id=20!=3D=20GFC_ISYM_TRIM=0A+=09=20=20&&=20id=20!=3D=20GFC_ISYM_SL_KIND=20= &&=20id=20!=3D=20GFC_ISYM_TRANSFER=0A+=09=20=20&&=20id=20!=3D=20= GFC_ISYM_TRIM=0A=20=09=20=20&&=20!gfc_notify_std=20(GFC_STD_F2003,=20= "Transformational=20function=20%qs=20"=0A=20=09=09=09=20=20=20=20=20=20= "at=20%L=20is=20invalid=20in=20an=20initialization=20"=0A=20=09=09=09=20=20= =20=20=20=20"expression",=20sym->name,=20&expr->where))=0Adiff=20--git=20= a/gcc/fortran/intrinsic.h=20b/gcc/fortran/intrinsic.h=0Aindex=20= 438160aad01..2c287caa6ad=20100644=0A---=20a/gcc/fortran/intrinsic.h=0A= +++=20b/gcc/fortran/intrinsic.h=0A@@=20-399,6=20+399,7=20@@=20gfc_expr=20= *gfc_simplify_scale=20(gfc_expr=20*,=20gfc_expr=20*);=0A=20gfc_expr=20= *gfc_simplify_scan=20(gfc_expr=20*,=20gfc_expr=20*,=20gfc_expr=20*,=20= gfc_expr=20*);=0A=20gfc_expr=20*gfc_simplify_selected_char_kind=20= (gfc_expr=20*);=0A=20gfc_expr=20*gfc_simplify_selected_int_kind=20= (gfc_expr=20*);=0A+gfc_expr=20*gfc_simplify_selected_logical_kind=20= (gfc_expr=20*);=0A=20gfc_expr=20*gfc_simplify_selected_real_kind=20= (gfc_expr=20*,=20gfc_expr=20*,=20gfc_expr=20*);=0A=20gfc_expr=20= *gfc_simplify_set_exponent=20(gfc_expr=20*,=20gfc_expr=20*);=0A=20= gfc_expr=20*gfc_simplify_sign=20(gfc_expr=20*,=20gfc_expr=20*);=0Adiff=20= --git=20a/gcc/fortran/intrinsic.texi=20b/gcc/fortran/intrinsic.texi=0A= index=200445feaf73a..3d3b9edf8e6=20100644=0A---=20= a/gcc/fortran/intrinsic.texi=0A+++=20b/gcc/fortran/intrinsic.texi=0A@@=20= -281,6=20+281,7=20@@=20Some=20basic=20guidelines=20for=20editing=20this=20= document:=0A=20*=20@code{SECOND}:=20=20=20=20=20=20=20=20SECOND,=20=20=20= =20CPU=20time=20function=0A=20*=20@code{SELECTED_CHAR_KIND}:=20= SELECTED_CHAR_KIND,=20=20Choose=20character=20kind=0A=20*=20= @code{SELECTED_INT_KIND}:=20SELECTED_INT_KIND,=20=20Choose=20integer=20= kind=0A+*=20@code{SELECTED_LOGICAL_KIND}:=20SELECTED_LOGICAL_KIND,=20=20= Choose=20logical=20kind=0A=20*=20@code{SELECTED_REAL_KIND}:=20= SELECTED_REAL_KIND,=20=20Choose=20real=20kind=0A=20*=20= @code{SET_EXPONENT}:=20=20SET_EXPONENT,=20Set=20the=20exponent=20of=20= the=20model=0A=20*=20@code{SHAPE}:=20=20=20=20=20=20=20=20=20SHAPE,=20=20= =20=20=20Determine=20the=20shape=20of=20an=20array=0A@@=20-12788,6=20= +12789,48=20@@=20end=20program=20large_integers=0A=20=0A=20=0A=20=0A= +@node=20SELECTED_LOGICAL_KIND=0A+@section=20= @code{SELECTED_LOGICAL_KIND}=20---=20Choose=20logical=20kind=0A+@fnindex=20= SELECTED_LOGICAL_KIND=0A+@cindex=20logical=20kind=0A+@cindex=20kind,=20= logical=0A+=0A+@table=20@asis=0A+@item=20@emph{Description}:=0A= +@code{SELECTED_LOGICAL_KIND(BITS)}=20return=20the=20kind=20value=20of=20= the=20smallest=0A+logical=20type=20whose=20storage=20size=20in=20bits=20= is=20at=20least=20@var{BITS}.=20If=20there=0A+is=20no=20such=20logical=20= kind,=20@code{SELECTED_LOGICAL_KIND}=20returns=20@math{-1}.=0A+=0A+@item=20= @emph{Standard}:=0A+Fortran=202023=20and=20later=0A+=0A+@item=20= @emph{Class}:=0A+Transformational=20function=0A+=0A+@item=20= @emph{Syntax}:=0A+@code{RESULT=20=3D=20SELECTED_LOGICAL_KIND(BITS)}=0A+=0A= +@item=20@emph{Arguments}:=0A+@multitable=20@columnfractions=20.15=20.70=0A= +@item=20@var{BITS}=20@tab=20Shall=20be=20a=20scalar=20and=20of=20type=20= @code{INTEGER}.=0A+@end=20multitable=0A+=0A+@item=20@emph{Example}:=0A= +@smallexample=0A+program=20logical_kinds=0A+=20=20integer,=20parameter=20= ::=20k1=20=3D=20selected_logical_kind(1)=0A+=20=20integer,=20parameter=20= ::=20k40=20=3D=20selected_logical_kind(40)=0A+=20=20logical(kind=3Dk1)=20= ::=20l1=20=20=20=20!=20At=20least=20one=20bit=0A+=20=20logical(kind=3Dk40)= =20::=20l40=20=20!=20At=20least=2040=20bits=0A+=0A+=20=20!=20What=20is=20= their=20actual=20size?=0A+=20=20print=20*,=20storage_size(l1),=20= storage_size(l40)=0A+end=20program=20logical_kinds=0A+@end=20= smallexample=0A+@end=20table=0A+=0A+=0A+=0A=20@node=20SELECTED_REAL_KIND=0A= =20@section=20@code{SELECTED_REAL_KIND}=20---=20Choose=20real=20kind=0A=20= @fnindex=20SELECTED_REAL_KIND=0Adiff=20--git=20a/gcc/fortran/simplify.cc=20= b/gcc/fortran/simplify.cc=0Aindex=203043483daa9..7a5d31c01a6=20100644=0A= ---=20a/gcc/fortran/simplify.cc=0A+++=20b/gcc/fortran/simplify.cc=0A@@=20= -7332,6=20+7332,28=20@@=20gfc_simplify_selected_int_kind=20(gfc_expr=20= *e)=0A=20}=0A=20=0A=20=0A+gfc_expr=20*=0A= +gfc_simplify_selected_logical_kind=20(gfc_expr=20*e)=0A+{=0A+=20=20int=20= i,=20kind,=20bits;=0A+=0A+=20=20if=20(e->expr_type=20!=3D=20= EXPR_CONSTANT=20||=20gfc_extract_int=20(e,=20&bits))=0A+=20=20=20=20= return=20NULL;=0A+=0A+=20=20kind=20=3D=20INT_MAX;=0A+=0A+=20=20for=20(i=20= =3D=200;=20gfc_logical_kinds[i].kind=20!=3D=200;=20i++)=0A+=20=20=20=20= if=20(gfc_logical_kinds[i].bit_size=20>=3D=20bits=0A+=09&&=20= gfc_logical_kinds[i].kind=20<=20kind)=0A+=20=20=20=20=20=20kind=20=3D=20= gfc_logical_kinds[i].kind;=0A+=0A+=20=20if=20(kind=20=3D=3D=20INT_MAX)=0A= +=20=20=20=20kind=20=3D=20-1;=0A+=0A+=20=20return=20gfc_get_int_expr=20= (gfc_default_integer_kind,=20&e->where,=20kind);=0A+}=0A+=0A+=0A=20= gfc_expr=20*=0A=20gfc_simplify_selected_real_kind=20(gfc_expr=20*p,=20= gfc_expr=20*q,=20gfc_expr=20*rdx)=0A=20{=0Adiff=20--git=20= a/gcc/fortran/trans-decl.cc=20b/gcc/fortran/trans-decl.cc=0Aindex=20= b7dea11461f..de57f2ef9d9=20100644=0A---=20a/gcc/fortran/trans-decl.cc=0A= +++=20b/gcc/fortran/trans-decl.cc=0A@@=20-221,6=20+221,7=20@@=20tree=20= gfor_fndecl_is_contiguous0;=0A=20/*=20Intrinsic=20functions=20= implemented=20in=20Fortran.=20=20*/=0A=20tree=20gfor_fndecl_sc_kind;=0A=20= tree=20gfor_fndecl_si_kind;=0A+tree=20gfor_fndecl_sl_kind;=0A=20tree=20= gfor_fndecl_sr_kind;=0A=20=0A=20/*=20BLAS=20gemm=20functions.=20=20*/=0A= @@=20-3604,6=20+3605,12=20@@=20gfc_build_intrinsic_function_decls=20= (void)=0A=20=20=20DECL_PURE_P=20(gfor_fndecl_si_kind)=20=3D=201;=0A=20=20= =20TREE_NOTHROW=20(gfor_fndecl_si_kind)=20=3D=201;=0A=20=0A+=20=20= gfor_fndecl_sl_kind=20=3D=20gfc_build_library_function_decl_with_spec=20= (=0A+=09get_identifier=20(PREFIX("selected_logical_kind")),=20".=20R=20= ",=0A+=09gfc_int4_type_node,=201,=20pvoid_type_node);=0A+=20=20= DECL_PURE_P=20(gfor_fndecl_sl_kind)=20=3D=201;=0A+=20=20TREE_NOTHROW=20= (gfor_fndecl_sl_kind)=20=3D=201;=0A+=0A=20=20=20gfor_fndecl_sr_kind=20=3D=20= gfc_build_library_function_decl_with_spec=20(=0A=20=09get_identifier=20= (PREFIX("selected_real_kind2008")),=20".=20R=20R=20",=0A=20=09= gfc_int4_type_node,=203,=20pvoid_type_node,=20pvoid_type_node,=0Adiff=20= --git=20a/gcc/fortran/trans-intrinsic.cc=20= b/gcc/fortran/trans-intrinsic.cc=0Aindex=200468dfae2b1..ee18e761133=20= 100644=0A---=20a/gcc/fortran/trans-intrinsic.cc=0A+++=20= b/gcc/fortran/trans-intrinsic.cc=0A@@=20-9187,6=20+9187,27=20@@=20= gfc_conv_intrinsic_si_kind=20(gfc_se=20*se,=20gfc_expr=20*expr)=0A=20}=0A= =20=0A=20=0A+/*=20Generate=20code=20for=20SELECTED_LOGICAL_KIND=20(BITS)=20= intrinsic=20function.=20=20*/=0A+=0A+static=20void=0A= +gfc_conv_intrinsic_sl_kind=20(gfc_se=20*se,=20gfc_expr=20*expr)=0A+{=0A= +=20=20tree=20arg,=20type;=0A+=0A+=20=20gfc_conv_intrinsic_function_args=20= (se,=20expr,=20&arg,=201);=0A+=0A+=20=20/*=20The=20argument=20to=20= SELECTED_LOGICAL_KIND=20is=20INTEGER(4).=20=20*/=0A+=20=20type=20=3D=20= gfc_get_int_type=20(4);=0A+=20=20arg=20=3D=20gfc_build_addr_expr=20= (NULL_TREE,=20fold_convert=20(type,=20arg));=0A+=0A+=20=20/*=20Convert=20= it=20to=20the=20required=20type.=20=20*/=0A+=20=20type=20=3D=20= gfc_typenode_for_spec=20(&expr->ts);=0A+=20=20se->expr=20=3D=20= build_call_expr_loc=20(input_location,=0A+=09=09=09=20=20=20=20=20=20= gfor_fndecl_sl_kind,=201,=20arg);=0A+=20=20se->expr=20=3D=20fold_convert=20= (type,=20se->expr);=0A+}=0A+=0A+=0A=20/*=20Generate=20code=20for=20= SELECTED_REAL_KIND=20(P,=20R,=20RADIX)=20intrinsic=20function.=20=20*/=0A= =20=0A=20static=20void=0A@@=20-10618,6=20+10639,10=20@@=20= gfc_conv_intrinsic_function=20(gfc_se=20*=20se,=20gfc_expr=20*=20expr)=0A= =20=20=20=20=20=20=20gfc_conv_intrinsic_si_kind=20(se,=20expr);=0A=20=20=20= =20=20=20=20break;=0A=20=0A+=20=20=20=20case=20GFC_ISYM_SL_KIND:=0A+=20=20= =20=20=20=20gfc_conv_intrinsic_sl_kind=20(se,=20expr);=0A+=20=20=20=20=20= =20break;=0A+=0A=20=20=20=20=20case=20GFC_ISYM_SR_KIND:=0A=20=20=20=20=20= =20=20gfc_conv_intrinsic_sr_kind=20(se,=20expr);=0A=20=20=20=20=20=20=20= break;=0Adiff=20--git=20a/gcc/fortran/trans.h=20b/gcc/fortran/trans.h=0A= index=202e10ce1a9b3..f94fa601400=20100644=0A---=20a/gcc/fortran/trans.h=0A= +++=20b/gcc/fortran/trans.h=0A@@=20-978,6=20+978,7=20@@=20extern=20= GTY(())=20tree=20gfor_fndecl_is_contiguous0;=0A=20/*=20Implemented=20in=20= Fortran.=20=20*/=0A=20extern=20GTY(())=20tree=20gfor_fndecl_sc_kind;=0A=20= extern=20GTY(())=20tree=20gfor_fndecl_si_kind;=0A+extern=20GTY(())=20= tree=20gfor_fndecl_sl_kind;=0A=20extern=20GTY(())=20tree=20= gfor_fndecl_sr_kind;=0A=20=0A=20/*=20IEEE-related.=20=20*/=0Adiff=20= --git=20a/gcc/testsuite/gfortran.dg/selected_logical_kind_1.f90=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_1.f90=0Anew=20file=20= mode=20100644=0Aindex=2000000000000..18d8dedd50e=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_1.f90=0A@@=20-0,0=20= +1,29=20@@=0A+!=20{=20dg-do=20run=20}=0A+=0A+program=20selected=0A+=20=20= implicit=20none=0A+=0A+=20=20integer,=20parameter=20::=20k=20=3D=20= max(1,=20selected_logical_kind(128))=0A+=20=20logical(kind=3Dk)=20::=20l=0A= +=0A+=20=20!=20This=20makes=20assumptions=20about=20the=20targets,=20but=20= they=20are=20true=0A+=20=20!=20for=20all=20targets=20that=20gfortran=20= supports=0A+=0A+=20=20if=20(selected_logical_kind(1)=20=20/=3D=201)=20= STOP=201=0A+=20=20if=20(selected_logical_kind(8)=20=20/=3D=201)=20STOP=20= 2=0A+=20=20if=20(selected_logical_kind(9)=20=20/=3D=202)=20STOP=203=0A+=20= =20if=20(selected_logical_kind(16)=20/=3D=202)=20STOP=204=0A+=20=20if=20= (selected_logical_kind(17)=20/=3D=204)=20STOP=205=0A+=20=20if=20= (selected_logical_kind(32)=20/=3D=204)=20STOP=206=0A+=20=20if=20= (selected_logical_kind(33)=20/=3D=208)=20STOP=207=0A+=20=20if=20= (selected_logical_kind(64)=20/=3D=208)=20STOP=208=0A+=0A+=20=20!=20This=20= should=20not=20exist=0A+=0A+=20=20if=20(selected_logical_kind(17921)=20= /=3D=20-1)=20STOP=209=0A+=0A+=20=20!=20We=20test=20for=20a=20kind=20= larger=20than=2064=20bits=20separately=0A+=0A+=20=20if=20= (storage_size(l)=20/=3D=208=20*=20k)=20STOP=2010=0A+=0A+end=20program=0A= diff=20--git=20a/gcc/testsuite/gfortran.dg/selected_logical_kind_2.f90=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_2.f90=0Anew=20file=20= mode=20100644=0Aindex=2000000000000..6f18958eb37=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_2.f90=0A@@=20-0,0=20= +1,9=20@@=0A+!=20{=20dg-do=20compile=20}=0A+!=20{=20dg-options=20= "-std=3Df2018"=20}=0A+=0A+program=20selected=0A+=20=20implicit=20none=0A= +=0A+=20=20logical(selected_logical_kind(1))=20::=20l=20!=20{=20dg-error=20= "has=20no=20IMPLICIT=20type"=20}=0A+=20=20print=20*,=20= selected_logical_kind(1)=20!=20{=20dg-error=20"has=20no=20IMPLICIT=20= type"=20}=0A+end=20program=0Adiff=20--git=20= a/gcc/testsuite/gfortran.dg/selected_logical_kind_3.f90=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_3.f90=0Anew=20file=20= mode=20100644=0Aindex=2000000000000..ac948e9c252=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_3.f90=0A@@=20-0,0=20= +1,18=20@@=0A+!=20{=20dg-do=20run=20}=0A+!=20{=20= dg-require-effective-target=20fortran_integer_16=20}=0A+=0A+program=20= selected=0A+=20=20implicit=20none=0A+=0A+=20=20integer,=20parameter=20::=20= k1=20=3D=20selected_logical_kind(128)=0A+=20=20logical(kind=3Dk1)=20::=20= l=0A+=0A+=20=20integer,=20parameter=20::=20k2=20=3D=20= selected_int_kind(25)=0A+=20=20integer(kind=3Dk2)=20::=20i=0A+=0A+=20=20= if=20(storage_size(l)=20/=3D=208=20*=20k1)=20STOP=201=0A+=20=20if=20= (storage_size(i)=20/=3D=208=20*=20k2)=20STOP=202=0A+=20=20if=20= (bit_size(i)=20/=3D=208=20*=20k2)=20STOP=203=0A+=20=20if=20(k1=20/=3D=20= k2)=20STOP=204=0A+=0A+end=20program=0Adiff=20--git=20= a/gcc/testsuite/gfortran.dg/selected_logical_kind_4.f90=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_4.f90=0Anew=20file=20= mode=20100644=0Aindex=2000000000000..0510991b165=0A---=20/dev/null=0A+++=20= b/gcc/testsuite/gfortran.dg/selected_logical_kind_4.f90=0A@@=20-0,0=20= +1,23=20@@=0A+!=20{=20dg-do=20run=20}=0A+=0A+!=20Check=20that=20= SELECTED_LOGICAL_KIND=20works=20in=20a=20non-constant=20context=0A+!=20= (which=20is=20rare=20but=20allowed)=0A+=0A+subroutine=20foo(i,=20j)=0A+=20= =20implicit=20none=0A+=20=20integer=20::=20i,=20j=0A+=20=20if=20= (selected_logical_kind(i)=20/=3D=20j)=20STOP=20j=0A+end=20subroutine=0A+=0A= +program=20selected=0A+=20=20implicit=20none=0A+=0A+=20=20call=20foo(1,=20= 1)=0A+=20=20call=20foo(8,=201)=0A+=20=20call=20foo(9,=202)=0A+=20=20call=20= foo(16,=202)=0A+=20=20call=20foo(17,=204)=0A+=20=20call=20foo(32,=204)=0A= +=20=20call=20foo(33,=208)=0A+=20=20call=20foo(64,=208)=0A+end=20program=0A= diff=20--git=20a/libgfortran/gfortran.map=20b/libgfortran/gfortran.map=0A= index=20db9b86cb183..4a5a037a906=20100644=0A---=20= a/libgfortran/gfortran.map=0A+++=20b/libgfortran/gfortran.map=0A@@=20= -1765,3=20+1765,8=20@@=20GFORTRAN_13=20{=0A=20=20=20=20=20= __ieee_exceptions_MOD_ieee_get_modes;=0A=20=20=20=20=20= __ieee_exceptions_MOD_ieee_set_modes;=0A=20}=20GFORTRAN_12;=0A+=0A= +GFORTRAN_14=20{=0A+=20=20global:=0A+=20=20=20=20= _gfortran_selected_logical_kind;=0A+}=20GFORTRAN_13;=0Adiff=20--git=20= a/libgfortran/intrinsics/selected_int_kind.f90=20= b/libgfortran/intrinsics/selected_int_kind.f90=0Aindex=20= de657b1a264..3d63de3e7dd=20100644=0A---=20= a/libgfortran/intrinsics/selected_int_kind.f90=0A+++=20= b/libgfortran/intrinsics/selected_int_kind.f90=0A@@=20-24,7=20+24,7=20@@=0A= =20=0A=20function=20_gfortran_selected_int_kind=20(r)=0A=20=20=20= implicit=20none=0A-=20=20integer,=20intent=20(in)=20::=20r=0A+=20=20= integer,=20intent(in)=20::=20r=0A=20=20=20integer=20::=20= _gfortran_selected_int_kind=0A=20=20=20integer=20::=20i=0A=20=20=20!=20= Integer=20kind_range=20table=0A@@=20-36,11=20+36,37=20@@=20function=20= _gfortran_selected_int_kind=20(r)=0A=20=20=20include=20= "selected_int_kind.inc"=0A=20=0A=20=20=20do=20i=20=3D=201,=20c=0A-=20=20=20= =20if=20(r=20<=3D=20int_infos=20(i)=20%=20range)=20then=0A-=20=20=20=20=20= =20_gfortran_selected_int_kind=20=3D=20int_infos=20(i)=20%=20kind=0A+=20=20= =20=20if=20(r=20<=3D=20int_infos(i)%range)=20then=0A+=20=20=20=20=20=20= _gfortran_selected_int_kind=20=3D=20int_infos(i)%kind=0A=20=20=20=20=20=20= =20return=0A=20=20=20=20=20end=20if=0A=20=20=20end=20do=0A=20=20=20= _gfortran_selected_int_kind=20=3D=20-1=0A=20=20=20return=0A=20end=20= function=0A+=0A+=0A+!=20At=20this=20time,=20our=20logical=20and=20= integer=20kinds=20are=20the=20same=0A+=0A+function=20= _gfortran_selected_logical_kind=20(bits)=0A+=20=20implicit=20none=0A+=20=20= integer,=20intent(in)=20::=20bits=0A+=20=20integer=20::=20= _gfortran_selected_logical_kind=0A+=20=20integer=20::=20i=0A+=20=20!=20= Integer=20kind_range=20table=0A+=20=20type=20::=20int_info=0A+=20=20=20=20= integer=20::=20kind=0A+=20=20=20=20integer=20::=20range=0A+=20=20end=20= type=20int_info=0A+=0A+=20=20include=20"selected_int_kind.inc"=0A+=0A+=20= =20do=20i=20=3D=201,=20c=0A+=20=20=20=20if=20(bits=20<=3D=208=20*=20= int_infos(i)%kind)=20then=0A+=20=20=20=20=20=20= _gfortran_selected_logical_kind=20=3D=20int_infos(i)%kind=0A+=20=20=20=20= =20=20return=0A+=20=20=20=20end=20if=0A+=20=20end=20do=0A+=20=20= _gfortran_selected_logical_kind=20=3D=20-1=0A+=20=20return=0A+end=20= function=0A--=20=0A2.34.1=0A=0A= --Apple-Mail=_056260F7-1448-4637-A155-22517727F4C3--