mpimd-csc / flexiblas

FlexiBLAS - A BLAS and LAPACK wrapper library with runtime exchangeable backends. This is only a mirror of https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release
https://www.mpi-magdeburg.mpg.de/projects/flexiblas
GNU Lesser General Public License v3.0
36 stars 7 forks source link

Calling issues in ppc64le with GCC 14 #45

Closed Enchufa2 closed 6 months ago

Enchufa2 commented 6 months ago

This was reported for GCC downstream in Fedora, and later was reassigned to FlexiBLAS after further inspection by Jakub Jelinek. See https://bugzilla.redhat.com/show_bug.cgi?id=2264712, particularly Jakub's analysis here.

Enchufa2 commented 6 months ago

Note also that this issue arised from this fix in OpenBLAS: https://github.com/OpenMathLib/OpenBLAS/issues/4475

grisuthedragon commented 6 months ago

It seems that GCC 14 changed something in handling the "hidden" arguments in Fortran. Together some inconsitencies in the usage of CHARACTER in LAPACK this seems to produce the error. The basic rule I used in generating the wrappers is the following:

It seems that this assumption is no longer valid as it is also show in the quick fix. The question is, does this fix break the compatablity with old GCC versions?

If not I can create an upstream fix during the next days.

sharkcz commented 6 months ago

http://fedora.danny.cz/ppc/flexiblas-3.4.1-abi.patch fixed LAPACK-xeigtstz_se2_in and LAPACK-xeigtstz_zsb_in that were failing previously (https://bugzilla.redhat.com/show_bug.cgi?id=2264712#c19), so I think we are on the right track

sharkcz commented 6 months ago

It seems to be safe with regard to previous GCC versions. With the mentioned patch I see no issues when building flexiblas on Fedora 39 with GCC 13.

grisuthedragon commented 6 months ago

@sharkcz That sounds good with the GCC 13. So I will adjust the codegen to cover the "CHARACTER X"-case as well and hopefully having everything ready end of the week.

A quick analysis shows that in the following files/subroutines have a potential risk for the bug:

