commit d71b9208f355d1b6d60eb0c43b7e41285183005b Author: Jakub Jelinek Date: Fri May 6 10:14:19 2022 +0200 Bump BASE-VER 2022-05-06 Jakub Jelinek * BASE-VER: Set to 12.1.1. diff --git a/gcc/BASE-VER b/gcc/BASE-VER index 77903b35f3a..a5545292c4e 100644 --- a/gcc/BASE-VER +++ b/gcc/BASE-VER @@ -1 +1 @@ -12.1.0 +12.1.1 commit e229f9b8f5d060056883ddb379b191c451e20139 Author: Richard Biener Date: Fri Apr 29 11:54:45 2022 +0200 tree-optimization/105394 - vector lowering of compares The following fixes missing handling of non-integer mode but masked (SVE or MVE) compares in vector lowering by using the appropriate mask element width to extract the components and adjust the index. 2022-04-29 Richard Biener PR tree-optimization/105394 * tree-vect-generic.cc (expand_vector_condition): Adjust comp_width for non-integer mode masks as well. (cherry picked from commit dfae0c5a29f336cdab234b28999f9ba9dc20a4d0) diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc index 8b7227e8b58..e5bd9dc7c76 100644 --- a/gcc/tree-vect-generic.cc +++ b/gcc/tree-vect-generic.cc @@ -1122,6 +1122,9 @@ expand_vector_condition (gimple_stmt_iterator *gsi, bitmap dce_ssa_names) tree atype = build_nonstandard_integer_type (prec, 1); a = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, atype, a); } + else if (!a_is_comparison + && VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (a))) + comp_width = vector_element_bits_tree (TREE_TYPE (a)); int nunits = nunits_for_known_piecewise_op (type); vec_alloc (v, nunits); @@ -1148,7 +1151,7 @@ expand_vector_condition (gimple_stmt_iterator *gsi, bitmap dce_ssa_names) build_zero_cst (TREE_TYPE (a))); } else - aa = tree_vec_extract (gsi, cond_type, a, width, index); + aa = tree_vec_extract (gsi, cond_type, a, comp_width, comp_index); result = gimplify_build3 (gsi, COND_EXPR, inner_type, aa, bb, cc); if (!CONSTANT_CLASS_P (result)) constant_p = false; commit 30b5b785abfff334bb50d7fd2051e991324f051f Author: Richard Biener Date: Mon May 2 09:30:27 2022 +0200 tree-optimization/105437 - BB vect with extern defs of throwing stmts We have to watch out for vectorized stmt insert locations if the def from the last stmt alters control flow. We constrain region building so we know the def is outside of the current region and thus we can insert at the region start point. 2022-05-02 Richard Biener PR tree-optimization/105437 * tree-vect-slp.cc (vect_schedule_slp_node): Handle the case where last_stmt alters control flow. * g++.dg/vect/pr105437.cc: New testcase. (cherry picked from commit 3a3eda000fdf4f8754c9a2535191091f1db0c2a2) diff --git a/gcc/testsuite/g++.dg/vect/pr105437.cc b/gcc/testsuite/g++.dg/vect/pr105437.cc new file mode 100644 index 00000000000..b3b440debef --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr105437.cc @@ -0,0 +1,24 @@ +// { dg-do compile } + +struct ControlClass +{ + virtual ~ControlClass(); + + int Width; + int Height; + unsigned IsToRepaint : 1; +}; + +struct SelectClass : ControlClass +{ + SelectClass(void); +}; + +int Non_Folded_Value(); + +SelectClass::SelectClass(void) +{ + int factor = Non_Folded_Value(); + Width = 32 << factor; + Height = 24 << factor; +} diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 805dd7e10e2..0d400c00df1 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -7302,6 +7302,13 @@ vect_schedule_slp_node (vec_info *vinfo, gcc_assert (seen_vector_def); si = gsi_after_labels (as_a (vinfo)->bbs[0]); } + else if (is_ctrl_altering_stmt (last_stmt)) + { + /* We split regions to vectorize at control altering stmts + with a definition so this must be an external which + we can insert at the start of the region. */ + si = gsi_after_labels (as_a (vinfo)->bbs[0]); + } else if (is_a (vinfo) && gimple_bb (last_stmt) != gimple_bb (stmt_info->stmt) && gimple_could_trap_p (stmt_info->stmt)) commit ae6271d5e30bdcaf834a6720632bf9c18ab462fd Author: Richard Biener Date: Tue May 3 10:23:51 2022 +0200 Fixup OPTION_SET_P usage in finish_options When some code was moved from process_options to finish_options, uses of OPTION_SET_P were not replaced with references to the opts_set option set. The following fixes this. 2022-05-03 Richard Biener * opts.cc: #undef OPTIONS_SET_P. (finish_options): Use opts_set instead of OPTIONS_SET_P. (cherry picked from commit 99f55024b0609e0d85f6c58828faad3c51a49749) diff --git a/gcc/opts.cc b/gcc/opts.cc index e5e3119a980..1378ef781d0 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -35,6 +35,9 @@ along with GCC; see the file COPYING3. If not see #include "version.h" #include "selftest.h" +/* In this file all option sets are explicit. */ +#undef OPTION_SET_P + static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff); /* Names of fundamental debug info formats indexed by enum @@ -1317,7 +1320,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, debug_info_level = DINFO_LEVEL_NONE; } - if (!OPTION_SET_P (debug_nonbind_markers_p)) + if (!opts_set->x_debug_nonbind_markers_p) debug_nonbind_markers_p = (optimize && debug_info_level >= DINFO_LEVEL_NORMAL @@ -1327,14 +1330,14 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and so we need to drop it if we are called from optimize attribute. */ if (debug_info_level == DINFO_LEVEL_NONE - && !OPTION_SET_P (flag_var_tracking)) + && !opts_set->x_flag_var_tracking) flag_var_tracking = false; /* One could use EnabledBy, but it would lead to a circular dependency. */ - if (!OPTION_SET_P (flag_var_tracking_uninit)) + if (!opts_set->x_flag_var_tracking_uninit) flag_var_tracking_uninit = flag_var_tracking; - if (!OPTION_SET_P (flag_var_tracking_assignments)) + if (!opts_set->x_flag_var_tracking_assignments) flag_var_tracking_assignments = (flag_var_tracking && !(flag_selective_scheduling || flag_selective_scheduling2)); commit 1b13a6e0dc2f61fc26ebfd33ee8549da45286f34 Author: Richard Biener Date: Tue May 3 10:36:30 2022 +0200 middle-end/105461 - opts processing of -fvar-tracking The flag_var_tracking reset in finish_options doesn't match the condition in process_options, in particular we fail to reset it when the option was specified on the command line. The following fixes this and also alters the debug info level guard to match the one in process_options. 2022-05-03 Richard Biener PR middle-end/105461 * opts.cc (finish_options): Match the condition to disable flag_var_tracking to that of process_options. * gcc.dg/pr105461.c: New testcase. (cherry picked from commit 6b4cc784806ac8676a08ecbbeadbd1bfa56073bb) diff --git a/gcc/opts.cc b/gcc/opts.cc index 1378ef781d0..2ffbf429b7b 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -1329,8 +1329,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and so we need to drop it if we are called from optimize attribute. */ - if (debug_info_level == DINFO_LEVEL_NONE - && !opts_set->x_flag_var_tracking) + if (debug_info_level < DINFO_LEVEL_NORMAL) flag_var_tracking = false; /* One could use EnabledBy, but it would lead to a circular dependency. */ diff --git a/gcc/testsuite/gcc.dg/pr105461.c b/gcc/testsuite/gcc.dg/pr105461.c new file mode 100644 index 00000000000..1e6743ccac2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105461.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fassociative-math -fsignaling-nans -fvar-tracking -w" } */ + +int +bar (float *x, int y) +{ + *x = y; + + return *x; +} + +__attribute__ ((optimize ("O2"))) void +foo (float *x, int y) +{ + int a = bar (x, y); +} commit f2c2ebb9eed4fa38a3e56dad4a2339a989b11e87 Author: Richard Biener Date: Thu May 5 09:34:59 2022 +0200 tree-optimization/105484 - VEC_SET and EH When the IL representation of VEC_SET is marked as throwing (unnecessarily), we need to clean that when replacing it with the .VEC_SET internal function call which cannot throw. 2022-05-05 Richard Biener PR tree-optimization/105484 * gimple-isel.cc (gimple_expand_vec_set_expr): Clean EH, return whether the CFG changed. (gimple_expand_vec_exprs): When the CFG changed, clean it up. * gcc.dg/torture/pr105484.c: New testcase. (cherry picked from commit e1a41143a2e24c65d94364fd82b165ff71a759d8) diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc index a8f7a0d25d0..4b309a05a9a 100644 --- a/gcc/gimple-isel.cc +++ b/gcc/gimple-isel.cc @@ -49,22 +49,23 @@ along with GCC; see the file COPYING3. If not see _8 = .VEC_SET (_7, i_4(D), _1); u = _8; */ -static gimple * +static bool gimple_expand_vec_set_expr (struct function *fun, gimple_stmt_iterator *gsi) { enum tree_code code; gcall *new_stmt = NULL; gassign *ass_stmt = NULL; + bool cfg_changed = false; /* Only consider code == GIMPLE_ASSIGN. */ gassign *stmt = dyn_cast (gsi_stmt (*gsi)); if (!stmt) - return NULL; + return false; tree lhs = gimple_assign_lhs (stmt); code = TREE_CODE (lhs); if (code != ARRAY_REF) - return NULL; + return false; tree val = gimple_assign_rhs1 (stmt); tree op0 = TREE_OPERAND (lhs, 0); @@ -98,12 +99,15 @@ gimple_expand_vec_set_expr (struct function *fun, gimple_stmt_iterator *gsi) gimple_set_location (ass_stmt, loc); gsi_insert_before (gsi, ass_stmt, GSI_SAME_STMT); + basic_block bb = gimple_bb (stmt); gimple_move_vops (ass_stmt, stmt); - gsi_remove (gsi, true); + if (gsi_remove (gsi, true) + && gimple_purge_dead_eh_edges (bb)) + cfg_changed = true; } } - return ass_stmt; + return cfg_changed; } /* Expand all VEC_COND_EXPR gimple assignments into calls to internal @@ -297,6 +301,7 @@ gimple_expand_vec_exprs (struct function *fun) basic_block bb; hash_map vec_cond_ssa_name_uses; auto_bitmap dce_ssa_names; + bool cfg_changed = false; FOR_EACH_BB_FN (bb, fun) { @@ -311,7 +316,7 @@ gimple_expand_vec_exprs (struct function *fun) gsi_replace (&gsi, g, false); } - gimple_expand_vec_set_expr (fun, &gsi); + cfg_changed |= gimple_expand_vec_set_expr (fun, &gsi); if (gsi_end_p (gsi)) break; } @@ -323,7 +328,7 @@ gimple_expand_vec_exprs (struct function *fun) simple_dce_from_worklist (dce_ssa_names); - return 0; + return cfg_changed ? TODO_cleanup_cfg : 0; } namespace { diff --git a/gcc/testsuite/gcc.dg/torture/pr105484.c b/gcc/testsuite/gcc.dg/torture/pr105484.c new file mode 100644 index 00000000000..f2a5eb8a7ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr105484.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fnon-call-exceptions -fno-tree-dce -fno-tree-forwprop" } */ +/* { dg-additional-options "-march=cannonlake" { target x86_64-*-* i?86-*-* } } */ + +typedef int __attribute__((__vector_size__ (16))) V; + +void bar (int i); + +void +foo (int i) +{ + V v; + __builtin_mul_overflow (7, i, &v[i]); + bar ((V){}[3]); +} commit 8b26d0e28bb1875392f0689266a5f5f0a7737418 Author: Jakub Jelinek Date: Wed May 4 10:07:36 2022 +0200 c++: Don't emit deprecated warnings or unavailable errors on lambda declarations On the following testcase, we emit deprecated warnings or unavailable errors even on merge declarations of those lambdas (the dg-bogus directives), while IMHO we should emit them only when something actually calls those lambdas. The following patch temporarily disables that diagnostics during maybe_add_lambda_conv_op. PR2173R1 also says that ambiguity between attribute-specifier-seq at the end of requires-clause and attribute-specifier-seq from lambda-expression should be resolved to attribute-specifier-seq for the latter. Do we need to do anything about that? I mean, can a valid requires-clause end with an attribute-specifier-seq? Say operator int [[]] is valid primary expression, but requires operator int [[]] isn't valid, nor is requires operator int, no? 2022-05-04 Jakub Jelinek * lambda.cc: Include decl.h. (maybe_add_lambda_conv_op): Temporarily override deprecated_state to UNAVAILABLE_DEPRECATED_SUPPRESS. * g++.dg/cpp23/lambda-attr1.C: New test. * g++.dg/cpp23/lambda-attr2.C: New test. (cherry picked from commit 1c8e9bed9b9d46d479b83ae05b334543f66961fb) diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index 65579edc316..ce49e28cd4c 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "toplev.h" #include "gimplify.h" #include "target.h" +#include "decl.h" /* Constructor for a lambda expression. */ @@ -1193,9 +1194,14 @@ maybe_add_lambda_conv_op (tree type) } } else - call = build_call_a (callop, - direct_argvec->length (), - direct_argvec->address ()); + { + /* Don't warn on deprecated or unavailable lambda declarations, unless + the lambda is actually called. */ + auto du = make_temp_override (deprecated_state, + UNAVAILABLE_DEPRECATED_SUPPRESS); + call = build_call_a (callop, direct_argvec->length (), + direct_argvec->address ()); + } CALL_FROM_THUNK_P (call) = 1; SET_EXPR_LOCATION (call, UNKNOWN_LOCATION); diff --git a/gcc/testsuite/g++.dg/cpp23/lambda-attr1.C b/gcc/testsuite/g++.dg/cpp23/lambda-attr1.C new file mode 100644 index 00000000000..a653c732fca --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/lambda-attr1.C @@ -0,0 +1,37 @@ +// P2173R1 - Attributes on Lambda-Expressions +// { dg-do compile { target c++11 } } + +void +foo (bool x, bool y) +{ + auto a = [][[noreturn]] () {}; // { dg-warning "'noreturn' function does return" } + if (x) + a (); + auto b = [][[noreturn]] {}; // { dg-warning "'noreturn' function does return" } + if (y) + b (); + auto c = [] [[ deprecated ]] () {}; // { dg-bogus "is deprecated" } + c (); // { dg-warning "'foo\\\(bool, bool\\\)::' is deprecated" } + auto d = [][[deprecated]] {}; // { dg-bogus "is deprecated" } + d (); // { dg-warning "'foo\\\(bool, bool\\\)::' is deprecated" } +#if __cpp_generic_lambdas >= 201304 + auto e = [] [[deprecated]] (auto x) {}; // { dg-bogus "is deprecated" } + e (0.0); // { dg-warning "'foo\\\(bool, bool\\\)::\[^\n\r]*' is deprecated" "" { target c++14 } } +#endif +#if __cpp_generic_lambdas >= 201707 + auto f = [] [[deprecated]] (T) {}; // { dg-bogus "is deprecated" } + f (1); // { dg-warning "'foo\\\(bool, bool\\\)::\[^\n\r]*' is deprecated" "" { target c++20 } } +#endif + auto g = [][[nodiscard]](int) { return 1; }; + g (1); // { dg-warning "ignoring return value of 'foo\\\(bool, bool\\\)::', declared with attribute 'nodiscard'" } + auto h = [] [[nodiscard]] { return 0; }; + h (); // { dg-warning "ignoring return value of 'foo\\\(bool, bool\\\)::', declared with attribute 'nodiscard'" } + auto i = [] [[ gnu::unavailable ]] () {}; + auto j = [][[gnu::unavailable]] {}; +#if __cpp_generic_lambdas >= 201304 + auto k = [] [[gnu::unavailable]] (auto x) {}; // { dg-bogus "is unavailable" } +#endif +#if __cpp_generic_lambdas >= 201707 + auto l = [] [[gnu::unavailable]] (T) {}; // { dg-bogus "is unavailable" } +#endif +} diff --git a/gcc/testsuite/g++.dg/cpp23/lambda-attr2.C b/gcc/testsuite/g++.dg/cpp23/lambda-attr2.C new file mode 100644 index 00000000000..0392b179b86 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/lambda-attr2.C @@ -0,0 +1,19 @@ +// P2173R1 - Attributes on Lambda-Expressions +// { dg-do compile { target c++11 } } + +void +foo (bool x, bool y) +{ + auto i = [] [[ gnu::unavailable ]] () {}; + i (); // { dg-error "'foo\\\(bool, bool\\\)::' is unavailable" } + auto j = [][[gnu::unavailable]] {}; + j (); // { dg-error "'foo\\\(bool, bool\\\)::' is unavailable" } +#if __cpp_generic_lambdas >= 201304 + auto k = [] [[gnu::unavailable]] (auto x) {}; // { dg-bogus "is unavailable" } + k (0.0); // { dg-error "'foo\\\(bool, bool\\\)::\[^\n\r]*' is unavailable" "" { target c++14 } } +#endif +#if __cpp_generic_lambdas >= 201707 + auto l = [] [[gnu::unavailable]] (T) {}; // { dg-bogus "is unavailable" } + l (1); // { dg-error "'foo\\\(bool, bool\\\)::\[^\n\r]*' is unavailable" "" { target c++20 } } +#endif +} commit e8cd7d0066e0ba2a082b0e7de35e883837546583 Author: Alexandre Oliva Date: Fri May 6 07:26:04 2022 -0300 [PR105324] libstdc++: testsuite: pr105324 requires FP from_char The floating-point overloads of from_char are only declared if _GLIBCXX_HAVE_USELOCALE is #defined as nonzero. That's exposed from charconv as __cpp_lib_to_chars >= 201611L, so guard the test body with that. for libstdc++-v3/ChangeLog PR c++/105324 * testsuite/20_util/from_chars/pr105324.cc: Guard test body with conditional for floating-point overloads of from_char. (cherry picked from commit 25389f3de489c25a6983db96428a6bf06aedc829) diff --git a/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc b/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc index cecb17e41cc..ef24b4c5c7b 100644 --- a/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc +++ b/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc @@ -5,10 +5,12 @@ int main() { +#if __cpp_lib_to_chars >= 201611L // FP from_char not available otherwise. // PR libstdc++/105324 // std::from_chars() assertion at floating_from_chars.cc:78 std::string s(512, '1'); s[1] = '.'; long double d; std::from_chars(s.data(), s.data() + s.size(), d); +#endif } commit 39c56695c70a2052fc6bdcfca606dfff9c2fa975 Author: Richard Biener Date: Wed Apr 27 08:28:31 2022 +0200 middle-end/105376 - invalid REAL_CST for DFP constant We are eventually ICEing in decimal_to_decnumber on non-decimal REAL_VALUE_TYPE that creep in from uses of build_real (..., dconst*) for DFP types. The following extends the decimal_to_decnumber special-casing of dconst* to build_real, avoiding the bogus REAL_CSTs from creeping into the IL and modified to ones not handled by the decimal_to_decnumber special casing. It also makes sure to ICE for not handled dconst* values at the point we build the REAL_CST. 2022-04-27 Richard Biener PR middle-end/105376 * tree.cc (build_real): Special case dconst* arguments for decimal floating point types. * gcc.dg/pr105376.c: New testcase. (cherry picked from commit e27eef7478f30ea79048dbde3317e89679d75a6e) diff --git a/gcc/testsuite/gcc.dg/pr105376.c b/gcc/testsuite/gcc.dg/pr105376.c new file mode 100644 index 00000000000..f19ecf4aab2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105376.c @@ -0,0 +1,9 @@ +/* { dg-do compile { target dfp } } */ +/* { dg-options "-O -g" } */ + +void +foo (_Decimal64 d, _Decimal64 e) +{ + d -= -d; + d *= -e; +} diff --git a/gcc/tree.cc b/gcc/tree.cc index 3c39be4f501..4cf3785270b 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -70,6 +70,7 @@ along with GCC; see the file COPYING3. If not see #include "escaped_string.h" #include "gimple-range.h" #include "gomp-constants.h" +#include "dfp.h" /* Tree code classes. */ @@ -2383,6 +2384,26 @@ build_real (tree type, REAL_VALUE_TYPE d) REAL_VALUE_TYPE *dp; int overflow = 0; + /* dconst{1,2,m1,half} are used in various places in + the middle-end and optimizers, allow them here + even for decimal floating point types as an exception + by converting them to decimal. */ + if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)) + && d.cl == rvc_normal + && !d.decimal) + { + if (memcmp (&d, &dconst1, sizeof (d)) == 0) + decimal_real_from_string (&d, "1"); + else if (memcmp (&d, &dconst2, sizeof (d)) == 0) + decimal_real_from_string (&d, "2"); + else if (memcmp (&d, &dconstm1, sizeof (d)) == 0) + decimal_real_from_string (&d, "-1"); + else if (memcmp (&d, &dconsthalf, sizeof (d)) == 0) + decimal_real_from_string (&d, "0.5"); + else + gcc_unreachable (); + } + /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE. Consider doing it via real_convert now. */ commit eed2cd48cd5e8d94ceb15c5fd86cdd27926b54b5 Author: Patrick Palka Date: Mon May 2 07:01:33 2022 -0400 libstdc++: Don't use std::tolower in [PR103911] As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using std::tolower in either. PR libstdc++/103911 libstdc++-v3/ChangeLog: * src/c++17/floating_from_chars.cc (find_end_of_float): Accept two delimeters for the exponent part in the form of a possibly NULL string of length two. Don't use std::tolower. (pattern): Adjust calls to find_end_of_float accordingly. (cherry picked from commit 86d821ddf5615e693ead667b2580898f46de8eb9) diff --git a/libstdc++-v3/src/c++17/floating_from_chars.cc b/libstdc++-v3/src/c++17/floating_from_chars.cc index e7f3a58cf18..5d2a931d5dd 100644 --- a/libstdc++-v3/src/c++17/floating_from_chars.cc +++ b/libstdc++-v3/src/c++17/floating_from_chars.cc @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #if _GLIBCXX_HAVE_XLOCALE_H @@ -142,10 +141,10 @@ namespace // Find initial portion of [first, last) containing a floating-point number. // The string `digits` is either `dec_digits` or `hex_digits` - // and `exp` is 'e' or 'p' or '\0'. + // and `exp` is "eE", "pP" or NULL. const char* find_end_of_float(const char* first, const char* last, const char* digits, - char exp) + const char *exp) { while (first < last && strchr(digits, *first) != nullptr) ++first; @@ -155,7 +154,7 @@ namespace while (first < last && strchr(digits, *first)) ++first; } - if (first < last && exp != 0 && std::tolower((unsigned char)*first) == exp) + if (first < last && exp != nullptr && (*first == exp[0] || *first == exp[1])) { ++first; if (first < last && (*first == '-' || *first == '+')) @@ -237,7 +236,7 @@ namespace if ((last - first + 2) > buffer_resource::guaranteed_capacity()) { - last = find_end_of_float(first + neg, last, digits, 'p'); + last = find_end_of_float(first + neg, last, digits, "pP"); #ifndef __cpp_exceptions if ((last - first + 2) > buffer_resource::guaranteed_capacity()) { @@ -261,7 +260,7 @@ namespace if ((last - first) > buffer_resource::guaranteed_capacity()) { last = find_end_of_float(first + neg, last, digits, - "e"[fmt == chars_format::fixed]); + fmt == chars_format::fixed ? nullptr : "eE"); #ifndef __cpp_exceptions if ((last - first) > buffer_resource::guaranteed_capacity()) { commit 8f2b7c13567250d86367c0274859f6c2fe162082 Author: Patrick Palka Date: Wed May 4 17:08:08 2022 -0400 c++: ICE during aggr CTAD for member tmpl [PR105476] Here we're crashing from maybe_aggr_guide ultimately because processing_template_decl isn't set when partially instantiating the guide's parameter list; this causes us to force completion of the dependent type Visitor_functior, which of course fails and results in an unexpected error_mark_node (the instantation should always succeed). PR c++/105476 gcc/cp/ChangeLog: * pt.cc (maybe_aggr_guide): Set processing_template_decl when partially instantiating the guide's parameter list. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/class-deduction-aggr13.C: New test. * g++.dg/cpp2a/class-deduction-aggr13a.C: New test. (cherry picked from commit 8a98e3ff7e80bf2936f163d50309fd88d72564a0) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 81f7ef5c42b..254586c7700 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -29556,7 +29556,11 @@ maybe_aggr_guide (tree tmpl, tree init, vec *args) PARMS, so that its template level is properly reduced and we don't get mismatches when deducing types using the guide with PARMS. */ if (member_template_p) - parms = tsubst (parms, DECL_TI_ARGS (tmpl), complain, init); + { + ++processing_template_decl; + parms = tsubst (parms, DECL_TI_ARGS (tmpl), complain, init); + --processing_template_decl; + } } else if (TREE_CODE (init) == TREE_LIST) { diff --git a/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13.C b/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13.C new file mode 100644 index 00000000000..d3b21c722c8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13.C @@ -0,0 +1,11 @@ +// PR c++/105476 +// { dg-do compile { target c++17 } } + +template struct Visitor_functor; + +template struct Events { + template struct Visitor : Visitor_functor::type_t... { }; +}; + +using ev_t = Events; +ev_t::Visitor v = { {} }; // { dg-error "too many initializers" } diff --git a/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13a.C b/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13a.C new file mode 100644 index 00000000000..69ae5dd4b60 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr13a.C @@ -0,0 +1,18 @@ +// PR c++/105476 +// { dg-do compile { target c++20 } } +// A valid version of class-deduction-aggr13.C. + +template struct Visitor_functor; + +template<> struct Visitor_functor { + using type_t = int; +}; + +template struct Events { + template struct Visitor { + Visitor_functor::type_t t; + }; +}; + +using ev_t = Events; +ev_t::Visitor v = { {} }; commit c3b582a444ef15c7142117667b00e467961b6416 Author: H.J. Lu Date: Thu May 5 13:59:16 2022 -0700 libsanitizer: cherry-pick commit b226894d475b from upstream cherry-pick: b226894d475b [sanitizer] [sanitizer] Correct GetTls for x32 (cherry picked from commit a48be2e513d9ddb2fa8800a158f18502a0923aec) diff --git a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp index 0c260b6b516..4f22c78a183 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -463,7 +463,11 @@ static void GetTls(uptr *addr, uptr *size) { #elif SANITIZER_GLIBC && defined(__x86_64__) // For aarch64 and x86-64, use an O(1) approach which requires relatively // precise ThreadDescriptorSize. g_tls_size was initialized in InitTlsSize. +# if SANITIZER_X32 + asm("mov %%fs:8,%0" : "=r"(*addr)); +# else asm("mov %%fs:16,%0" : "=r"(*addr)); +# endif *size = g_tls_size; *addr -= *size; *addr += ThreadDescriptorSize(); commit e38194f5ad3074927aba811f7a71d19ea388e9bb Author: H.J. Lu Date: Fri Apr 29 10:26:24 2022 -0700 x86: Add missing .note.GNU-stack to assembly source Add .note.GNU-stack assembly source to avoid linker warning: ld: warning: /tmp/ccPZSZ7Z.o: missing .note.GNU-stack section implies executable stack ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker FAIL: gcc.target/i386/iamcu/test_3_element_struct_and_unions.c compilation, -O0 PR testsuite/105433 * gcc.target/i386/iamcu/asm-support.S: Add .note.GNU-stack. * gcc.target/x86_64/abi/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512f/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S: Likewise. * gcc.target/x86_64/abi/ms-sysv/do-test.S: Likewise. (cherry picked from commit 7e1f30d7edd433ca0fc28ae9ac1ce9b522790baf) diff --git a/gcc/testsuite/gcc.target/i386/iamcu/asm-support.S b/gcc/testsuite/gcc.target/i386/iamcu/asm-support.S index b4a4a140e54..db08f52a34f 100644 --- a/gcc/testsuite/gcc.target/i386/iamcu/asm-support.S +++ b/gcc/testsuite/gcc.target/i386/iamcu/asm-support.S @@ -300,3 +300,4 @@ iamcu_noprintf: .align 4 .LCiamcu_noprintf1: .long 1132527616 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S index 7a8ed03d119..2f8d3a09c6b 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S @@ -82,3 +82,4 @@ snapshot_ret: .comm xmm_regs,256,32 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S index 73a59191d6d..77b3480ac32 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S @@ -79,3 +79,4 @@ snapshot_ret: .comm ymm_regs,512,32 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S index 0ef82876dd9..2e3306c44cb 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S @@ -95,3 +95,4 @@ snapshot_ret: .comm zmm_regs,2048,64 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/asm-support.S index 7849acd2649..0793acf048b 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/asm-support.S @@ -79,3 +79,4 @@ snapshot_ret: .comm xmm_regs,256,32 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S index 73a59191d6d..77b3480ac32 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S @@ -79,3 +79,4 @@ snapshot_ret: .comm ymm_regs,512,32 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S index 0ef82876dd9..2e3306c44cb 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S @@ -95,3 +95,4 @@ snapshot_ret: .comm zmm_regs,2048,64 .comm x87_regs,128,32 .comm volatile_var,8,8 + .section .note.GNU-stack,"",@progbits diff --git a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S index 7b891a140dc..f5dff4c10ab 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S +++ b/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S @@ -30,6 +30,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #ifdef __ELF__ # define FN_TYPE(fn) .type fn,@function # define FN_SIZE(fn) .size fn,.-fn + .section .note.GNU-stack,"",@progbits #else # define FN_TYPE(fn) # define FN_SIZE(fn) commit e6b1ac334ac61f72536f3479f735ea3514f1309d Author: Michael Meissner Date: Fri May 6 11:39:13 2022 -0500 rs6000: Ignore fusion option flags for inlining test [PR102059] The -mpower8-fusion and -mpower10-fusion options do not modify which instructions we can generate, so ignore them when deciding whether we can inline callee into caller. 2022-05-06 Michael Meissner gcc/ PR target/102059 * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore -mpower8-fusion and -mpower10-fusion options for inlining purposes. gcc/testsuite/ PR target/102059 * gcc.target/powerpc/pr102059-4.c: New test. (cherry picked from commit 2fb654f77d5292864ef57040f7bc01d7a975f6d9) diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index bc619592b9e..4030864aa1a 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -25350,6 +25350,11 @@ rs6000_can_inline_p (tree caller, tree callee) } } + /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining + purposes. */ + callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); + explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); + /* The callee's options must be a subset of the caller's options, i.e. a vsx function may inline an altivec function, but a no-vsx function must not inline a vsx function. However, for those options that the diff --git a/gcc/testsuite/gcc.target/powerpc/pr102059-4.c b/gcc/testsuite/gcc.target/powerpc/pr102059-4.c new file mode 100644 index 00000000000..5fe66f8af4b --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr102059-4.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mdejagnu-cpu=power10" } */ +/* { dg-require-effective-target power10_ok } */ + +/* Verify that power10 can explicity include functions compiled for power8. + The issue was -mcpu=power8 enables -mpower8-fusion, but -mcpu=power9 or + -mcpu=power10 do not set power8-fusion by default. Thus when doing this + compilation, they would get an error that the inline function failed in its + inlining due to having incompatible options. */ + +static inline int __attribute__ ((always_inline,target("cpu=power8"))) +foo (int *b) +{ + *b += 10; + return *b; +} + +int +bar (int *a) +{ + *a = foo (a); + return 0; +} commit 03257e7ee31385a364b711898c8f1510fd638efe Author: Jonathan Wakely Date: Fri May 6 21:19:17 2022 +0100 libstdc++: Fix deserialization for std::normal_distribution [PR105502] This fixes a regression in std::normal_distribution deserialization that caused the object to be left unchanged if the __state_avail value read from the stream was false. libstdc++-v3/ChangeLog: PR libstdc++/105502 * include/bits/random.tcc (operator>>(basic_istream&, normal_distribution&)): Update state when __state_avail is false. * testsuite/26_numerics/random/normal_distribution/operators/serialize.cc: Check that deserialized object equals serialized one. (cherry picked from commit 909ef4e2727ddc50a32d6ad379a1f1ccc1043c6a) diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index 6c72e991007..87a16a21336 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -1961,7 +1961,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool __saved_avail; if (__is >> __mean >> __stddev >> __saved_avail) { - if (__saved_avail && (__is >> __x._M_saved)) + if (!__saved_avail || (__is >> __x._M_saved)) { __x._M_saved_available = __saved_avail; __x.param(param_type(__mean, __stddev)); diff --git a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc index 9d8f8278fb3..d4f9f374643 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc @@ -25,6 +25,7 @@ #include #include +#include void test01() @@ -37,10 +38,43 @@ test01() str << u; str >> v; + VERIFY( u == v ); +} + +void +test_pr105502() +{ + // PR libstdc++/105502 std::normal_distribution deserialization issue + std::stringstream str; + std::normal_distribution<> d{1, 2}, d2; + std::minstd_rand0 g; + str << d; + VERIFY( str ); + str >> d2; + VERIFY( str ); + VERIFY( d == d2 ); + + (void) d(g); // sets d._M_saved_available = true + str.str(""); + str.clear(); + str << d; + VERIFY( str ); + str >> d2; + VERIFY( str ); + VERIFY( d == d2 ); + + (void) d(g); // sets d._M_saved_available = false + str.str(""); + str.clear(); + str << d; + VERIFY( str ); + str >> d2; + VERIFY( str ); + VERIFY( d == d2 ); } int main() { test01(); - return 0; + test_pr105502(); } commit d413626f99f982d5f81889892d8496bcca83acb1 Author: GCC Administrator Date: Sat May 7 00:18:53 2022 +0000 Daily bump. diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 76e3cb0ce82..9925a567602 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,10 @@ +2022-05-06 Jakub Jelinek + + Backported from master: + 2022-05-06 Jakub Jelinek + + * gennews (files): Add files for GCC 12. + 2022-05-06 Release Manager * GCC 12.1.0 released. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 609fd421e6b..375565c834c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,66 @@ +2022-05-06 Michael Meissner + + Backported from master: + 2022-05-06 Michael Meissner + + PR target/102059 + * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore -mpower8-fusion + and -mpower10-fusion options for inlining purposes. + +2022-05-06 Richard Biener + + Backported from master: + 2022-04-29 Richard Biener + + PR middle-end/105376 + * tree.cc (build_real): Special case dconst* arguments + for decimal floating point types. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-05 Richard Biener + + PR tree-optimization/105484 + * gimple-isel.cc (gimple_expand_vec_set_expr): Clean EH, return + whether the CFG changed. + (gimple_expand_vec_exprs): When the CFG changed, clean it up. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-03 Richard Biener + + PR middle-end/105461 + * opts.cc (finish_options): Match the condition to + disable flag_var_tracking to that of process_options. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-03 Richard Biener + + * opts.cc: #undef OPTIONS_SET_P. + (finish_options): Use opts_set instead of OPTIONS_SET_P. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-02 Richard Biener + + PR tree-optimization/105437 + * tree-vect-slp.cc (vect_schedule_slp_node): Handle the + case where last_stmt alters control flow. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-03 Richard Biener + + PR tree-optimization/105394 + * tree-vect-generic.cc (expand_vector_condition): Adjust + comp_width for non-integer mode masks as well. + 2022-05-06 Release Manager * GCC 12.1.0 released. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 50478337b49..e490589f7bf 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20220506 +20220507 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 411bd5a959b..1ffada88326 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,21 @@ +2022-05-06 Patrick Palka + + Backported from master: + 2022-05-04 Patrick Palka + + PR c++/105476 + * pt.cc (maybe_aggr_guide): Set processing_template_decl when + partially instantiating the guide's parameter list. + +2022-05-06 Jakub Jelinek + + Backported from master: + 2022-05-04 Jakub Jelinek + + * lambda.cc: Include decl.h. + (maybe_add_lambda_conv_op): Temporarily override deprecated_state to + UNAVAILABLE_DEPRECATED_SUPPRESS. + 2022-05-06 Release Manager * GCC 12.1.0 released. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2f7ffdfac60..41c2037a6b0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,75 @@ +2022-05-06 Michael Meissner + + Backported from master: + 2022-05-06 Michael Meissner + + PR target/102059 + * gcc.target/powerpc/pr102059-4.c: New test. + +2022-05-06 H.J. Lu + + Backported from master: + 2022-05-02 H.J. Lu + + PR testsuite/105433 + * gcc.target/i386/iamcu/asm-support.S: Add .note.GNU-stack. + * gcc.target/x86_64/abi/asm-support.S: Likewise. + * gcc.target/x86_64/abi/avx/asm-support.S: Likewise. + * gcc.target/x86_64/abi/avx512f/asm-support.S: Likewise. + * gcc.target/x86_64/abi/avx512fp16/asm-support.S: Likewise. + * gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S: Likewise. + * gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S: Likewise. + * gcc.target/x86_64/abi/ms-sysv/do-test.S: Likewise. + +2022-05-06 Patrick Palka + + Backported from master: + 2022-05-04 Patrick Palka + + PR c++/105476 + * g++.dg/cpp2a/class-deduction-aggr13.C: New test. + * g++.dg/cpp2a/class-deduction-aggr13a.C: New test. + +2022-05-06 Richard Biener + + Backported from master: + 2022-04-29 Richard Biener + + PR middle-end/105376 + * gcc.dg/pr105376.c: New testcase. + +2022-05-06 Jakub Jelinek + + Backported from master: + 2022-05-04 Jakub Jelinek + + * g++.dg/cpp23/lambda-attr1.C: New test. + * g++.dg/cpp23/lambda-attr2.C: New test. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-05 Richard Biener + + PR tree-optimization/105484 + * gcc.dg/torture/pr105484.c: New testcase. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-03 Richard Biener + + PR middle-end/105461 + * gcc.dg/pr105461.c: New testcase. + +2022-05-06 Richard Biener + + Backported from master: + 2022-05-02 Richard Biener + + PR tree-optimization/105437 + * g++.dg/vect/pr105437.cc: New testcase. + 2022-05-06 Release Manager * GCC 12.1.0 released. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ea745c2f816..a8e513d9238 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,35 @@ +2022-05-06 Jonathan Wakely + + Backported from master: + 2022-05-06 Jonathan Wakely + + PR libstdc++/105502 + * include/bits/random.tcc + (operator>>(basic_istream&, normal_distribution&)): + Update state when __state_avail is false. + * testsuite/26_numerics/random/normal_distribution/operators/serialize.cc: + Check that deserialized object equals serialized one. + +2022-05-06 Patrick Palka + + Backported from master: + 2022-05-02 Patrick Palka + + PR libstdc++/103911 + * src/c++17/floating_from_chars.cc (find_end_of_float): Accept + two delimeters for the exponent part in the form of a possibly + NULL string of length two. Don't use std::tolower. + (pattern): Adjust calls to find_end_of_float accordingly. + +2022-05-06 Alexandre Oliva + + Backported from master: + 2022-05-03 Alexandre Oliva + + PR c++/105324 + * testsuite/20_util/from_chars/pr105324.cc: Guard test body + with conditional for floating-point overloads of from_char. + 2022-05-06 Release Manager * GCC 12.1.0 released. commit 0870ab613388f27e13b4b838f4b87021f2e4ead5 Author: GCC Administrator Date: Sun May 8 00:19:11 2022 +0000 Daily bump. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index e490589f7bf..f5a8b1963ca 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20220507 +20220508