Hello, This is a possible fix for Wnarrowing warning issues. Bootstrapped on x86_64 Linux.
diff --git a/gcc/cp/typeck2.cc b/gcc/cp/typeck2.cc 2 │ index 45edd180173..535f1bdfa3e 100644 3 │ --- a/gcc/cp/typeck2.cc 4 │ +++ b/gcc/cp/typeck2.cc 5 │ @@ -1142,6 +1142,10 @@ check_narrowing (tree type, tree init, tsubst_flags_t complain │ , 6 │ return ok; 7 │ } 8 │ 9 │ +/*pederror (loc, OPT_Wnarrowing, 10 │ + "narrowing conversion of constant expression from %qT to %qT " 11 │ + "inside { }", ftype, ftype); 12 │ +*/ 13 │ /* True iff TYPE is a C++20 "ordinary" character type. */ 14 │ 15 │ bool 16 │ diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc 17 │ index 07c76b6c652..457da185821 100644 18 │ --- a/gcc/diagnostic.cc 19 │ +++ b/gcc/diagnostic.cc 20 │ @@ -112,6 +112,23 @@ get_terminal_width (void) 21 │ return INT_MAX; 22 │ } 23 │ 24 │ +extern diagnostic_t pederror (location_t, int, const char *, ) 25 │ + ATTRIBUTE_GCC_DIAG(3, 4); 26 │ + 27 │ +diagnostic_t 28 │ +pederror (location_t loc, int opt, const char *gmsgid) 29 │ +{ 30 │ + va_list args; 31 │ + va_start (args, gmsgid); 32 │ + diagnostic_t result = diagnostic_report (loc, opt, gmsid, args); 33 │ + va_end (args); 34 │ + if (result == DK_WARNING) 35 │ + { 36 │ + if (flag_pedantic_errors) 37 │ + return diagnostic_report (loc, opt, gmsgid, args); 38 │ + } 39 │ + return result; 40 │ +} 41 │ /* Set caret_max_width to value. */ 42 │ void 43 │ diagnostic_set_caret_max_width (diagnostic_context *context, int value)