aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog156
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/cp/method.cc4
-rw-r--r--gcc/fortran/ChangeLog20
-rw-r--r--gcc/fortran/intrinsic.cc19
-rw-r--r--gcc/fortran/intrinsic.texi13
-rw-r--r--gcc/gimple-fold.cc26
-rw-r--r--gcc/m2/ChangeLog11
-rw-r--r--gcc/m2/m2.flex25
-rw-r--r--gcc/match.pd52
-rw-r--r--gcc/testsuite/ChangeLog66
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr119903-1.C24
-rw-r--r--gcc/testsuite/g++.dg/warn/ignore-virtual-move-assign.C45
-rw-r--r--gcc/testsuite/gcc.target/i386/pr103771-4.c82
-rw-r--r--gcc/testsuite/gfortran.dg/dec_math.f9069
-rw-r--r--gcc/tree-vect-patterns.cc8
-rw-r--r--libgcobol/ChangeLog4
-rw-r--r--libgfortran/ChangeLog45
-rw-r--r--libiberty/ChangeLog5
20 files changed, 646 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d597002..d475eee 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,159 @@
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/119903
+ * gimple-fold.cc (replace_stmt_with_simplification): Reject for
+ noncall exceptions replacing comparison with itself.
+
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/118868
+ * tree-cfg.cc (verify_gimple_assign_unary): Allow pointers
+ but disallow aggregate types for PAREN_EXPR.
+
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ * cfgexpand.cc (vars_ssa_cache::operator()): Update the cache if the use is already
+ has a cache.
+
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ * cfgexpand.cc (vars_ssa_cache::operator()): Reverse the order of the going
+ through the update list.
+
+2025-05-13 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-loop.cc (vectorizable_nonlinear_induction):
+ Remove non-SLP path, use SLP_TREE_VECTYPE.
+ (vectorizable_induction): Likewise. Drop ncopies variable
+ which is always 1.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * common/config/riscv/riscv-common.cc (riscv_extra_ext_flag_table_t):
+ New.
+ (riscv_ext_flag_table): Rename to ...
+ (riscv_extra_ext_flag_table): this, and drop most of definitions
+ that can obtained from the flags field of the riscv_ext_info_t
+ structures.
+ (apply_extra_extension_flags): Use riscv_ext_info_t.
+ (riscv_ext_is_subset): Ditto.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * common/config/riscv/riscv-common.cc (riscv_ext_version_table):
+ Remove.
+ (standard_extensions_p): Use riscv_ext_info_t.
+ (get_default_version): Use riscv_ext_info_t.
+ (riscv_arch_help): Ditto.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * common/config/riscv/riscv-common.cc
+ (riscv_implied_info::riscv_implied_info_t): Remove unused
+ variant.
+ (struct riscv_implied_info_t): Remove unsued field.
+ (riscv_implied_info::match): Remove unused variant, and adjust
+ the logic.
+ (get_riscv_ext_info): New.
+ (riscv_implied_info): Remove.
+ (riscv_ext_info_t::apply_implied_ext): New.
+ (riscv_combine_info). Remove.
+ (riscv_subset_list::handle_implied_ext): Use riscv_ext_info_t
+ rather than riscv_implied_info.
+ (riscv_subset_list::check_implied_ext): Ditto.
+ (riscv_subset_list::handle_combine_ext): Use riscv_ext_info_t
+ rather than riscv_combine_info.
+ (riscv_minimal_hwprobe_feature_bits): Use riscv_ext_info_t
+ rather than riscv_implied_info.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * common/config/riscv/riscv-common.cc (riscv_ext_info_t): New
+ struct.
+ (opt_var_ref_t): Adjust order.
+ (cl_opt_var_ref_t): Ditto.
+ (riscv_ext_flag_table_t): Adjust order, and add a new construct
+ that not hold the extension name.
+ (riscv_version_t): New struct.
+ (riscv_implied_info_t): Adjust order, and add a new construct that not
+ hold the extension name.
+ (apply_extra_extension_flags): New function.
+ (riscv_ext_infos): New.
+ (riscv_implied_info): Adjust.
+ * config/riscv/riscv-opts.h (EXT_FLAG_MACRO): New macro.
+ (BITMASK_NOT_YET_ALLOCATED): New macro.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * common/config/riscv/riscv-common.cc (riscv_can_inline_p): Drop
+ extension flags check from `target_flags`.
+ * config/riscv/riscv-subset.h (riscv_x_target_flags_isa_mask):
+ Remove.
+ * config/riscv/riscv.cc (riscv_x_target_flags_isa_mask): Remove.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * doc/invoke.texi: Replace hand‑written extension table with
+ `@include riscv-ext.texi` to pull in auto‑generated entries.
+ * doc/riscv-ext.texi: New generated definition file
+ containing formatted documentation entries for each extension.
+ * Makefile.in: Add riscv-ext.texi to the list of files to be
+ processed by the Texinfo generator.
+ * config/riscv/gen-riscv-ext-texi.cc: New.
+ * config/riscv/t-riscv: Add rule for generating riscv-ext.texi.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * config/riscv/gen-riscv-ext-opt.cc: New.
+ * config/riscv/riscv.opt: Drop manual entries for target
+ options, and include riscv-ext.opt.
+ * config/riscv/riscv-ext.opt: New.
+ * config/riscv/riscv-ext.opt.urls: New.
+ * config.gcc: Add riscv-ext.opt to the list of target options files.
+ * common/config/riscv/riscv-common.cc (riscv_ext_flag_table): Adjsut target
+ option variable entry.
+ (riscv_set_arch_by_subset_list): Adjust target option variable.
+ * config/riscv/riscv-c.cc (riscv_ext_flag_table): Adjust target
+ option variable entry.
+ * config/riscv/riscv-vector-builtins.cc (pragma_intrinsic_flags):
+ Adjust variable name.
+ (riscv_pragma_intrinsic_flags_pollute): Adjust variable name.
+ (riscv_pragma_intrinsic_flags_restore): Ditto.
+ * config/riscv/t-riscv: Add the rule for generating
+ riscv-ext.opt.
+ * config/riscv/riscv-opts.h (TARGET_MIN_VLEN): Update.
+ (TARGET_MIN_VLEN_OPTS): Update.
+
+2025-05-13 Kito Cheng <kito.cheng@sifive.com>
+
+ * config/riscv/riscv-ext.def: New file; define extension metadata table.
+ * config/riscv/riscv-ext-corev.def: New.
+ * config/riscv/riscv-ext-sifive.def: New.
+ * config/riscv/riscv-ext-thead.def: New.
+ * config/riscv/riscv-ext-ventana.def: New.
+
+2025-05-13 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116792
+ * diagnostic-format-html.cc: Include "diagnostic-format-text.h",
+ "pretty-print-urlifier.h" and "edit-context.h".
+ (html_builder::html_builder): Fix indentation in decl.
+ (html_builder::make_element_for_diagnostic): Split out metadata
+ code into make_element_for_metadata. Call
+ make_element_for_source, make_element_for_path, and
+ make_element_for_patch.
+ (html_builder::make_element_for_source): New.
+ (html_builder::make_element_for_path): New.
+ (html_builder::make_element_for_patch): New.
+ (html_builder::make_metadata_element): New.
+ (html_builder::make_element_for_metadata): New.
+ (html_output_format::get_builder): New.
+ (selftest::test_html_diagnostic_context::get_builder): New.
+ (selftest::test_simple_log): Update test to print a quoted string,
+ and verify that it uses a "gcc-quoted-text" span.
+ (selftest::test_metadata): New.
+ (selftest::diagnostic_format_html_cc_tests): Call it.
+
2025-05-13 Andrew MacLeod <amacleod@redhat.com>
* tree-ssanames.cc (set_bitmask): Use int_range_max for temps.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 83f5cb2..cfb9239 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250513
+20250514
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 128ea05..f0046a0 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2025-05-13 Nicolas Boulenguez <nicolas@debian.org>
+
+ PR ada/87778
+ * Make-generated.in: Remove -q gnatmake option.
+ * gcc-interface/Makefile.in: Likewise.
+
2025-05-05 Eric Botcazou <ebotcazou@adacore.com>
PR ada/120104
diff --git a/gcc/cp/method.cc b/gcc/cp/method.cc
index 05c19cf..092bae2 100644
--- a/gcc/cp/method.cc
+++ b/gcc/cp/method.cc
@@ -2949,7 +2949,9 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
&& BINFO_VIRTUAL_P (base_binfo)
&& fn && TREE_CODE (fn) == FUNCTION_DECL
&& move_fn_p (fn) && !trivial_fn_p (fn)
- && vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
+ && vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo))
+ && warning_enabled_at (DECL_SOURCE_LOCATION (fn),
+ OPT_Wvirtual_move_assign))
warning (OPT_Wvirtual_move_assign,
"defaulted move assignment for %qT calls a non-trivial "
"move assignment operator for virtual base %qT",
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index aa6d6cb..8b82b20 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,23 @@
+2025-05-13 Yuao Ma <c8ef@outlook.com>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/113413
+ * intrinsic.cc (do_check): Minor doc polish.
+ (add_functions): Add atand(y, x) mapping.
+ * intrinsic.texi: Update atand example.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+ Daniil Kochergin <daniil2472s@gmail.com>
+ Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/120191
+ * trans-intrinsic.cc (strip_kind_from_actual): Remove.
+ (gfc_conv_intrinsic_minmaxloc): Don't call strip_kind_from_actual.
+ Free and clear kind_arg->expr if non-NULL. Set back_arg->name to
+ "%VAL" instead of a loop looking for last argument. Remove actual
+ variable, use array_arg instead. Free and clear dim_arg->expr if
+ non-NULL for BT_CHARACTER cases instead of using a loop.
+
2025-05-11 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/120163
diff --git a/gcc/fortran/intrinsic.cc b/gcc/fortran/intrinsic.cc
index 2eba209..908e1da 100644
--- a/gcc/fortran/intrinsic.cc
+++ b/gcc/fortran/intrinsic.cc
@@ -376,11 +376,11 @@ do_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg)
Argument list:
char * name of function
- int whether function is elemental
- int If the function can be used as an actual argument [1]
- bt return type of function
- int kind of return type of function
- int Fortran standard version
+ int whether function is elemental
+ int If the function can be used as an actual argument [1]
+ bt return type of function
+ int kind of return type of function
+ int Fortran standard version
check pointer to check function
simplify pointer to simplification function
resolve pointer to resolution function
@@ -396,7 +396,7 @@ do_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg)
[1] Whether a function can or cannot be used as an actual argument is
- determined by its presence on the 13.6 list in Fortran 2003. The
+ determined by its presence in the 13.6 list in Fortran 2003. The
following intrinsics, which are GNU extensions, are considered allowed
as actual arguments: ACOSH ATANH DACOSH DASINH DATANH DCONJG DIMAG
ZABS ZCOS ZEXP ZLOG ZSIN ZSQRT. */
@@ -3479,6 +3479,13 @@ add_functions (void)
gfc_check_fn_r, gfc_simplify_atand, gfc_resolve_trigd,
x, BT_REAL, dr, REQUIRED);
+ /* Two-argument version of atand, equivalent to atan2d. */
+ add_sym_2 ("atand", GFC_ISYM_ATAN2D, CLASS_ELEMENTAL, ACTUAL_YES,
+ BT_REAL, dr, GFC_STD_F2023,
+ gfc_check_atan2, gfc_simplify_atan2d, gfc_resolve_trigd2,
+ y, BT_REAL, dr, REQUIRED,
+ x, BT_REAL, dr, REQUIRED);
+
make_generic ("atand", GFC_ISYM_ATAND, GFC_STD_F2023);
add_sym_1 ("datand", GFC_ISYM_ATAND, CLASS_ELEMENTAL, ACTUAL_YES,
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 3a105bc..48c2d60 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -1547,7 +1547,7 @@ Fortran 90 and later
@node ATAN
-@section @code{ATAN} --- Arctangent function
+@section @code{ATAN} --- Arctangent function
@fnindex ATAN
@fnindex DATAN
@cindex trigonometric function, tangent, inverse
@@ -1619,6 +1619,7 @@ Degrees function: @*
@item @emph{Synopsis}:
@multitable @columnfractions .80
@item @code{RESULT = ATAND(X)}
+@item @code{RESULT = ATAND(Y, X)}
@end multitable
@item @emph{Description}:
@@ -1630,21 +1631,23 @@ Elemental function
@item @emph{Arguments}:
@multitable @columnfractions .15 .70
-@item @var{X} @tab The type shall be @code{REAL};
-if @var{Y} is present, @var{X} shall be REAL.
+@item @var{X} @tab The type shall be @code{REAL}.
@item @var{Y} @tab The type and kind type parameter shall be the same as @var{X}.
@end multitable
@item @emph{Return value}:
The return value is of the same type and kind as @var{X}.
-The result is in degrees and lies in the range
-@math{-90 \leq \Re \atand(x) \leq 90}.
+If @var{Y} is present, the result is identical to @code{ATAN2D(Y, X)}.
+Otherwise, the result is in degrees and lies in the range
+@math{-90 \leq \atand(x) \leq 90}.
@item @emph{Example}:
@smallexample
program test_atand
real(8) :: x = 2.866_8
+ real(4) :: x1 = 1.e0_4, y1 = 0.5e0_4
x = atand(x)
+ x1 = atand(y1, x1)
end program test_atand
@end smallexample
diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index e63fd6f..b8c1588 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -6276,6 +6276,32 @@ replace_stmt_with_simplification (gimple_stmt_iterator *gsi,
}
else if (!inplace)
{
+ /* For throwing comparisons, see if the GIMPLE_COND is the same as
+ the comparison would be.
+ This can happen due to the match pattern for
+ `(ne (cmp @0 @1) integer_zerop)` which creates a new expression
+ for the comparison. */
+ if (TREE_CODE_CLASS (code) == tcc_comparison
+ && flag_exceptions
+ && cfun->can_throw_non_call_exceptions
+ && operation_could_trap_p (code,
+ FLOAT_TYPE_P (TREE_TYPE (ops[0])),
+ false, NULL_TREE))
+ {
+ tree lhs = gimple_cond_lhs (cond_stmt);
+ if (gimple_cond_code (cond_stmt) == NE_EXPR
+ && TREE_CODE (lhs) == SSA_NAME
+ && INTEGRAL_TYPE_P (TREE_TYPE (lhs))
+ && integer_zerop (gimple_cond_rhs (cond_stmt)))
+ {
+ gimple *s = SSA_NAME_DEF_STMT (lhs);
+ if (is_gimple_assign (s)
+ && gimple_assign_rhs_code (s) == code
+ && operand_equal_p (gimple_assign_rhs1 (s), ops[0])
+ && operand_equal_p (gimple_assign_rhs2 (s), ops[1]))
+ return false;
+ }
+ }
tree res = maybe_push_res_to_seq (res_op, seq);
if (!res)
return false;
diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog
index 058468b..40396a2 100644
--- a/gcc/m2/ChangeLog
+++ b/gcc/m2/ChangeLog
@@ -1,3 +1,14 @@
+2025-05-13 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/120253
+ * m2.flex (FIRST_COLUMN): New define.
+ (updatepos): Remove commented code.
+ (consumeLine): Assign column to FIRST_COLUMN.
+ (initLine): Ditto.
+ (m2flex_GetColumnNo): Return FIRST_COLUMN if currentLine is NULL.
+ (m2flex_GetLineNo): Rewrite for positive logic.
+ (m2flex_GetLocation): Ditto.
+
2025-05-05 Gaius Mulley <gaiusmod2@gmail.com>
PR modula2/120117
diff --git a/gcc/m2/m2.flex b/gcc/m2/m2.flex
index d08ac3e..e3cf010 100644
--- a/gcc/m2/m2.flex
+++ b/gcc/m2/m2.flex
@@ -48,6 +48,8 @@ static int cpreprocessor = 0; /* Replace this with correct getter. */
#define EXTERN extern "C"
#endif
+#define FIRST_COLUMN 1
+
/* m2.flex provides a lexical analyser for GNU Modula-2. */
struct lineInfo {
@@ -558,7 +560,7 @@ static void consumeLine (void)
currentLine->lineno = lineno;
currentLine->tokenpos=0;
currentLine->nextpos=0;
- currentLine->column=0;
+ currentLine->column=FIRST_COLUMN;
START_LINE (lineno, yyleng);
yyless(1); /* push back all but the \n */
traceLine ();
@@ -621,7 +623,6 @@ static void updatepos (void)
seenModuleStart = false;
currentLine->nextpos = currentLine->tokenpos+yyleng;
currentLine->toklen = yyleng;
- /* if (currentLine->column == 0) */
currentLine->column = currentLine->tokenpos+1;
currentLine->location =
M2Options_OverrideLocation (GET_LOCATION (currentLine->column,
@@ -677,7 +678,7 @@ static void initLine (void)
currentLine->toklen = 0;
currentLine->nextpos = 0;
currentLine->lineno = lineno;
- currentLine->column = 0;
+ currentLine->column = FIRST_COLUMN;
currentLine->inuse = true;
currentLine->next = NULL;
}
@@ -812,10 +813,10 @@ EXTERN bool m2flex_OpenSource (char *s)
EXTERN int m2flex_GetLineNo (void)
{
- if (currentLine != NULL)
- return currentLine->lineno;
- else
+ if (currentLine == NULL)
return 0;
+ else
+ return currentLine->lineno;
}
/*
@@ -825,10 +826,10 @@ EXTERN int m2flex_GetLineNo (void)
EXTERN int m2flex_GetColumnNo (void)
{
- if (currentLine != NULL)
- return currentLine->column;
+ if (currentLine == NULL)
+ return FIRST_COLUMN;
else
- return 0;
+ return currentLine->column;
}
/*
@@ -837,10 +838,10 @@ EXTERN int m2flex_GetColumnNo (void)
EXTERN location_t m2flex_GetLocation (void)
{
- if (currentLine != NULL)
- return currentLine->location;
- else
+ if (currentLine == NULL)
return 0;
+ else
+ return currentLine->location;
}
/*
diff --git a/gcc/match.pd b/gcc/match.pd
index f405068..9613640 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -11308,26 +11308,58 @@ and,
(match (ctz_table_index @1 @2 @3)
(rshift (mult (bit_and:c (negate @1) @1) INTEGER_CST@2) INTEGER_CST@3))
+/* Floatint point/integer comparison and integer->integer
+ or floating point -> float point conversion. */
(match (cond_expr_convert_p @0 @2 @3 @6)
(cond (simple_comparison@6 @0 @1) (convert@4 @2) (convert@5 @3))
- (if (INTEGRAL_TYPE_P (type)
- && INTEGRAL_TYPE_P (TREE_TYPE (@2))
- && INTEGRAL_TYPE_P (TREE_TYPE (@0))
- && INTEGRAL_TYPE_P (TREE_TYPE (@3))
- && TYPE_PRECISION (type) != TYPE_PRECISION (TREE_TYPE (@0))
- && TYPE_PRECISION (TREE_TYPE (@0))
- == TYPE_PRECISION (TREE_TYPE (@2))
- && TYPE_PRECISION (TREE_TYPE (@0))
- == TYPE_PRECISION (TREE_TYPE (@3))
+ (if ((INTEGRAL_TYPE_P (type)
+ || (!flag_trapping_math && SCALAR_FLOAT_TYPE_P (type)))
+ && ((INTEGRAL_TYPE_P (TREE_TYPE (@2))
+ && INTEGRAL_TYPE_P (TREE_TYPE (@3)))
+ || (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@2))
+ && types_match (TREE_TYPE (@2), TREE_TYPE (@3))))
+ && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (@0)))
+ && operand_equal_p (TYPE_SIZE (TREE_TYPE (@0)),
+ TYPE_SIZE (TREE_TYPE (@2)))
+ && operand_equal_p (TYPE_SIZE (TREE_TYPE (@0)),
+ TYPE_SIZE (TREE_TYPE (@3)))
/* For vect_recog_cond_expr_convert_pattern, @2 and @3 can differ in
signess when convert is truncation, but not ok for extension since
it's sign_extend vs zero_extend. */
- && (TYPE_PRECISION (TREE_TYPE (@0)) > TYPE_PRECISION (type)
+ && (known_gt (tree_to_poly_uint64 (TYPE_SIZE (TREE_TYPE (@0))),
+ tree_to_poly_uint64 (TYPE_SIZE (type)))
|| (TYPE_UNSIGNED (TREE_TYPE (@2))
== TYPE_UNSIGNED (TREE_TYPE (@3))))
&& single_use (@4)
&& single_use (@5))))
+/* Floating point or integer comparison and integer to floating point
+ conversion. */
+(match (cond_expr_convert_p @0 @2 @3 @6)
+ (cond (simple_comparison@6 @0 @1) (float@4 @2) (float@5 @3))
+ (if (SCALAR_FLOAT_TYPE_P (type) && !flag_trapping_math
+ && INTEGRAL_TYPE_P (TREE_TYPE (@2))
+ && types_match (TREE_TYPE (@2), TREE_TYPE (@3))
+ && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (@0)))
+ && operand_equal_p (TYPE_SIZE (TREE_TYPE (@0)),
+ TYPE_SIZE (TREE_TYPE (@2)))
+ && single_use (@4)
+ && single_use (@5))))
+
+/* Floating point or integer comparison and floating point to integer
+ conversion. */
+(match (cond_expr_convert_p @0 @2 @3 @6)
+ (cond (simple_comparison@6 @0 @1) (fix_trunc@4 @2) (fix_trunc@5 @3))
+ (if (INTEGRAL_TYPE_P (type) && !flag_trapping_math
+ && SCALAR_FLOAT_TYPE_P (TREE_TYPE (@2))
+ && types_match (TREE_TYPE (@2), TREE_TYPE (@3))
+ && !operand_equal_p (TYPE_SIZE (type),
+ TYPE_SIZE (TREE_TYPE (@0)))
+ && operand_equal_p (TYPE_SIZE (TREE_TYPE (@0)),
+ TYPE_SIZE (TREE_TYPE (@2)))
+ && single_use (@4)
+ && single_use (@5))))
+
(for bit_op (bit_and bit_ior bit_xor)
(match (bitwise_induction_p @0 @2 @3)
(bit_op:c
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b7e62e8..6a9c9c7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,69 @@
+2025-05-13 Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/113413
+ * gfortran.dg/dec_math.f90: Add comment that degree
+ functions are part of F2023.
+
+2025-05-13 Yuao Ma <c8ef@outlook.com>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/113413
+ * gfortran.dg/dec_math.f90: Add atand(y, x) testcase.
+
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/119903
+ * g++.dg/tree-ssa/pr119903-1.C: New test.
+
+2025-05-13 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/118868
+ * c-c++-common/pr118868-1.c: New test.
+
+2025-05-13 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/120188
+ * gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp:
+ Remove call to gm2-dg-frontend-configure-check and replace with
+ tests for whether plugin variables exist.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR libfortran/120196
+ * gfortran.dg/pr120196.f90: New test.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120191
+ * gfortran.dg/pr120191_3.f90: New test.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120191
+ * gfortran.dg/pr120191_2.f90: New test.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+ Daniil Kochergin <daniil2472s@gmail.com>
+ Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/120191
+ * gfortran.dg/pr120191_1.f90: New test.
+
+2025-05-13 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116792
+ * gcc.dg/html-output/missing-semicolon.py: Verify that we don't
+ have an empty "gcc-annotated-source" and we do have a
+ "gcc-generated-patch".
+ * gcc.dg/plugin/diagnostic-test-metadata-html.c: New test.
+ * gcc.dg/plugin/diagnostic-test-metadata-html.py: New test script.
+ * gcc.dg/plugin/diagnostic-test-paths-2.c: Add
+ "-fdiagnostics-add-output=experimental-html" to options. Add
+ invocation of diagnostic-test-paths-2.py.
+ * gcc.dg/plugin/diagnostic-test-paths-2.py: New test script.
+ * gcc.dg/plugin/plugin.exp (plugin_test_list): Add
+ diagnostic-test-metadata-html.c.
+
2025-05-13 Andrew MacLeod <amacleod@redhat.com>
* gcc.dg/tree-ssa/vrp124.c: New.
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr119903-1.C b/gcc/testsuite/g++.dg/tree-ssa/pr119903-1.C
new file mode 100644
index 0000000..605f989
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr119903-1.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2 -fnon-call-exceptions -ftrapping-math -fdump-tree-optimized-eh" }
+
+// PR tree-optimization/119903
+// match and simplify would cause the internal throwable fp comparison
+// to become only external throwable and lose the landing pad.
+
+int f() noexcept;
+int g() noexcept;
+
+int m(double a)
+{
+ try {
+ if (a < 1.0)
+ return f();
+ return g();
+ }catch(...)
+ {
+ return -1;
+ }
+}
+
+// Make sure There is a landing pad for the non-call exception from the comparison.
+// { dg-final { scan-tree-dump "LP " "optimized" } }
diff --git a/gcc/testsuite/g++.dg/warn/ignore-virtual-move-assign.C b/gcc/testsuite/g++.dg/warn/ignore-virtual-move-assign.C
new file mode 100644
index 0000000..73922e6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/ignore-virtual-move-assign.C
@@ -0,0 +1,45 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wvirtual-move-assign -Wattributes" }
+
+#include <utility>
+
+class A
+{
+ int val;
+
+public:
+ explicit A (int val) : val (val) {}
+
+ A (const A &oth) : val (0) {}
+ A &operator= (const A &oth) { return *this; }
+ A (A &&oth) : val (oth.val) { oth.val = 0; }
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvirtual-move-assign"
+ A &operator= (A &&oth)
+ {
+ val += oth.val;
+ oth.val = 0;
+ return *this;
+ }
+#pragma GCC diagnostic pop
+};
+
+class B : virtual A
+{
+public:
+ B () : A (12) {}
+ B &operator= (B &&) = default;
+};
+
+class C : virtual A
+{
+public:
+ C () : A (12) {}
+};
+
+void
+test_fn ()
+{
+ C x, y;
+ x = std::move (y);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr103771-4.c b/gcc/testsuite/gcc.target/i386/pr103771-4.c
new file mode 100644
index 0000000..299337d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr103771-4.c
@@ -0,0 +1,82 @@
+/* { dg-do compile } */
+/* { dg-options "-march=x86-64-v4 -Ofast -fdump-tree-vect-details" } */
+/* { dg-final { scan-assembler-not "kshift" { target { ! ia32 } } } } */
+/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 6 "vect" { target { ! ia32 } } } } */
+
+void
+foo (float* a, float* b, int* c, int* d, long long* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ long long tmp = c[i];
+ long long tmp2 = d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
+
+void
+foo1 (double* a, double* b, long long* c, long long* d, int* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ int tmp = (int)c[i];
+ int tmp2 = (int)d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
+
+void
+foo2 (float* a, float* b, int* c, int* d, double* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ double tmp = c[i];
+ double tmp2 = d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
+
+void
+foo3 (double* a, double* b, long long* c, long long* d, float* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ float tmp = c[i];
+ float tmp2 = d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
+
+void
+foo4 (int* a, int* b, int* c, int* d, double* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ double tmp = c[i];
+ double tmp2 = d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
+
+void
+foo5 (long long* a, long long* b, long long* c, long long* d, float* __restrict e, int n)
+{
+ for (int i = 0 ; i != n; i++)
+ {
+ float tmp = c[i];
+ float tmp2 = d[i];
+ if (a[i] < b[i])
+ tmp = tmp2;
+ e[i] = tmp;
+ }
+}
diff --git a/gcc/testsuite/gfortran.dg/dec_math.f90 b/gcc/testsuite/gfortran.dg/dec_math.f90
index 393e7de..79c1807 100644
--- a/gcc/testsuite/gfortran.dg/dec_math.f90
+++ b/gcc/testsuite/gfortran.dg/dec_math.f90
@@ -5,6 +5,12 @@
! Test extra math intrinsics formerly offered by -fdec-math,
! now included with -std=gnu or -std=legacy.
!
+! Since Fortran 2023, the degree trigonometric functions (sind, cosd, ...)
+! are part of the standard; additionally, Fortran 2023 added a two-argument
+! version of atand as alias for atan2d.
+!
+! Note that cotan and cotand are not part of Fortran 2023; hence, this file
+! still requires -std=gnu and cannot be compiled with -std=f2023.
module dec_math
@@ -522,6 +528,69 @@ call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qatand")
#endif
! Input
+f_i1 = 1.0_4
+f_i2 = 2.0_4
+d_i1 = 1.0_8
+d_i2 = 2.0_8
+#ifdef __GFC_REAL_10__
+l_i1 = 1.0_10
+l_i2 = 2.0_10
+#endif
+#ifdef __GFC_REAL_16__
+q_i1 = 1.0_16
+q_i2 = 2.0_16
+#endif
+
+! Expected
+f_oe = r2d_f * atan2 (f_i1, f_i2)
+f_oxe = r2d_f * atan2 (xf * f_i1, f_i2)
+d_oe = r2d_d * atan2 (d_i1, d_i2)
+d_oxe = r2d_d * atan2 (xd * d_i1, d_i2)
+#ifdef __GFC_REAL_10__
+l_oe = r2d_l * atan2 (l_i1, l_i2)
+l_oxe = r2d_l * atan2 (xl * l_i1, l_i2)
+#endif
+#ifdef __GFC_REAL_16__
+q_oe = r2d_q * atan2 (q_i1, q_i2)
+q_oxe = r2d_q * atan2 (xq * q_i1, q_i2)
+#endif
+
+! Actual
+f_oa = atand (f_i1, f_i2)
+f_oc = atand (1.0_4, 2.0_4)
+f_ox = atand (xf * f_i1, f_i2)
+d_oa = atand (d_i1, d_i2)
+d_oc = atand (1.0_8, 2.0_8)
+d_ox = atand (xd * d_i1, d_i2)
+#ifdef __GFC_REAL_10__
+l_oa = atand (l_i1, l_i2)
+l_oc = atand (1.0_10, 2.0_10)
+l_ox = atand (xl * l_i1, l_i2)
+#endif
+#ifdef __GFC_REAL_16__
+q_oa = atand (q_i1, q_i2)
+q_oc = atand (1.0_16, 2.0_16)
+q_ox = atand (xq * q_i1, q_i2)
+#endif
+
+call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fatand")
+call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fatand")
+call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fatand")
+call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) datand")
+call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) datand")
+call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) atand")
+#ifdef __GFC_REAL_10__
+call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) latand")
+call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) latand")
+call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) latand")
+#endif
+#ifdef __GFC_REAL_16__
+call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qatand")
+call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qatand")
+call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qatand")
+#endif
+
+! Input
f_i1 = 34.3775_4
d_i1 = 34.3774677078494_8
#ifdef __GFC_REAL_10__
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index ca19add..d848476 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -1098,6 +1098,7 @@ vect_recog_cond_expr_convert_pattern (vec_info *vinfo,
tree lhs, match[4], temp, type, new_lhs, op2;
gimple *cond_stmt;
gimple *pattern_stmt;
+ enum tree_code code = NOP_EXPR;
if (!last_stmt)
return NULL;
@@ -1111,6 +1112,11 @@ vect_recog_cond_expr_convert_pattern (vec_info *vinfo,
vect_pattern_detected ("vect_recog_cond_expr_convert_pattern", last_stmt);
+ if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (lhs)))
+ code = INTEGRAL_TYPE_P (TREE_TYPE (match[1])) ? FLOAT_EXPR : CONVERT_EXPR;
+ else if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (match[1])))
+ code = FIX_TRUNC_EXPR;
+
op2 = match[2];
type = TREE_TYPE (match[1]);
if (TYPE_SIGN (type) != TYPE_SIGN (TREE_TYPE (match[2])))
@@ -1127,7 +1133,7 @@ vect_recog_cond_expr_convert_pattern (vec_info *vinfo,
append_pattern_def_seq (vinfo, stmt_vinfo, cond_stmt,
get_vectype_for_scalar_type (vinfo, type));
new_lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL);
- pattern_stmt = gimple_build_assign (new_lhs, NOP_EXPR, temp);
+ pattern_stmt = gimple_build_assign (new_lhs, code, temp);
*type_out = STMT_VINFO_VECTYPE (stmt_vinfo);
if (dump_enabled_p ())
diff --git a/libgcobol/ChangeLog b/libgcobol/ChangeLog
index 2eadc73..06b99f2 100644
--- a/libgcobol/ChangeLog
+++ b/libgcobol/ChangeLog
@@ -1,3 +1,7 @@
+2025-05-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * libgcobol.cc [!LOG_PERROR] (LOG_PERROR): Provide fallback.
+
2025-05-11 Robert Dubner <rdubner@symas.com>
PR cobol/119377
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index d36fcc1..638c03e 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,48 @@
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR libfortran/120196
+ * m4/ifindloc2.m4 (header1, header2): For back use i > 0 rather than
+ i >= 0 as for condition.
+ * generated/findloc2_s1.c: Regenerate.
+ * generated/findloc2_s4.c: Regenerate.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120191
+ * m4/ifunction-s.m4 (SCALAR_ARRAY_FUNCTION): Don't multiply
+ GFC_DESCRIPTOR_EXTENT(array,) by string_len.
+ * generated/maxloc1_4_s1.c: Regenerate.
+ * generated/maxloc1_4_s4.c: Regenerate.
+ * generated/maxloc1_8_s1.c: Regenerate.
+ * generated/maxloc1_8_s4.c: Regenerate.
+ * generated/maxloc1_16_s1.c: Regenerate.
+ * generated/maxloc1_16_s4.c: Regenerate.
+ * generated/minloc1_4_s1.c: Regenerate.
+ * generated/minloc1_4_s4.c: Regenerate.
+ * generated/minloc1_8_s1.c: Regenerate.
+ * generated/minloc1_8_s4.c: Regenerate.
+ * generated/minloc1_16_s1.c: Regenerate.
+ * generated/minloc1_16_s4.c: Regenerate.
+
+2025-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120191
+ * m4/maxloc2s.m4: For smaxloc2 call maxloc2 if mask is NULL or *mask.
+ Swap back and len arguments.
+ * m4/minloc2s.m4: Likewise.
+ * generated/maxloc2_4_s1.c: Regenerate.
+ * generated/maxloc2_4_s4.c: Regenerate.
+ * generated/maxloc2_8_s1.c: Regenerate.
+ * generated/maxloc2_8_s4.c: Regenerate.
+ * generated/maxloc2_16_s1.c: Regenerate.
+ * generated/maxloc2_16_s4.c: Regenerate.
+ * generated/minloc2_4_s1.c: Regenerate.
+ * generated/minloc2_4_s4.c: Regenerate.
+ * generated/minloc2_8_s1.c: Regenerate.
+ * generated/minloc2_8_s4.c: Regenerate.
+ * generated/minloc2_16_s1.c: Regenerate.
+ * generated/minloc2_16_s4.c: Regenerate.
+
2025-05-10 Yuao Ma <c8ef@outlook.com>
* io/read.c (read_f): Comment typo, explict -> explicit.
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 81c247a..2ae5626 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,8 @@
+2025-05-13 Andreas Schwab <schwab@suse.de>
+
+ * regex.c (regex_compile): Don't write beyond array bounds when
+ collecting range expression.
+
2025-03-29 Iain Sandoe <iain@sandoe.co.uk>
PR cobol/119283