From 1060d06b4df8836135ed15d020afbd3637dc625b Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 28 Feb 2022 11:58:01 +0100 Subject: [PATCH] Fix error recovery in toplev::finalize. PR ipa/104648 gcc/ChangeLog: * main.cc (main): Use flag_checking instead of CHECKING_P and run toplev::finalize only if there is not error seen. gcc/testsuite/ChangeLog: * g++.dg/pr104648.C: New test. --- gcc/main.cc | 6 +++--- gcc/testsuite/g++.dg/pr104648.C | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/pr104648.C diff --git a/gcc/main.cc b/gcc/main.cc index f9dd6b2af58b..4ba28b7de53f 100644 --- a/gcc/main.cc +++ b/gcc/main.cc @@ -37,9 +37,9 @@ main (int argc, char **argv) true /* init_signals */); int r = toplev.main (argc, argv); -#if CHECKING_P - toplev.finalize (); -#endif + + if (flag_checking && !seen_error ()) + toplev.finalize (); return r; } diff --git a/gcc/testsuite/g++.dg/pr104648.C b/gcc/testsuite/g++.dg/pr104648.C new file mode 100644 index 000000000000..b8b7c2864cf2 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr104648.C @@ -0,0 +1,9 @@ +// { dg-do compile } +// { dg-options "-fvtable-verify=preinit" } + +struct A {}; +struct B : virtual A +{ + B () {}; + B () {}; /* { dg-error "cannot be overloaded with" } */ +}; -- 2.47.3