aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
AgeCommit message (Collapse)AuthorFilesLines
3 hoursImplement -fexternal-blas64 option.Thomas Koenig6-15/+51
Libraries like Intel MKL use 64-bit integers in their API, but gfortran up to now only provides external BLAS for matmul with 32-bit integers. This straightforward patch provides a new option -fexternal-blas64 to remedy that situation. gcc/fortran/ChangeLog: * frontend-passes.cc (optimize_namespace): Handle flag_external_blas64. (call_external_blas): If flag_external_blas is set, use gfc_integer_4_kind as the argument kind, gfc_integer_8_kind otherwise. * gfortran.h (gfc_integer_8_kind): Define. * invoke.texi: Document -fexternal-blas64. * lang.opt: Add -fexternal-blas64. * lang.opt.urls: Regenerated. * options.cc (gfc_post_options): -fexternal-blas is incompatible with -fexternal-blas64. gcc/testsuite/ChangeLog: * gfortran.dg/matmul_blas_3.f90: New test.
43 hoursDaily bump.GCC Administrator1-0/+11
3 daysFortran: Dependency check in PDT specification assignments [PR83763]Paul Thomas2-22/+38
2025-09-15 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/83763 * trans-decl.cc (gfc_trans_deferred_vars): Ensure that the parameterized components of PDTs that do not have allocatable components are deallocated on leaving scope. * trans-expr.cc (gfc_trans_assignment_1): Do a dependency check on PDT assignments. If there is a dependency between lhs and rhs, deallocate the lhs parameterized components after the rhs has been evaluated. gcc/testsuite/ PR fortran/83763 * gfortran.dg/pdt_46.f03: New test.
3 daysDaily bump.GCC Administrator1-0/+21
3 daysfortran: implement conditional expression for fortran 2023Yuao Ma9-18/+388
This patch adds support for conditional expressions in Fortran 2023 for a limited set of types (logical, numerical), and also includes limited support for conditional arguments without `.nil.` support. gcc/fortran/ChangeLog: * dump-parse-tree.cc (show_expr): Add support for EXPR_CONDITIONAL. * expr.cc (gfc_get_conditional_expr): Add cond-expr constructor. (gfc_copy_expr, free_expr0, gfc_is_constant_expr, simplify_conditional, gfc_simplify_expr, gfc_check_init_expr, check_restricted, gfc_traverse_expr): Add support for EXPR_CONDITIONAL. * frontend-passes.cc (gfc_expr_walker): Ditto. * gfortran.h (enum expr_t): Add EXPR_CONDITIONAL. (gfc_get_operator_expr): Format fix. (gfc_get_conditional_expr): New decl. * matchexp.cc (match_conditional, match_primary): Parsing for EXPR_CONDITIONAL. * module.cc (mio_expr): Add support for EXPR_CONDITIONAL. * resolve.cc (resolve_conditional, gfc_resolve_expr): Ditto. * trans-array.cc (gfc_walk_conditional_expr, gfc_walk_subexpr): Ditto. * trans-expr.cc (gfc_conv_conditional_expr): Codegen for EXPR_CONDITIONAL. (gfc_apply_interface_mapping_to_expr, gfc_conv_expr, gfc_conv_expr_reference): Add support for EXPR_CONDITIONAL. gcc/testsuite/ChangeLog: * gfortran.dg/conditional_1.f90: New test. * gfortran.dg/conditional_2.f90: New test. * gfortran.dg/conditional_3.f90: New test. * gfortran.dg/conditional_4.f90: New test. * gfortran.dg/conditional_5.f90: New test. * gfortran.dg/conditional_6.f90: New test. * gfortran.dg/conditional_7.f90: New test. * gfortran.dg/conditional_8.f90: New test. * gfortran.dg/conditional_9.f90: New test.
6 daysDaily bump.GCC Administrator1-0/+6
6 daysFortran: fix assignment to allocatable scalar polymorphic component [PR121616]Harald Anlauf1-0/+2
PR fortran/121616 gcc/fortran/ChangeLog: * primary.cc (gfc_variable_attr): Properly set dimension attribute from a component ref. gcc/testsuite/ChangeLog: * gfortran.dg/alloc_comp_assign_17.f90: New test.
8 daysDaily bump.GCC Administrator1-0/+34
8 daysFortran: fix bootstrap with -Werror=maybe-uninitializedHarald Anlauf1-2/+3
gcc/fortran/ChangeLog: * trans-intrinsic.cc (conv_intrinsic_fstat_lstat_stat_sub): Init some variables.
8 daysFortran: make STAT/LSTAT/FSTAT intrinsics generic [PR82480]Harald Anlauf6-38/+245
PR fortran/82480 gcc/fortran/ChangeLog: * check.cc (error_unsupported_kind): Helper function to report an unsupported kind of an argument. (check_minrange4): Helper function to report if an integer variable does not have a decimal range of at least four. (gfc_check_fstat): Adjust checks for generalization of instrinsic function FSTAT. (gfc_check_fstat_sub): Likewise for subroutine FSTAT. (gfc_check_stat): Likewise for functio STAT. (gfc_check_stat_sub): Likewise for subroutine STAT. * intrinsic.texi: Document generalized versions of intrinsics STAT/LSTAT/FSTAT. * iresolve.cc (gfc_resolve_stat): STAT function result shall have the same kind as the VALUES argument. (gfc_resolve_lstat): Likewise for LSTAT. (gfc_resolve_fstat): Likewise for FSTAT. (gfc_resolve_stat_sub): Resolve proper library subroutine for STAT. (gfc_resolve_lstat_sub): Likewise for LSTAT. * trans-decl.cc (gfc_build_intrinsic_function_decls): Declare fndecls for required subroutines in runtine library. * trans-intrinsic.cc (conv_intrinsic_fstat_lstat_stat_sub): Emit runtime wrapper code for the library functions, taking care of possible kind conversion of the optional STATUS argument of the subroutine versions of the intrinsics. (gfc_conv_intrinsic_subroutine): Use it. * trans.h (GTY): Declare prototypes. gcc/testsuite/ChangeLog: * gfortran.dg/stat_3.f90: Extend argument checking. * gfortran.dg/stat_4.f90: New test.
9 daysDaily bump.GCC Administrator1-0/+7
10 daysFortran: Correct variable typespec in PDT specification exprs [PR84008]Paul Thomas1-0/+3
2025-09-08 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/84008 * decl.cc (insert_parameter_exprs): Correct the typespec of new variable declarations, where the type is set to BT_PROCEDURE as a precaution for resolution of the whole program unit. gcc/testsuite/ PR fortran/84008 * gfortran.dg/pdt_45.f03: New test.
11 daysDaily bump.GCC Administrator1-0/+8
11 daysFortran: Implement correct form of PDT constructors [PR84119]Paul Thomas1-22/+44
2025-09-06 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/84119 * resolve.cc (reset_array_ref_to_scalar): New function using chunk broken out from gfc_resolve_ref. (gfc_resolve_ref): Call the new function, the first time for PDT type parameters and the second time for LEN inquiry refs. gcc/testsuite/ PR fortran/84119 * gfortran.dg/pdt_20.f03: Modify to deal with scalar type parm.
12 daysDaily bump.GCC Administrator1-0/+19
13 daysFortran: Check PDT parameters are of integer type [PR84432, PR114815]Paul Thomas2-2/+64
2025-09-04 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/84432 PR fortran/114815 * expr.cc (gfc_check_assign_symbol): Check that components in a PDT with a default initializer have type and length parameters that reduce to constant integer expressions. * trans-expr.cc (gfc_trans_assignment_1): Parameterized components cannot have default initializers so they must be allocated after initialization. gcc/testsuite/ PR fortran/84432 PR fortran/114815 * gfortran.dg/pdt_26.f03: Update with default no initializer. * gfortran.dg/pdt_27.f03: Change to test non-conforming initializers.
13 daysFortran: Check PDT parameters are of integer type [PR83762, PR102457]Paul Thomas1-0/+10
2025-09-05 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/83762 PR fortran/102457 * decl.cc (gfc_get_pdt_instance): Check that variable PDT parm expressions are of type integer. Note that the symbol must be tested since the expression often appears as BT_PROCEDURE. gcc/testsuite/ PR fortran/83762 PR fortran/102457 * gfortran.dg/pdt_44.f03: New test. * gfortran.dg/pr95090.f90: Give the PDT parameter a value to suppress the type error.
14 daysDaily bump.GCC Administrator1-0/+7
2025-09-03Fortran: fix TRANSFER with rank 1 unlimited polymorphic SOURCE [PR121263]Harald Anlauf1-1/+6
PR fortran/121263 gcc/fortran/ChangeLog: * trans-intrinsic.cc (gfc_conv_intrinsic_transfer): For an unlimited polymorphic SOURCE to TRANSFER use saved descriptor if possible. gcc/testsuite/ChangeLog: * gfortran.dg/transfer_class_5.f90: New test.
2025-09-03Daily bump.GCC Administrator1-0/+18
2025-09-02Fortran: Allow PDT parameterized procedure pointer components [PR89707]Paul Thomas2-0/+20
2025-09-02 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/89707 * decl.cc (gfc_get_pdt_instance): Copy the typebound procedure field from the PDT template. If the template interface has kind=0, provide the new instance with an interface with a type spec that points to that of the parameterized component. (match_ppc_decl): When 'saved_kind_expr' this is a PDT and the expression should be copied to the component kind_expr. * gfortran.h: Define gfc_get_tbp. gcc/testsuite/ PR fortran/89707 * gfortran.dg/pdt_43.f03: New test.
2025-09-02Fortran: Handle PDTs correctly with unlimited selector [PR87669]Paul Thomas1-1/+4
2025-09-02 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/87669 * expr.cc (gfc_spec_list_type): If no LEN components are seen, unconditionally return 'SPEC_ASSUMED'. This suppresses an invalid error in match.cc(gfc_match_type_is). gcc/testsuite/ PR fortran/87669 * gfortran.dg/pdt_42.f03: New test. libgfortran/ PR fortran/87669 * intrinsics/extends_type_of.c (is_extension_of): Use the vptr rather than the hash value to identify the types.
2025-09-02Daily bump.GCC Administrator1-0/+9
2025-09-01Fortran: truncate constant string passed to character,value dummy [PR121727]Harald Anlauf1-0/+34
PR fortran/121727 gcc/fortran/ChangeLog: * trans-expr.cc (gfc_const_length_character_type_p): New helper function. (conv_dummy_value): Use it to determine if a character actual argument has a constant length. If a character actual argument is constant and longer than the dummy, truncate it at compile time. gcc/testsuite/ChangeLog: * gfortran.dg/value_10.f90: New test.
2025-09-01Daily bump.GCC Administrator1-0/+10
2025-08-31Fortran: Pass PDTs to dummies with VALUE attribute [PR99709]Paul Thomas2-1/+25
2025-08-31 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/99709 * trans-array.cc (structure_alloc_comps): For the case COPY_ALLOC_COMP, do a deep copy of non-allocatable PDT arrays Suppress the use of 'duplicate_allocatable' for PDT arrays. * trans-expr.cc (conv_dummy_value): When passing to a PDT dummy with the VALUE attribute, do a deep copy to ensure that parameterized components are reallocated. gcc/testsuite/ PR fortran/99709 * gfortran.dg/pdt_41.f03: New test.
2025-08-30Daily bump.GCC Administrator1-0/+17
2025-08-29Fortran: improve compile-time checking of character dummy arguments [PR93330]Harald Anlauf1-33/+123
PR fortran/93330 gcc/fortran/ChangeLog: * interface.cc (get_sym_storage_size): Add argument size_known to indicate that the storage size could be successfully determined. (get_expr_storage_size): Likewise. (gfc_compare_actual_formal): Use them to handle zero-sized dummy and actual arguments. If a character formal argument has the pointer or allocatable attribute, or is an array that is not assumed or explicit size, we generate an error by default unless -std=legacy is specified, which falls back to just giving a warning. If -Wcharacter-truncation is given, warn on a character actual argument longer than the dummy. Generate an error for too short scalar character arguments if -std=f* is given instead of just a warning. gcc/testsuite/ChangeLog: * gfortran.dg/argument_checking_15.f90: Adjust dg-pattern. * gfortran.dg/bounds_check_strlen_7.f90: Add dg-pattern. * gfortran.dg/char_length_3.f90: Adjust options. * gfortran.dg/whole_file_24.f90: Add dg-pattern. * gfortran.dg/whole_file_29.f90: Likewise. * gfortran.dg/argument_checking_27.f90: New test.
2025-08-29Daily bump.GCC Administrator1-0/+27
2025-08-28Fortran: Constructors with PDT components did not work [PR82843]Paul Thomas2-0/+41
2025-08-28 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/82843 * intrinsic.cc (gfc_convert_type_warn): If the 'from_ts' is a PDT instance, copy the derived type to the target ts. * resolve.cc (gfc_resolve_ref): A PDT component in a component reference can be that of the pdt_template. Unconditionally use component of the PDT instance to ensure that the backend_decl is set during translation. Likewise if a component is encountered that is a PDT template type, use the component parmeters to convert to the correct PDT instance. gcc/testsuite/ PR fortran/82843 * gfortran.dg/pdt_40.f03: New test.
2025-08-28Fortran: Implement correct form of PDT constructors [PR82205]Paul Thomas4-1/+90
2025-08-28 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/82205 * decl.cc (gfc_get_pdt_instance): Copy the default initializer for components that are not PDT parameters or parameterized. If any component is a pointer or allocatable set the attributes 'pointer_comp' or 'alloc_comp' of the new PDT instance. * primary.cc (gfc_match_rvalue): Implement the correct form of PDT constructors with 'name (type parms)(component values)'. * trans-array.cc (structure_alloc_comps): Apply scalar default initializers. Array initializers await the coming change in PDT representation. * trans-io.cc (transfer_expr): Do not output the type parms of a PDT in list directed output. gcc/testsuite/ PR fortran/82205 * gfortran.dg/pdt_22.f03: Use the correct for PDT constructors. * gfortran.dg/pdt_23.f03: Likewise. * gfortran.dg/pdt_3.f03: Likewise.
2025-08-28Daily bump.GCC Administrator1-0/+7
2025-08-27Fortran: H edit descriptor error with -std=f95Jerry DeLisle1-6/+9
PR fortran/114611 gcc/fortran/ChangeLog: * io.cc: Issue an error on use of the H descriptor in a format with -std=f95 or higher. Otherwise, issue a warning. gcc/testsuite/ChangeLog: * gfortran.dg/aliasing_dummy_1.f90: Accommodate errors and warnings as needed. * gfortran.dg/eoshift_8.f90: Likewise. * gfortran.dg/g77/f77-edit-h-out.f: Likewise. * gfortran.dg/hollerith_1.f90: Likewise. * gfortran.dg/io_constraints_1.f90: Likewise. * gfortran.dg/io_constraints_2.f90: Likewise. * gfortran.dg/longline.f: Likewise. * gfortran.dg/pr20086.f90: Likewise. * gfortran.dg/unused_artificial_dummies_1.f90: Likewise. * gfortran.dg/x_slash_1.f: Likewise.
2025-08-27Daily bump.GCC Administrator1-0/+11
2025-08-26OpenMP: give error when variant is the same as the base function [PR118839]Sandra Loosemore1-0/+6
As noted in the issue, the C++ front end has deeper problems: it's supposed to do the name lookup of the variant at the call site but is instead doing it when parsing the "declare variant" construct, before registering the decl for the base function. The C++ part of the patch is a band-aid to catch the case where there is a previous declaration of the function and it doesn't give an undefined symbol error instead. Some real solution ought to be included as part of fixing PR118791. gcc/c/ PR middle-end/118839 * c-parser.cc (c_finish_omp_declare_variant): Error if variant is the same as base. gcc/cp/ PR middle-end/118839 * decl.cc (omp_declare_variant_finalize_one): Error if variant is the same as base. gcc/fortran/ PR middle-end/118839 * trans-openmp.cc (gfc_trans_omp_declare_variant): Error if variant is the same as base. gcc/testsuite/ PR middle-end/118839 * gcc.dg/gomp/declare-variant-3.c: New. * gfortran.dg/gomp/declare-variant-22.f90: New.
2025-08-26OpenMP: Improve front-end error-checking for "declare variant"Sandra Loosemore1-6/+2
This patch fixes a number of problems with parser error checking of "declare variant", especially in the C front end. The new C testcase unprototyped-variant.c added by this patch used to ICE when gimplifying the call site, at least in part because the variant was being recorded even after it was diagnosed as invalid. There was also a large block of dead code in the C front end that was supposed to fix up an unprototyped declaration of a variant function to match the base function declaration, that was never executed because it was nested in a conditional that could never be true. I've fixed those problems by rearranging the code and only recording the variant if it passes the correctness checks. I also tried to add some comments and re-work some particularly confusing bits of code, so that it's easier to understand. The OpenMP specification doesn't say what the behavior of "declare variant" with the "append_args" clause should be when the base function is unprototyped. The additional arguments are supposed to be inserted between the last fixed argument of the base function and any varargs, but without a prototype, for any given call we have no idea which arguments are fixed and which are varargs, and therefore no idea where to insert the additional arguments. This used to trigger some other diagnostics (which one depending on whether the variant was also unprototyped), but I thought it was better to just reject this with an explicit "sorry". Finally, I also observed that a missing "match" clause was only rejected if "append_args" or "adjust_args" was present. Per the spec, "match" has the "required" property, so if it's missing it should be diagnosed unconditionally. The C++ and Fortran front ends had the same issue so I fixed this one there too. gcc/c/ChangeLog * c-parser.cc (c_finish_omp_declare_variant): Rework diagnostic code. Do not record variant if there are errors. Make check for a missing "match" clause unconditional. gcc/cp/ChangeLog * parser.cc (cp_finish_omp_declare_variant): Structure diagnostic code similarly to C front end. Make check for a missing "match" clause unconditional. gcc/fortran/ChangeLog * openmp.cc (gfc_match_omp_declare_variant): Make check for a missing "match" clause unconditional. gcc/testsuite/ChangeLog * c-c++-common/gomp/append-args-1.c: Adjust expected output. * g++.dg/gomp/adjust-args-1.C: Likewise. * g++.dg/gomp/adjust-args-3.C: Likewise. * gcc.dg/gomp/adjust-args-1.c: Likewise: * gcc.dg/gomp/append-args-1.c: Likewise. * gcc.dg/gomp/unprototyped-variant.c: New. * gfortran.dg/gomp/adjust-args-1.f90: Adjust expected output. * gfortran.dg/gomp/append_args-1.f90: Likewise.
2025-08-22Daily bump.GCC Administrator1-0/+17
2025-08-21Fortran: Fix NULL pointer issue.Steven G. Kargl1-2/+5
PR fortran/121627 gcc/fortran/ChangeLog: * module.cc (create_int_parameter_array): Avoid NULL pointer dereference and enhance error message. gcc/testsuite/ChangeLog: * gfortran.dg/pr121627.f90: New test.
2025-08-21Fortran: gfortran PDT component access [PR84122, PR85942]Paul Thomas2-2/+49
2025-08-21 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/84122 * parse.cc (parse_derived): PDT type parameters are not allowed an explicit access specification and must appear before a PRIVATE statement. If a PRIVATE statement is seen, mark all the other components as PRIVATE. PR fortran/85942 * simplify.cc (get_kind): Convert a PDT KIND component into a specification expression using the default initializer. gcc/testsuite/ PR fortran/84122 * gfortran.dg/pdt_38.f03: New test. PR fortran/85942 * gfortran.dg/pdt_39.f03: New test.
2025-08-21Daily bump.GCC Administrator1-0/+6
2025-08-19Fortran: Clean up and fix some refs.Jerry DeLisle1-51/+51
gcc/fortran/ChangeLog: * intrinsic.texi: Correct the example given for FRACTION. Move the TEAM_NUMBER section to after the TANPI to align with the order gven in the index.
2025-08-17Daily bump.GCC Administrator1-0/+8
2025-08-16fortran: Set DECL_TLS_MODEL after processing a variableH.J. Lu2-10/+11
Call set_decl_tls_model only after a variable has been fully processed, not in the middle of processing it. gcc/fortran/ PR fortran/107421 * trans-common.cc (build_common_decl): Call set_decl_tls_model after processing a variable. * trans-decl.cc (gfc_finish_var_decl): Likewise. (get_proc_pointer_decl): Likewise. gcc/testsuite/ PR fortran/107421 * gfortran.dg/gomp/pr107421.f90: New test. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-14Daily bump.GCC Administrator1-0/+5
2025-08-13Fortran: Use associated TBP subroutine not found [PR89092]Paul Thomas1-1/+1
2025-08-13 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/89092 * resolve.cc (was_declared): Add subroutine attribute. gcc/testsuite/ PR fortran/89092 * gfortran.dg/pr89092.f90: New test.
2025-08-13Daily bump.GCC Administrator1-0/+8
2025-08-12fortran: add optional lower arg to c_f_pointerYuao Ma5-43/+120
This patch adds support for the optional lower argument in intrinsic c_f_pointer specified in Fortran 2023. Test cases and documentation have also been updated. gcc/fortran/ChangeLog: * check.cc (gfc_check_c_f_pointer): Check lower arg legitimacy. * intrinsic.cc (add_subroutines): Teach c_f_pointer about lower arg. * intrinsic.h (gfc_check_c_f_pointer): Add lower arg. * intrinsic.texi: Update lower arg for c_f_pointer. * trans-intrinsic.cc (conv_isocbinding_subroutine): Add logic handle lower. gcc/testsuite/ChangeLog: * gfortran.dg/c_f_pointer_shape_tests_7.f90: New test. * gfortran.dg/c_f_pointer_shape_tests_8.f90: New test. * gfortran.dg/c_f_pointer_shape_tests_9.f90: New test. Signed-off-by: Yuao Ma <c8ef@outlook.com>
2025-08-12Daily bump.GCC Administrator1-0/+16
2025-08-11Fortran: gfortran rejects procedure binding on PDT [PR121398]Paul Thomas1-1/+41
2025-08-11 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/121398 * resolve.cc (check_pdt_args): New function. (check_generic_tbp_ambiguity): Use it to ensure that args to typebound procedures that do not have the same declared type as the containing derived type have 'pass1/2' set to null. This avoids false ambiguity errors. (resolve_typebound_procedure): Do not generate a wrong type error for typebound procedures marked as pass if they are of a different declared type to the containing pdt_type. gcc/testsuite/ PR fortran/121398 * gfortran.dg/pdt_generic_1.f90: New test.
2025-08-11Fix comment typosJakub Jelinek1-1/+1
This patch fixes some comment typos, singe -> single and unsinged -> unsigned. 2025-08-11 Jakub Jelinek <jakub@redhat.com> gcc/ * tree-cfg.cc (find_case_label_for_value): Fix comment typo, singe-valued -> single-valued. * config/arc/arc.md: Fix comment typos, unsinged -> unsigned. gcc/fortran/ * gfortran.h (gfc_case): Fix comment typo, singe -> single. gcc/testsuite/ * g++.dg/warn/template-1.C: Fix comment typo, unsinged -> unsigned. * gcc.target/powerpc/builtins-2-p9-runnable.c (main): Likewise. * gcc.dg/graphite/id-30.c: Likewise.