cbbcsd.f cbdsqr.f cgbbrd.f cgbcon.f cgbrfs.f cgbrfsx.f cgbsvx.f cgbsvxx.f cgbtrs.f cgebak.f cgebal.f cgecon.f cgees.f cgeesx.f cgeev.f cgeevx.f cgels.f cgelst.f cgemlq.f cgemlqt.f cgemqr.f cgemqrt.f cgerfs.f cgerfsx.f cgesdd.f cgesvd.f cgesvdq.f cgesvdx.f cgesvx.f cgesvxx.f cgetrs.f cgetsls.f cggbak.f cggbal.f cgges3.f cgges.f cggesx.f cggev3.f cggev.f cggevx.f cgghd3.f cgghrd.f cggsvd3.f cggsvp3.f cgtcon.f cgtrfs.f cgtsvx.f cgttrs.f chb2st_kernels.f chbev_2stage.f chbevd_2stage.f chbevd.f chbev.f chbevx_2stage.f chbevx.f chbgst.f chbgvd.f chbgv.f chbgvx.f chbtrd.f checon_3.f checon.f checon_rook.f cheequb.f cheev_2stage.f cheevd_2stage.f cheevd.f cheev.f cheevr_2stage.f cheevr.f cheevx_2stage.f cheevx.f chegs2.f chegst.f chegv_2stage.f chegvd.f chegv.f chegvx.f cherfs.f cherfsx.f chesv_aa_2stage.f chesv_aa.f chesv.f chesv_rk.f chesv_rook.f chesvx.f chesvxx.f cheswapr.f chetd2.f chetf2.f chetf2_rk.f chetf2_rook.f chetrd_2stage.f chetrd.f chetrd_he2hb.f chetrf_aa_2stage.f chetrf_aa.f chetrf.f chetrf_rk.f chetrf_rook.f chetri2.f chetri2x.f chetri_3.f chetri_3x.f chetri.f chetri_rook.f chetrs2.f chetrs_3.f chetrs_aa_2stage.f chetrs_aa.f chetrs.f chetrs_rook.f chfrk.f chgeqz.f chpcon.f chpevd.f chpev.f chpevx.f chpgst.f chpgvd.f chpgv.f chpgvx.f chprfs.f chpsv.f chpsvx.f chptrd.f chptrf.f chptri.f chptrs.f chsein.f chseqr.f clacp2.f clacpy.f claein.f cla_gbrcond_c.f cla_gbrcond_x.f cla_gbrfsx_extended.f cla_gercond_c.f cla_gercond_x.f cla_gerfsx_extended.f clagtm.f clahef_aa.f clahef.f clahef_rk.f clahef_rook.f cla_hercond_c.f cla_hercond_x.f cla_herfsx_extended.f clalsd.f clamswlq.f clamtsqr.f clangb.f clange.f clangt.f clanhb.f clanhe.f clanhf.f clanhp.f clanhs.f clanht.f clansb.f clansp.f clansy.f clantb.f clantp.f clantr.f cla_porcond_c.f cla_porcond_x.f cla_porfsx_extended.f claqgb.f claqge.f claqhb.f claqhe.f claqhp.f claqr0.f claqr4.f claqsb.f claqsp.f claqsy.f clarfb.f clarfb_gett.f clarf.f clarft.f clarfx.f clarfy.f clarzb.f clarz.f clarzt.f clascl.f claset.f clasr.f clasyf_aa.f clasyf.f clasyf_rk.f clasyf_rook.f cla_syrcond_c.f cla_syrcond_x.f cla_syrfsx_extended.f clatbs.f clatps.f clatrd.f clatrs3.f clatrs.f clauu2.f clauum.f cpbcon.f cpbequ.f cpbrfs.f cpbstf.f cpbsv.f cpbsvx.f cpbtf2.f cpbtrf.f cpbtrs.f cpftrf.f cpftri.f cpftrs.f cpocon.f cporfs.f cporfsx.f cposv.f cposvx.f cposvxx.f cpotf2.f cpotrf2.f cpotrf.f cpotri.f cpotrs.f cppcon.f cppequ.f cpprfs.f cppsv.f cppsvx.f cpptrf.f cpptri.f cpptrs.f cpstf2.f cpstrf.f cpteqr.f cptrfs.f cptsvx.f cpttrs.f cspcon.f cspmv.f cspr.f csprfs.f cspsv.f cspsvx.f csptrf.f csptri.f csptrs.f cstedc.f cstegr.f cstemr.f csteqr.f csycon_3.f csycon.f csycon_rook.f csyconv.f csyconvf.f csyconvf_rook.f csyequb.f csymv.f csyr.f csyrfs.f csyrfsx.f csysv_aa_2stage.f csysv_aa.f csysv.f csysv_rk.f csysv_rook.f csysvx.f csysvxx.f csyswapr.f csytf2.f csytf2_rk.f csytf2_rook.f csytrf_aa_2stage.f csytrf_aa.f csytrf.f csytrf_rk.f csytrf_rook.f csytri2.f csytri2x.f csytri_3.f csytri_3x.f csytri.f csytri_rook.f csytrs2.f csytrs_3.f csytrs_aa_2stage.f csytrs_aa.f csytrs.f csytrs_rook.f ctbcon.f ctbrfs.f ctbtrs.f ctfsm.f ctftri.f ctfttp.f ctfttr.f ctgevc.f ctgsja.f ctgsna.f ctgsy2.f ctgsyl.f ctpcon.f ctpmlqt.f ctpmqrt.f ctprfb.f ctprfs.f ctptri.f ctptrs.f ctpttf.f ctpttr.f ctrcon.f ctrevc3.f ctrevc.f ctrexc.f ctrrfs.f ctrsen.f ctrsna.f ctrsyl3.f ctrsyl.f ctrti2.f ctrtri.f ctrtrs.f ctrttf.f ctrttp.f cunbdb.f cuncsd2by1.f cuncsd.f cungbr.f cungtr.f cunm22.f cunm2l.f cunm2r.f cunmbr.f cunmhr.f cunml2.f cunmlq.f cunmql.f cunmqr.f cunmr2.f cunmr3.f cunmrq.f cunmrz.f cunmtr.f cupgtr.f cupmtr.f dbbcsd.f dbdsdc.f dbdsqr.f dbdsvdx.f ddisna.f dgbbrd.f dgbcon.f dgbrfs.f dgbrfsx.f dgbsvx.f dgbsvxx.f dgbtrs.f dgebak.f dgebal.f dgecon.f dgees.f dgeesx.f dgeev.f dgeevx.f dgels.f dgelst.f dgemlq.f dgemlqt.f dgemqr.f dgemqrt.f dgerfs.f dgerfsx.f dgesdd.f dgesvd.f dgesvdq.f dgesvdx.f dgesvx.f dgesvxx.f dgetrs.f dgetsls.f dggbak.f dggbal.f dgges3.f dgges.f dggesx.f dggev3.f dggev.f dggevx.f dgghd3.f dgghrd.f dggsvd3.f dggsvp3.f dgtcon.f dgtrfs.f dgtsvx.f dgttrs.f dhgeqz.f dhsein.f dhseqr.f dlacpy.f dlaein.f dla_gbrcond.f dla_gbrfsx_extended.f dla_gercond.f dla_gerfsx_extended.f dlagtm.f dlalsd.f dlamswlq.f dlamtsqr.f dlangb.f dlange.f dlangt.f dlanhs.f dlansb.f dlansf.f dlansp.f dlanst.f dlansy.f dlantb.f dlantp.f dlantr.f dla_porcond.f dla_porfsx_extended.f dlaqgb.f dlaqge.f dlaqr0.f dlaqr4.f dlaqsb.f dlaqsp.f dlaqsy.f dlarfb.f dlarfb_gett.f dlarf.f dlarft.f dlarfx.f dlarfy.f dlarrc.f dlarrd.f dlarre.f dlarzb.f dlarz.f dlarzt.f dlascl.f dlasdq.f dlaset.f dlasr.f dlasrt.f dlasyf_aa.f dlasyf.f dlasyf_rk.f dlasyf_rook.f dla_syrcond.f dla_syrfsx_extended.f dlat2s.f dlatbs.f dlatps.f dlatrd.f dlatrs3.f dlatrs.f dlauu2.f dlauum.f dopgtr.f dopmtr.f dorbdb.f dorcsd2by1.f dorcsd.f dorgbr.f dorgtr.f dorm22.f dorm2l.f dorm2r.f dormbr.f dormhr.f dorml2.f dormlq.f dormql.f dormqr.f dormr2.f dormr3.f dormrq.f dormrz.f dormtr.f dpbcon.f dpbequ.f dpbrfs.f dpbstf.f dpbsv.f dpbsvx.f dpbtf2.f dpbtrf.f dpbtrs.f dpftrf.f dpftri.f dpftrs.f dpocon.f dporfs.f dporfsx.f dposv.f dposvx.f dposvxx.f dpotf2.f dpotrf2.f dpotrf.f dpotri.f dpotrs.f dppcon.f dppequ.f dpprfs.f dppsv.f dppsvx.f dpptrf.f dpptri.f dpptrs.f dpstf2.f dpstrf.f dpteqr.f dptsvx.f dsb2st_kernels.f dsbev_2stage.f dsbevd_2stage.f dsbevd.f dsbev.f dsbevx_2stage.f dsbevx.f dsbgst.f dsbgvd.f dsbgv.f dsbgvx.f dsbtrd.f dsfrk.f dspcon.f dspevd.f dspev.f dspevx.f dspgst.f dspgvd.f dspgv.f dspgvx.f dsposv.f dsprfs.f dspsv.f dspsvx.f dsptrd.f dsptrf.f dsptri.f dsptrs.f dstebz.f dstedc.f dstegr.f dstemr.f dsteqr.f dstevd.f dstev.f dstevr.f dstevx.f dsycon_3.f dsycon.f dsycon_rook.f dsyconv.f dsyconvf.f dsyconvf_rook.f dsyequb.f dsyev_2stage.f dsyevd_2stage.f dsyevd.f dsyev.f dsyevr_2stage.f dsyevr.f dsyevx_2stage.f dsyevx.f dsygs2.f dsygst.f dsygv_2stage.f dsygvd.f dsygv.f dsygvx.f dsyrfs.f dsyrfsx.f dsysv_aa_2stage.f dsysv_aa.f dsysv.f dsysv_rk.f dsysv_rook.f dsysvx.f dsysvxx.f dsyswapr.f dsytd2.f dsytf2.f dsytf2_rk.f dsytf2_rook.f dsytrd_2stage.f dsytrd.f dsytrd_sy2sb.f dsytrf_aa_2stage.f dsytrf_aa.f dsytrf.f dsytrf_rk.f dsytrf_rook.f dsytri2.f dsytri2x.f dsytri_3.f dsytri_3x.f dsytri.f dsytri_rook.f dsytrs2.f dsytrs_3.f dsytrs_aa_2stage.f dsytrs_aa.f dsytrs.f dsytrs_rook.f dtbcon.f dtbrfs.f dtbtrs.f dtfsm.f dtftri.f dtfttp.f dtfttr.f dtgevc.f dtgsja.f dtgsna.f dtgsy2.f dtgsyl.f dtpcon.f dtpmlqt.f dtpmqrt.f dtprfb.f dtprfs.f dtptri.f dtptrs.f dtpttf.f dtpttr.f dtrcon.f dtrevc3.f dtrevc.f dtrexc.f dtrrfs.f dtrsen.f dtrsna.f dtrsyl3.f dtrsyl.f dtrti2.f dtrtri.f dtrtrs.f dtrttf.f dtrttp.f iladiag.f ilaenv.f ilaprec.f ilatrans.f ilauplo.f iparmq.f sbbcsd.f sbdsdc.f sbdsqr.f sbdsvdx.f sdisna.f sgbbrd.f sgbcon.f sgbrfs.f sgbrfsx.f sgbsvx.f sgbsvxx.f sgbtrs.f sgebak.f sgebal.f sgecon.f sgees.f sgeesx.f sgeev.f sgeevx.f sgels.f sgelst.f sgemlq.f sgemlqt.f sgemqr.f sgemqrt.f sgerfs.f sgerfsx.f sgesdd.f sgesvd.f sgesvdq.f sgesvdx.f sgesvx.f sgesvxx.f sgetrs.f sgetsls.f sggbak.f sggbal.f sgges3.f sgges.f sggesx.f sggev3.f sggev.f sggevx.f sgghd3.f sgghrd.f sggsvd3.f sggsvp3.f sgtcon.f sgtrfs.f sgtsvx.f sgttrs.f shgeqz.f shsein.f shseqr.f slacpy.f slaein.f sla_gbrcond.f sla_gbrfsx_extended.f sla_gercond.f sla_gerfsx_extended.f slagtm.f slalsd.f slamswlq.f slamtsqr.f slangb.f slange.f slangt.f slanhs.f slansb.f slansf.f slansp.f slanst.f slansy.f slantb.f slantp.f slantr.f sla_porcond.f sla_porfsx_extended.f slaqgb.f slaqge.f slaqr0.f slaqr4.f slaqsb.f slaqsp.f slaqsy.f slarfb.f slarfb_gett.f slarf.f slarft.f slarfx.f slarfy.f slarrc.f slarrd.f slarre.f slarzb.f slarz.f slarzt.f slascl.f slasdq.f slaset.f slasr.f slasrt.f slasyf_aa.f slasyf.f slasyf_rk.f slasyf_rook.f sla_syrcond.f sla_syrfsx_extended.f slatbs.f slatps.f slatrd.f slatrs3.f slatrs.f slauu2.f slauum.f sopgtr.f sopmtr.f sorbdb.f sorcsd2by1.f sorcsd.f sorgbr.f sorgtr.f sorm22.f sorm2l.f sorm2r.f sormbr.f sormhr.f sorml2.f sormlq.f sormql.f sormqr.f sormr2.f sormr3.f sormrq.f sormrz.f sormtr.f spbcon.f spbequ.f spbrfs.f spbstf.f spbsv.f spbsvx.f spbtf2.f spbtrf.f spbtrs.f spftrf.f spftri.f spftrs.f spocon.f sporfs.f sporfsx.f sposv.f sposvx.f sposvxx.f spotf2.f spotrf2.f spotrf.f spotri.f spotrs.f sppcon.f sppequ.f spprfs.f sppsv.f sppsvx.f spptrf.f spptri.f spptrs.f spstf2.f spstrf.f spteqr.f sptsvx.f ssb2st_kernels.f ssbev_2stage.f ssbevd_2stage.f ssbevd.f ssbev.f ssbevx_2stage.f ssbevx.f ssbgst.f ssbgvd.f ssbgv.f ssbgvx.f ssbtrd.f ssfrk.f sspcon.f sspevd.f sspev.f sspevx.f sspgst.f sspgvd.f sspgv.f sspgvx.f ssprfs.f sspsv.f sspsvx.f ssptrd.f ssptrf.f ssptri.f ssptrs.f sstebz.f sstedc.f sstegr.f sstemr.f ssteqr.f sstevd.f sstev.f sstevr.f sstevx.f ssycon_3.f ssycon.f ssycon_rook.f ssyconv.f ssyconvf.f ssyconvf_rook.f ssyequb.f ssyev_2stage.f ssyevd_2stage.f ssyevd.f ssyev.f ssyevr_2stage.f ssyevr.f ssyevx_2stage.f ssyevx.f ssygs2.f ssygst.f ssygv_2stage.f ssygvd.f ssygv.f ssygvx.f ssyrfs.f ssyrfsx.f ssysv_aa_2stage.f ssysv_aa.f ssysv.f ssysv_rk.f ssysv_rook.f ssysvx.f ssysvxx.f ssyswapr.f ssytd2.f ssytf2.f ssytf2_rk.f ssytf2_rook.f ssytrd_2stage.f ssytrd.f ssytrd_sy2sb.f ssytrf_aa_2stage.f ssytrf_aa.f ssytrf.f ssytrf_rk.f ssytrf_rook.f ssytri2.f ssytri2x.f ssytri_3.f ssytri_3x.f ssytri.f ssytri_rook.f ssytrs2.f ssytrs_3.f ssytrs_aa_2stage.f ssytrs_aa.f ssytrs.f ssytrs_rook.f stbcon.f stbrfs.f stbtrs.f stfsm.f stftri.f stfttp.f stfttr.f stgevc.f stgsja.f stgsna.f stgsy2.f stgsyl.f stpcon.f stpmlqt.f stpmqrt.f stprfb.f stprfs.f stptri.f stptrs.f stpttf.f stpttr.f strcon.f strevc3.f strevc.f strexc.f strrfs.f strsen.f strsna.f strsyl3.f strsyl.f strti2.f strtri.f strtrs.f strttf.f strttp.f zbbcsd.f zbdsqr.f zcposv.f zgbbrd.f zgbcon.f zgbrfs.f zgbrfsx.f zgbsvx.f zgbsvxx.f zgbtrs.f zgebak.f zgebal.f zgecon.f zgees.f zgeesx.f zgeev.f zgeevx.f zgels.f zgelst.f zgemlq.f zgemlqt.f zgemqr.f zgemqrt.f zgerfs.f zgerfsx.f zgesdd.f zgesvd.f zgesvdq.f zgesvdx.f zgesvx.f zgesvxx.f zgetrs.f zgetsls.f zggbak.f zggbal.f zgges3.f zgges.f zggesx.f zggev3.f zggev.f zggevx.f zgghd3.f zgghrd.f zggsvd3.f zggsvp3.f zgtcon.f zgtrfs.f zgtsvx.f zgttrs.f zhb2st_kernels.f zhbev_2stage.f zhbevd_2stage.f zhbevd.f zhbev.f zhbevx_2stage.f zhbevx.f zhbgst.f zhbgvd.f zhbgv.f zhbgvx.f zhbtrd.f zhecon_3.f zhecon.f zhecon_rook.f zheequb.f zheev_2stage.f zheevd_2stage.f zheevd.f zheev.f zheevr_2stage.f zheevr.f zheevx_2stage.f zheevx.f zhegs2.f zhegst.f zhegv_2stage.f zhegvd.f zhegv.f zhegvx.f zherfs.f zherfsx.f zhesv_aa_2stage.f zhesv_aa.f zhesv.f zhesv_rk.f zhesv_rook.f zhesvx.f zhesvxx.f zheswapr.f zhetd2.f zhetf2.f zhetf2_rk.f zhetf2_rook.f zhetrd_2stage.f zhetrd.f zhetrd_he2hb.f zhetrf_aa_2stage.f zhetrf_aa.f zhetrf.f zhetrf_rk.f zhetrf_rook.f zhetri2.f zhetri2x.f zhetri_3.f zhetri_3x.f zhetri.f zhetri_rook.f zhetrs2.f zhetrs_3.f zhetrs_aa_2stage.f zhetrs_aa.f zhetrs.f zhetrs_rook.f zhfrk.f zhgeqz.f zhpcon.f zhpevd.f zhpev.f zhpevx.f zhpgst.f zhpgvd.f zhpgv.f zhpgvx.f zhprfs.f zhpsv.f zhpsvx.f zhptrd.f zhptrf.f zhptri.f zhptrs.f zhsein.f zhseqr.f zlacp2.f zlacpy.f zlaein.f zla_gbrcond_c.f zla_gbrcond_x.f zla_gbrfsx_extended.f zla_gercond_c.f zla_gercond_x.f zla_gerfsx_extended.f zlagtm.f zlahef_aa.f zlahef.f zlahef_rk.f zlahef_rook.f zla_hercond_c.f zla_hercond_x.f zla_herfsx_extended.f zlalsd.f zlamswlq.f zlamtsqr.f zlangb.f zlange.f zlangt.f zlanhb.f zlanhe.f zlanhf.f zlanhp.f zlanhs.f zlanht.f zlansb.f zlansp.f zlansy.f zlantb.f zlantp.f zlantr.f zla_porcond_c.f zla_porcond_x.f zla_porfsx_extended.f zlaqgb.f zlaqge.f zlaqhb.f zlaqhe.f zlaqhp.f zlaqr0.f zlaqr4.f zlaqsb.f zlaqsp.f zlaqsy.f zlarfb.f zlarfb_gett.f zlarf.f zlarft.f zlarfx.f zlarfy.f zlarzb.f zlarz.f zlarzt.f zlascl.f zlaset.f zlasr.f zlasyf_aa.f zlasyf.f zlasyf_rk.f zlasyf_rook.f zla_syrcond_c.f zla_syrcond_x.f zla_syrfsx_extended.f zlat2c.f zlatbs.f zlatps.f zlatrd.f zlatrs3.f zlatrs.f zlauu2.f zlauum.f zpbcon.f zpbequ.f zpbrfs.f zpbstf.f zpbsv.f zpbsvx.f zpbtf2.f zpbtrf.f zpbtrs.f zpftrf.f zpftri.f zpftrs.f zpocon.f zporfs.f zporfsx.f zposv.f zposvx.f zposvxx.f zpotf2.f zpotrf2.f zpotrf.f zpotri.f zpotrs.f zppcon.f zppequ.f zpprfs.f zppsv.f zppsvx.f zpptrf.f zpptri.f zpptrs.f zpstf2.f zpstrf.f zpteqr.f zptrfs.f zptsvx.f zpttrs.f zspcon.f zspmv.f zspr.f zsprfs.f zspsv.f zspsvx.f zsptrf.f zsptri.f zsptrs.f zstedc.f zstegr.f zstemr.f zsteqr.f zsycon_3.f zsycon.f zsycon_rook.f zsyconv.f zsyconvf.f zsyconvf_rook.f zsyequb.f zsymv.f zsyr.f zsyrfs.f zsyrfsx.f zsysv_aa_2stage.f zsysv_aa.f zsysv.f zsysv_rk.f zsysv_rook.f zsysvx.f zsysvxx.f zsyswapr.f zsytf2.f zsytf2_rk.f zsytf2_rook.f zsytrf_aa_2stage.f zsytrf_aa.f zsytrf.f zsytrf_rk.f zsytrf_rook.f zsytri2.f zsytri2x.f zsytri_3.f zsytri_3x.f zsytri.f zsytri_rook.f zsytrs2.f zsytrs_3.f zsytrs_aa_2stage.f zsytrs_aa.f zsytrs.f zsytrs_rook.f ztbcon.f ztbrfs.f ztbtrs.f ztfsm.f ztftri.f ztfttp.f ztfttr.f ztgevc.f ztgsja.f ztgsna.f ztgsy2.f ztgsyl.f ztpcon.f ztpmlqt.f ztpmqrt.f ztprfb.f ztprfs.f ztptri.f ztptrs.f ztpttf.f ztpttr.f ztrcon.f ztrevc3.f ztrevc.f ztrexc.f ztrrfs.f ztrsen.f ztrsna.f ztrsyl3.f ztrsyl.f ztrti2.f ztrtri.f ztrtrs.f ztrttf.f ztrttp.f zunbdb.f zuncsd2by1.f zuncsd.f zungbr.f zungtr.f zunm22.f zunm2l.f zunm2r.f zunmbr.f zunmhr.f zunml2.f zunmlq.f zunmql.f zunmqr.f zunmr2.f zunmr3.f zunmrq.f zunmrz.f zunmtr.f zupgtr.f zupmtr.f
jakubjelinek commented 6 months ago

