On Mon, Nov 20, 2023 at 10:56:09AM +0100, Florian Weimer wrote: > gcc/ > > * doc/invoke.texi (Warning Options): Document changes.
Let's be more specific here. > gcc/c/ > > PR c/96284 > PR c/106416 > * c-typeck.cc (build_conditional_expr): Use permerror_opt for > pointer/integer type mismatches, based on -Wint-conversion. > (pedwarn_permerror_init, permerror_init): New function. > (pedwarn_init): Call pedwarn_permerror_init. > (convert_for_assignment): Use permerror_opt and > permerror_init for -Wint-conversion warnings. A few extra whitespaces. > gcc/testsuite/ > > * gcc.dg/permerror-default.c (int_conversion_1) > (int_conversion_2): Expect the new permerrors. > * gcc.dg/permerror-gnu89-nopermissive.c (int_conversion_1) > (int_conversion_2): Likewise. > * gcc.dg/permerror-system.c: Likewise. > * c-c++-common/pr77624-1.c (foo, bar): Expect > error instead of warning. > * gcc.dg/Wint-conversion-2.c: Compile with -fpermissive due > to expected int-conversion warning. > * gcc.dg/Wint-conversion-3.c: Likewise. > * gcc.dg/Wint-conversion-4.c: New test. Based on > gcc.dg/Wint-conversion-3.c. Expect int-conversion errors. > * gcc.dg/assign-warn-1.c: Compile with -fpermissive. > * gcc.dg/assign-warn-4.c: New file. Extracted from > assign-warn1.c. Expect int-cnversion errors. "int-conversion" (sorry about pointing out typos...) > * gcc.dg/diagnostic-types-1.c: compile with -fpermissive. s/compile/Compile/ > * gcc.dg/diagnostic-types-2.c: New file. Extracted from > gcc.dg/diagnostic-types-1.c. Expect some errors instead of > warnings. > * gcc.dg/gomp/pr35738.c: Compile with -fpermissive due to > expected int-conversion error. > * gcc.dg/gomp/pr35738-2.c: New test. Based on > gcc.dg/gomp/pr35738.c. Expect int-converison errors. > * gcc.dg/init-excess-3.c: Expect int-converison errors. > * gcc.dg/overflow-warn-1.c: Likewise. > * gcc.dg/overflow-warn-3.c: Likewise. > * gcc.dg/param-type-mismatch.c: Compile with -fpermissive. > * gcc.dg/param-type-mismatch-2.c: New test. Copied from > gcc.dg/param-type-mismatch.c. Expect errors. > * gcc.dg/pr61162-2.c: Compile with -fpermissive. > * gcc.dg/pr61162-3.c: New test. Extracted from > gcc.dg/pr61162-2.c. Expect int-conversion errors. > * gcc.dg/spec-barrier-3.c: Use -fpermissive due to expected > int-conversion error. > * gcc.dg/spec-barrier-3a.c: New test. Based on > gcc.dg/spec-barrier-3.c. Expect int-conversion errors. > * gcc.target/aarch64/acle/memtag_2.c: Use -fpermissive due to expected > int-conversion error. > * gcc.target/aarch64/acle/memtag_2a.c: New test. Copied from > gcc.target/aarch64/acle/memtag_2.c. Expect error. > * gcc.target/aarch64/sve/acle/general-c/load_3.c (f1): Expect > error. > * gcc.target/aarch64/sve/acle/general-c/store_2.c (f1): Likewise. > * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c > (f1): Likewise. > * > gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c > (f1): Likewise. > * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c > (f1): Likewise. > * > gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c > (f1): Likewise. > --- > gcc/c/c-typeck.cc | 97 +++++---- > gcc/doc/invoke.texi | 6 + > gcc/testsuite/c-c++-common/pr77624-1.c | 4 +- > gcc/testsuite/gcc.dg/Wint-conversion-2.c | 2 +- > gcc/testsuite/gcc.dg/Wint-conversion-3.c | 2 +- > gcc/testsuite/gcc.dg/Wint-conversion-4.c | 14 ++ > gcc/testsuite/gcc.dg/assign-warn-1.c | 2 +- > gcc/testsuite/gcc.dg/assign-warn-4.c | 21 ++ > gcc/testsuite/gcc.dg/diagnostic-types-1.c | 2 +- > gcc/testsuite/gcc.dg/diagnostic-types-2.c | 24 +++ > gcc/testsuite/gcc.dg/gomp/pr35738-2.c | 18 ++ > gcc/testsuite/gcc.dg/gomp/pr35738.c | 2 +- > gcc/testsuite/gcc.dg/init-excess-3.c | 4 +- > gcc/testsuite/gcc.dg/overflow-warn-1.c | 4 +- > gcc/testsuite/gcc.dg/overflow-warn-3.c | 4 +- > gcc/testsuite/gcc.dg/param-type-mismatch-2.c | 187 ++++++++++++++++++ > gcc/testsuite/gcc.dg/param-type-mismatch.c | 2 +- > gcc/testsuite/gcc.dg/permerror-default.c | 20 +- > .../gcc.dg/permerror-gnu89-nopermissive.c | 20 +- > gcc/testsuite/gcc.dg/permerror-system.c | 13 +- > gcc/testsuite/gcc.dg/pr61162-2.c | 2 +- > gcc/testsuite/gcc.dg/pr61162-3.c | 13 ++ > gcc/testsuite/gcc.dg/spec-barrier-3.c | 2 +- > gcc/testsuite/gcc.dg/spec-barrier-3a.c | 13 ++ > .../gcc.target/aarch64/acle/memtag_2.c | 4 +- > .../gcc.target/aarch64/acle/memtag_2a.c | 71 +++++++ > .../aarch64/sve/acle/general-c/load_3.c | 2 +- > .../aarch64/sve/acle/general-c/store_2.c | 2 +- > .../acle/general-c/store_scatter_index_1.c | 2 +- > .../store_scatter_index_restricted_1.c | 2 +- > .../acle/general-c/store_scatter_offset_2.c | 2 +- > .../store_scatter_offset_restricted_1.c | 2 +- > 32 files changed, 483 insertions(+), 82 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/Wint-conversion-4.c > create mode 100644 gcc/testsuite/gcc.dg/assign-warn-4.c > create mode 100644 gcc/testsuite/gcc.dg/diagnostic-types-2.c > create mode 100644 gcc/testsuite/gcc.dg/gomp/pr35738-2.c > create mode 100644 gcc/testsuite/gcc.dg/param-type-mismatch-2.c > create mode 100644 gcc/testsuite/gcc.dg/pr61162-3.c > create mode 100644 gcc/testsuite/gcc.dg/spec-barrier-3a.c > create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c > > diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc > index 1dbb4471a88..c7b35a27e3f 100644 > --- a/gcc/c/c-typeck.cc > +++ b/gcc/c/c-typeck.cc > @@ -5450,8 +5450,9 @@ build_conditional_expr (location_t colon_loc, tree > ifexp, bool ifexp_bcp, > && (code2 == INTEGER_TYPE || code2 == BITINT_TYPE)) > { > if (!null_pointer_constant_p (orig_op2)) > - pedwarn (colon_loc, OPT_Wint_conversion, > - "pointer/integer type mismatch in conditional expression"); > + permerror_opt (colon_loc, OPT_Wint_conversion, > + "pointer/integer type mismatch " > + "in conditional expression"); > else > { > op2 = null_pointer_node; > @@ -5462,8 +5463,9 @@ build_conditional_expr (location_t colon_loc, tree > ifexp, bool ifexp_bcp, > && (code1 == INTEGER_TYPE || code1 == BITINT_TYPE)) > { > if (!null_pointer_constant_p (orig_op1)) > - pedwarn (colon_loc, OPT_Wint_conversion, > - "pointer/integer type mismatch in conditional expression"); > + permerror_opt (colon_loc, OPT_Wint_conversion, > + "pointer/integer type mismatch " > + "in conditional expression"); > else > { > op1 = null_pointer_node; > @@ -6559,28 +6561,48 @@ error_init (location_t loc, const char *gmsgid, ...) > inform (loc, "(near initialization for %qs)", ofwhat); > } > > -/* Issue a pedantic warning for a bad initializer component. OPT is > - the option OPT_* (from options.h) controlling this warning or 0 if > - it is unconditionally given. GMSGID identifies the message. The > - component name is taken from the spelling stack. */ > +/* Used to implement pedwarn_init and permerror_init. */ > > static void ATTRIBUTE_GCC_DIAG (3,0) > -pedwarn_init (location_t loc, int opt, const char *gmsgid, ...) > +pedwarn_permerror_init (location_t loc, int opt, const char *gmsgid, > + va_list *ap, diagnostic_t kind) The declaration changed but the ATTRIBUTE_GCC_DIAG is still correct, ok. The rest LGTM (though it's tricky to review every line in the testsuite/ changes.) Marek