diff options
25 files changed, 329 insertions, 100 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e0a7c64..97f1021 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,37 @@ +2025-09-26 Alejandro Colomar <alx@kernel.org> + + * doc/extend.texi: Clarify documentation about lists of + parameter forward declarations, and mention that more than one + of them are unnecessary. + * doc/invoke.texi: Document the new + -Wmultiple-parameter-fwd-decl-lists. + +2025-09-26 Jan Hubicka <hubicka@ucw.cz> + + * auto-profile.cc (afdo_propagate_edge): Fix handling of precize 0 + counts. + +2025-09-26 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn.cc + (gcn_vectorize_support_vector_misalignment): Allow any alignment, as + long as it's not packed. + +2025-09-26 Jan Hubicka <hubicka@ucw.cz> + + * profile-count.h (profile_probability::operator/): Do not cap + twice. + (profile_probability::operator/=): Likewise. + (profile_probability::apply_scale): Do not watch for overflow. + (profile_count::probability_in): Watch overflow. + +2025-09-26 Lulu Cheng <chenglulu@loongson.cn> + + PR target/121875 + * config/loongarch/loongarch.cc + (loongarch_can_inline_p): New function. + (TARGET_CAN_INLINE_P): Define. + 2025-09-25 Gerald Pfeifer <gerald@pfeifer.com> * doc/invoke.texi (Warning Options): Use "bitwise" over diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 021949a..edfad19 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20250926 +20250927 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 803b07d..bf15d94 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2025-09-26 Alejandro Colomar <alx@kernel.org> + + * c.opt: Add -Wmultiple-parameter-fwd-decl-lists + 2025-09-23 Alfie Richards <alfie.richards@arm.com> * c-attribs.cc: Add support for target_version and target_clone mixing. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 3f5e2f0..4fd8770 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1086,6 +1086,10 @@ Wmultiple-inheritance C++ ObjC++ Var(warn_multiple_inheritance) Warning Warn on direct multiple inheritance. +Wmultiple-parameter-fwd-decl-lists +C ObjC Var(warn_multiple_parameter_fwd_decl_lists) Warning EnabledBy(Wextra) +Warn for multiple lists of forward declarations of function parameters. + Wmultistatement-macros C ObjC C++ ObjC++ Var(warn_multistatement_macros) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for. diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 4e78008..ef985ba 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,22 @@ +2025-09-26 Alejandro Colomar <alx@kernel.org> + + * c-decl.cc (c_scope): Rename {warned > had}_forward_parm_decls. + (mark_forward_parm_decls): Add + -Wmultiple-parameter-fwd-decl-lists. + +2025-09-26 Joseph Myers <josmyers@redhat.com> + + PR c/88642 + * c-typeck.cc (constructor_braced_scalar): New variable. + (struct constructor_stack): Add braced_scalar field. + (really_start_incremental_init): Handle constructor_braced_scalar + and braced_scalar field. + (push_init_level): Handle constructor_braced_scalar and + braced_scalar field. Give permerror rather than warning for + nested braces around scalar initializer. + (pop_init_level): Handle constructor_braced_scalar and + braced_scalar field. + 2025-09-24 Joseph Myers <josmyers@redhat.com> * c-typeck.cc (really_atomic_lvalue): For a COMPOUND_LITERAL_EXPR, diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index b122e82..7e4c7c2 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -504,10 +504,8 @@ struct GTY((chain_next ("%h.outer"))) c_scope { if these appears in a function definition. */ BOOL_BITFIELD had_vla_unspec : 1; - /* True if we already complained about forward parameter decls - in this scope. This prevents double warnings on - foo (int a; int b; ...) */ - BOOL_BITFIELD warned_forward_parm_decls : 1; + /* True if we parsed a list of forward parameter decls in this scope. */ + BOOL_BITFIELD had_forward_parm_decls : 1; /* True if this is the outermost block scope of a function body. This scope contains the parameters, the local variables declared @@ -6269,12 +6267,14 @@ mark_forward_parm_decls (void) { struct c_binding *b; - if (pedantic && !current_scope->warned_forward_parm_decls) - { - pedwarn (input_location, OPT_Wpedantic, - "ISO C forbids forward parameter declarations"); - current_scope->warned_forward_parm_decls = true; - } + if (current_scope->had_forward_parm_decls) + warning_at (input_location, OPT_Wmultiple_parameter_fwd_decl_lists, + "more than one list of forward declarations of parameters"); + if (pedantic && !current_scope->had_forward_parm_decls) + pedwarn (input_location, OPT_Wpedantic, + "ISO C forbids forward parameter declarations"); + + current_scope->had_forward_parm_decls = true; for (b = current_scope->bindings; b; b = b->prev) if (TREE_CODE (b->decl) == PARM_DECL) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 81eaa3c..fa9ac07 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -20419,6 +20419,16 @@ mips_option_override (void) if (TARGET_MICROMIPS && TARGET_MIPS16) error ("unsupported combination: %s", "-mips16 -mmicromips"); + /* Make -mmips16e2 imply -mips16 and forbid its coexistence with + -mmicromips as the ASE requires. */ + if (TARGET_MIPS16E2) + { + if (TARGET_MICROMIPS) + error ("unsupported combination: %s", "-mmips16e2 -mmicromips"); + + target_flags |= MASK_MIPS16; + } + /* Prohibit Paired-Single and MSA combination. This is software restriction rather than architectural. */ if (ISA_HAS_MSA && TARGET_PAIRED_SINGLE_FLOAT) @@ -20671,6 +20681,15 @@ mips_option_override (void) "-mcompact-branches=never"); } + /* MIPS16* ASE is forbidden in Release 6, so -mips16 is not available + for MIPS R6 onwards. */ + if ((mips_base_compression_flags & MASK_MIPS16) && mips_isa_rev >= 6) + error ("MIPS16* ASE is forbidden in Release 6"); + + /* Make sure that the user use Release[2,5] when using -mmips16e2. */ + if (TARGET_MIPS16E2 && mips_isa_rev < 2) + error ("%<-mmips16e2%> requires Release[2,5]"); + /* Require explicit relocs for MIPS R6 onwards. This enables simplification of the compact branch and jump support through the backend. */ if (!TARGET_EXPLICIT_RELOCS && mips_isa_rev >= 6) diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index aadf4dd..99654cc 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -2617,7 +2617,8 @@ (fma:ANYF (match_operand:ANYF 1 "register_operand") (match_operand:ANYF 2 "register_operand") (neg:ANYF (match_operand:ANYF 3 "register_operand"))))] - "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4)") + "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) + || ISA_HAS_FUSED_MADDF") (define_insn "*fms<mode>4_msub3" [(set (match_operand:ANYF 0 "register_operand" "=f") @@ -2639,6 +2640,16 @@ [(set_attr "type" "fmadd") (set_attr "mode" "<UNITMODE>")]) +(define_insn "*fms<mode>4_msubf" + [(set (match_operand:ANYF 0 "register_operand" "=f") + (fma:ANYF (match_operand:ANYF 1 "register_operand" "f") + (match_operand:ANYF 2 "register_operand" "f") + (neg:ANYF (match_operand:ANYF 3 "register_operand" "0"))))] + "ISA_HAS_FUSED_MADDF" + "msubf.<fmt>\t%0,%1,%2" + [(set_attr "type" "fmadd") + (set_attr "mode" "<UNITMODE>")]) + ;; fnma is defined in GCC as (fma (neg op1) op2 op3) ;; (-op1 * op2) + op3 ==> -(op1 * op2) + op3 ==> -((op1 * op2) - op3) ;; The mips nmsub instructions implement -((op1 * op2) - op3) @@ -2650,8 +2661,9 @@ (fma:ANYF (neg:ANYF (match_operand:ANYF 1 "register_operand")) (match_operand:ANYF 2 "register_operand") (match_operand:ANYF 3 "register_operand")))] - "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) - && !HONOR_SIGNED_ZEROS (<MODE>mode)") + "((ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) + && !HONOR_SIGNED_ZEROS (<MODE>mode)) + || ISA_HAS_FUSED_MADDF") (define_insn "*fnma<mode>4_nmsub3" [(set (match_operand:ANYF 0 "register_operand" "=f") @@ -2673,6 +2685,16 @@ [(set_attr "type" "fmadd") (set_attr "mode" "<UNITMODE>")]) +(define_insn "*fnma<mode>4_msubf" + [(set (match_operand:ANYF 0 "register_operand" "=f") + (fma:ANYF (neg:ANYF (match_operand:ANYF 1 "register_operand" "f")) + (match_operand:ANYF 2 "register_operand" "f") + (match_operand:ANYF 3 "register_operand" "0")))] + "ISA_HAS_FUSED_MADDF" + "msubf.<fmt>\t%0,%1,%2" + [(set_attr "type" "fmadd") + (set_attr "mode" "<UNITMODE>")]) + ;; fnms is defined as: (fma (neg op1) op2 (neg op3)) ;; ((-op1) * op2) - op3 ==> -(op1 * op2) - op3 ==> -((op1 * op2) + op3) ;; The mips nmadd instructions implement -((op1 * op2) + op3) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 06287f0..bd60d51 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -8927,8 +8927,9 @@ convert_template_argument (tree parm, && same_type_p (TREE_TYPE (orig_arg), t)) orig_arg = TREE_OPERAND (orig_arg, 0); - if (!type_dependent_expression_p (orig_arg) - && !uses_template_parms (t)) + if (!uses_template_parms (t) + && !(force_conv ? uses_template_parms (orig_arg) + : type_dependent_expression_p (orig_arg))) /* We used to call digest_init here. However, digest_init will report errors, which we don't want when complain is zero. More importantly, digest_init will try too @@ -22330,7 +22331,8 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) if (r == NULL_TREE && TREE_CODE (t) == PARM_DECL) { /* We get here for a use of 'this' in an NSDMI. */ - if (DECL_NAME (t) == this_identifier && current_class_ptr) + if (DECL_NAME (t) == this_identifier && current_class_ptr + && !LAMBDA_TYPE_P (TREE_TYPE (TREE_TYPE (current_class_ptr)))) RETURN (current_class_ptr); /* Parameters of non-templates map to themselves (e.g. in diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 7f01f2c..384211f 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -670,16 +670,21 @@ tester (int len; char data[len][len], int len) @end smallexample @cindex parameter forward declaration -The @samp{int len} before the semicolon is a @dfn{parameter forward -declaration}, and it serves the purpose of making the name @code{len} -known when the declaration of @code{data} is parsed. - -You can write any number of such parameter forward declarations in the -parameter list. They can be separated by commas or semicolons, but the -last one must end with a semicolon, which is followed by the ``real'' -parameter declarations. Each forward declaration must match a ``real'' -declaration in parameter name and data type. ISO C99 does not support -parameter forward declarations. +The @samp{int len} before the semicolon +is a @dfn{parameter forward declaration}, +and it serves the purpose of making the name @code{len} known +when the declaration of @code{data} is parsed. + +Lists of parameter forward declarations are terminated by semicolons, +and parameter forward declarations are separated within such lists by commas, +just like in the regular list of parameter declarations. + +You can write any number of lists of parameter forward declaration, +but using more than one is unnecessary. +The last semicolon is followed by the list of parameter declarations. +Each parameter forward declaration must match +a parameter declaration in parameter name and data type. +ISO C99 does not support parameter forward declarations. @node Zero Length @subsection Arrays of Length Zero diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index cea83f6..99607a0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -540,7 +540,9 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-Wbad-function-cast -Wdeprecated-non-prototype -Wfree-labels -Wmissing-declarations -Wmissing-parameter-name -Wmissing-parameter-type -Wdeclaration-missing-parameter-type -Wmissing-prototypes --Wmissing-variable-declarations -Wnested-externs -Wold-style-declaration +-Wmissing-variable-declarations +-Wmultiple-parameter-fwd-decl-lists +-Wnested-externs -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes -Wtraditional -Wtraditional-conversion -Wdeclaration-after-statement -Wpointer-sign} @@ -6683,6 +6685,7 @@ name is still supported, but the newer name is more descriptive.) -Wmissing-parameter-name @r{(C/ObjC only)} -Wmissing-parameter-type @r{(C/ObjC only)} -Wold-style-declaration @r{(C/ObjC only)} +-Wmultiple-parameter-fwd-decl-lists @r{(C/ObjC only)} -Woverride-init @r{(C/ObjC only)} -Wredundant-move @r{(C++ and Objective-C++ only)} -Wshift-negative-value @r{(in C++11 to C++17 and in C99 and newer)} @@ -10536,6 +10539,13 @@ is not considered an old-style definition in C23 mode, because it is equivalent to @samp{(void)} in that case, but is considered an old-style definition for older standards. +@opindex Wmultiple-parameter-fwd-decl-lists +@opindex Wno-multiple-parameter-fwd-decl-lists +@item -Wmultiple-parameter-fwd-decl-lists @r{(C and Objective-C only)} +Warn if more than one list of forward declarations of parameters +appears in a function prototype. +This warning is also enabled by @option{-Wextra}. + @opindex Wdeprecated-non-prototype @opindex Wno-deprecated-non-prototype @item -Wdeprecated-non-prototype @r{(C and Objective-C only)} diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 68842d6..4427f6a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2025-09-26 Harald Anlauf <anlauf@gcc.gnu.org> + + PR fortran/122002 + * decl.cc (gfc_get_pdt_instance): Initialize 'instance' to NULL + and set 'kind_value' to zero before calling gfc_extract_int. + * primary.cc (gfc_match_rvalue): Intitialize 'ctr_arglist' to + NULL and test for default values if gfc_get_pdt_instance + returns NULL. + 2025-09-25 Harald Anlauf <anlauf@gmx.de> PR fortran/121939 diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc index 41c9417..ef5a17d 100644 --- a/gcc/fortran/interface.cc +++ b/gcc/fortran/interface.cc @@ -1968,25 +1968,6 @@ check_interface0 (gfc_interface *p, const char *interface_name) psave = p; for (; p; p = p->next) { - if (p->sym->attr.vtab) - { - bool found = false; - gfc_component *c = p->sym->ts.u.derived->components; - for (; c; c = c->next) - { - if (c->name[0] == '_') - continue; - /* This check seems to be as much as can sensibly be done here. - If there is more than one proc_pointer components, resolution - of the call will select the right one. */ - if (c->attr.proc_pointer && c->ts.interface - && (c->attr.subroutine || c->attr.function)) - found = true; - } - if (found) - continue; - } - /* Make sure all symbols in the interface have been defined as functions or subroutines. */ if (((!p->sym->attr.function && !p->sym->attr.subroutine) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 16403e2..0642410 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,27 @@ +2025-09-26 Alejandro Colomar <alx@kernel.org> + + * gcc.dg/Wmultiple-parameter-fwd-decl-lists.c: New test. + +2025-09-26 Harald Anlauf <anlauf@gmx.de> + + * gfortran.dg/pdt_48.f03: + +2025-09-26 Joseph Myers <josmyers@redhat.com> + + PR c/88642 + * gcc.dg/c2y-init-1.c: New test. + +2025-09-26 Lulu Cheng <chenglulu@loongson.cn> + + PR target/121875 + * gcc.target/loongarch/can_inline_1.c: New test. + * gcc.target/loongarch/can_inline_2.c: New test. + * gcc.target/loongarch/can_inline_3.c: New test. + * gcc.target/loongarch/can_inline_4.c: New test. + * gcc.target/loongarch/can_inline_5.c: New test. + * gcc.target/loongarch/can_inline_6.c: New test. + * gcc.target/loongarch/pr121875.c: New test. + 2025-09-25 Harald Anlauf <anlauf@gmx.de> PR fortran/121939 diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C new file mode 100644 index 0000000..8bbff1d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C @@ -0,0 +1,8 @@ +// PR c++/122048 +// { dg-do compile { target c++14 } } + +class X { + void f(); + int i; +}; +void X::f() {[&](auto) {sizeof i;}(1);} diff --git a/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C new file mode 100644 index 0000000..bbf295c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C @@ -0,0 +1,15 @@ +// PR c++/121854 +// { dg-do compile { target c++23 } } + +struct S +{ + static void static_func(){} + + void func() + { + auto lambda = [](this auto) + { + static_func(); + }; + } +}; diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C b/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C new file mode 100644 index 0000000..107a1bb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C @@ -0,0 +1,9 @@ +// PR c++/112632 +// { dg-do compile { target c++20 } } + +template<int N> concept A = N != 0; +template<char C> concept B = A<C>; +template<int N> concept C = B<N>; + +static_assert(A<256>); +static_assert(!C<256>); diff --git a/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c b/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c new file mode 100644 index 0000000..c3edbf6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-Wmultiple-parameter-fwd-decl-lists" } */ + +void f(int n, int m; int n, int m); +void g(int n; int m; int n, int m); /* { dg-warning "more than one list of forward declarations" } */ +void h(int n; int n; int n); /* { dg-warning "more than one list of forward declarations" } */ diff --git a/gcc/testsuite/gcc.target/mips/mips-msubf.c b/gcc/testsuite/gcc.target/mips/mips-msubf.c new file mode 100644 index 0000000..424ca21 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/mips-msubf.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-mhard-float -ffast-math -march=mips32r6" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" "-O1" } { "" } } */ +/* { dg-final { scan-assembler-times "\tmsubf\\.s\t" 2 } } */ +/* { dg-final { scan-assembler-times "\tmsubf\\.d\t" 2 } } */ + +NOMIPS16 float +test01 (float x, float y, float z) +{ + return x - (y * z); +} + +NOMIPS16 double +test02 (double x, double y, double z) +{ + return x - (y * z); +} + +NOMIPS16 float +test03 (float x, float y, float z) +{ + return (y * z) - x; +} + +NOMIPS16 double +test04 (double x, double y, double z) +{ + return (y * z) - x; +} + + diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c index dcc39b5..8caacb1 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips32r2 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test cache. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c index 129ea23..a8a28a4 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2 -mbranch-cost=2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2 -mbranch-cost=2" } */ /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test MOVN. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c index 7955472..70d6230 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* Generate GP-relative ADDIU. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2.c b/gcc/testsuite/gcc.target/mips/mips16e2.c index 166aa74..1b4b840 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev>=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* ANDI is a two operand instruction. Hence, it won't be generated if src and diff --git a/gcc/testsuite/gfortran.dg/pr87908.f90 b/gcc/testsuite/gfortran.dg/pr87908.f90 deleted file mode 100644 index 6fdc109..0000000 --- a/gcc/testsuite/gfortran.dg/pr87908.f90 +++ /dev/null @@ -1,49 +0,0 @@ -! { dg-do run } -! -! Check the fix for pr87908, which used to fail with error: -! Procedure â__vtab_m_Tâ in generic interface '_dtio_formatted_read' at (1) is -! neither function nor subroutine. -! -! Contributed by David Bolvansky <david.bolvansky@gmail.com> -! -module m - type t - character(34) :: c - contains - procedure :: g - generic :: read(formatted) => g - end type - integer :: ctr = 0 -contains - subroutine s (unit, x) - integer, intent(in) :: unit - integer, intent(in) :: x(:) - interface read(formatted) - procedure g - end interface - end - subroutine g (dtv, unit, iotype, v_list, iostat, iomsg) - class(t), intent(inout) :: dtv - integer, intent(in) :: unit - character(*), intent(in) :: iotype - integer, intent(in) :: v_list(:) - integer, intent(out) :: iostat - character(*), intent(inout) :: iomsg - read (unit, '(a)', iostat=iostat, iomsg=iomsg) dtv%c - ctr = ctr + 1 - end -end - - use m - type(t) :: x - open (10, status = 'scratch') - write(10, fmt=*) "Mary had a little lamb " - write(10, fmt=*) "whose fleece was as white as gold " - rewind(10) - read(10, fmt=*) x - if (trim(x%c) /= "Mary had a little lamb") stop 1 - read(10, fmt=*) x - if (trim(x%c) /= "whose fleece was as white as gold") stop 2 - close(10) - if (ctr /= 2) stop 3 -end diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a3ee448..b27c82c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,79 @@ +2025-09-26 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/stl_algobase.h (__search, __is_permutation): + Reuse predicate instead of creating a new one each time. + * include/bits/stl_algo.h (__is_permutation): Likewise. + +2025-09-26 Jonathan Wakely <jwakely@redhat.com> + + * include/std/deque (erase_if): Move predicate instead of + wrapping with std::ref. + (erase): Forward to erase_if. + * include/std/inplace_vector (erase_if, erase): Likewise. + * include/std/string (erase_if, erase): Likewise. + * include/std/vector (erase_if, erase): Likewise. + +2025-09-26 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/predefined_ops.h (equal_to, less): Define aliases + for std::equal_to<void> and std::less<void>. + (bind1st, bind2nd, not1, __equal_to): New object generator + functions for adapting predicates. + (__iter_less_iter, __iter_less_val, __iter_comp_val) + (__val_less_iter, __val_comp_iter, __iter_equal_to_iter) + (__iter_equal_to_val, __iter_comp_iter, __negate): Remove all + object generator functions and the class templates they return. + * include/bits/stl_algo.h (__move_median_to_first, __find_if_not) + (__find_if_not_n, __search_n_aux, find_end, find_if_not) + (__remove_copy_if, remove_copy, remove_copy_if, remove) + (remove_if, __adjacent_find, __unique, unique, __unique_copy) + (__unique_copy_1, __stable_partition_adaptive, stable_partition) + (__heap_select, __partial_sort_copy, partial_sort_copy) + (__unguarded_linear_insert, __insertion_sort) + (__unguarded_insertion_sort, __unguarded_partition) + (lower_bound, __upper_bound, upper_bound, __equal_range) + (equal_range, binary_search, __move_merge_adaptive) + (__move_merge_adaptive_backward, __merge_adaptive_resize) + (__merge_without_buffer, inplace_merge, __move_merge) + (__includes, includes, __next_permutation, next_permutation) + (__prev_permutation, prev_permutation, __replace_copy_if) + (replace_copy, replace_copy_if, __is_sorted_until) + (is_sorted_until, __minmax_element, minmax_element, minmax) + (is_permutation, __is_permutation, find, find_if, adjacent_find) + (count, count_if, search, search_n, unique_copy, partial_sort) + (nth_element, sort, __merge, merge, stable_sort, __set_union) + (set_union, __set_intersection, set_intersection) + (__set_difference, set_difference, __set_symmetric_difference) + (set_symmetric_difference, __min_element, min_element) + (__max_element, max_element, min, max): Use direct predicates + instead of __iter_equal_to_iter, __iter_comp_iter, and + __iter_less_iter, __negate etc. Dereference iterators when + invoking predicates. + * include/bits/stl_algobase.h (__lexicographical_compare_impl) + (__lexicographical_compare::__lc, __lower_bound, lower_bound) + (lexicographical_compare, __mismatch, mismatch, __find_if) + (__count_if, __remove_if, __search, __is_permutation) + (is_permutation, search): Likewise. + * include/bits/stl_function.h (equal_to<void>, less<void>): + Define transparent comparison functions for C++98 and C++11. + * include/bits/stl_heap.h (__is_heap_until, __is_heap) + (__push_heap, push_heap, __adjust_heap, pop_heap, make_heap) + (sort_heap, is_heap_until, is_heap): Likewise. + * include/std/deque (erase_if): Remove call to __pred_iter. + (erase): Replace __iter_equals_val with __equal_to. + * include/std/inplace_vector (erase_if, erase): Likewise. + * include/std/string (erase_if, erase): Likewise. + * include/std/vector (erase_if, erase): Likewise. + +2025-09-26 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/122062 + * include/bits/random.tcc (__detail::__normalize): Use void cast + for operands of comma operator. + (piecewise_linear_distribution): Likewise. + * testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc: + New test. + 2025-09-25 Luc Grosheintz <luc.grosheintz@gmail.com> * include/std/mdspan (__static_quotient): New overload. |