See also https://gcc.gnu.org/PR100799

grisuthedragon commented 6 months ago

@jakubjelinek Thanks for pointing this out. Disussions in other pbug trackers than here are mostly out of my scope and I do not realize that they exists in most cases.

jakubjelinek commented 6 months ago

Note, not too old gfortran with -fc-prototypes-external option can dump C prototypes from Fortran external procedures. For

subroutine foo (a, b, c, d, e, f, g, h)
  character a
  integer b, c, d, e, f, g, h
end subroutine

I can see even GCC 4.1 (2005-ish) to pass 9 arguments foo (a, b, c, d, e, f, g, h, _a) In e.g. GCC 4.5 dumped with more details like foo (character(kind=1)[1:1] & a, integer(kind=4) & b, integer(kind=4) & c, integer(kind=4) & d, integer(kind=4) & e, integer(kind=4) & f, integer(kind=4) & g, integer(kind=4) & h, integer(kind=4) _a) to show the actual types (in a mix of Fortran/C++, basic types printed Fortran-ish, but the arrays and references printed C++ish). That also shows the only known ABI change in there which was in GCC 7+ that flexiblas already takes into account, that the hidden lengths were before 32-bit integers and now are size_t. The above is what one gets e.g. from -fdump-tree-gimple

grisuthedragon commented 6 months ago

Should be fixed in v3.4.2-rc1.

sharkcz commented 6 months ago

right, it looks good now - 100% tests passed, 0 tests failed out of 115