c++: Avoid a suspicious -Wnoexcept warning [PR93805]
authorPatrick Palka <ppalka@redhat.com>
Fri, 13 Mar 2020 18:30:39 +0000 (14:30 -0400)
committerPatrick Palka <ppalka@redhat.com>
Mon, 23 Mar 2020 20:08:43 +0000 (16:08 -0400)
commit1f6c1c82eb5001a844b5ac535f6aba4a3257031f
treeda497ce06d4a5d8684da11fe5456b78a14e5f1a8
parentca6c722561ce9b9dc7b59cfd9d29c9b466732721
c++: Avoid a suspicious -Wnoexcept warning [PR93805]

In this PR we're emitting -Wnoexcept warnings about potentially-throwing NSDMIs
when computing the noexcept specification of a class's defaulted default
constructor.  Although these warnings are in some sense valid, this patch takes
the route of suppressing them, because:

  1. the warning message is confusing in its current form;
  2. warning for 'struct C { B b = B(); };' but not for 'struct C { B b; };'
     is inconsistent; and
  3. emitting a warning here arguably doesn't fall under the umbrella of
     -Wnoexcept, whose documentation says it warns only when a
     noexcept-expression evaluates to false, but there are no
     noexcept-expressions here.

gcc/cp/ChangeLog:

PR c++/93805
* except.c (maybe_noexcept_warning): Add TODO comment.
* method.c (walk_field_subobs): Pass tf_none to expr_noexcept_p.

gcc/testsuite/ChangeLog:

PR c++/93805
* g++.dg/warn/Wnoexcept2.C: New test.
gcc/cp/ChangeLog
gcc/cp/except.c
gcc/cp/method.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wnoexcept2.C [new file with mode: 0644]