mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 19:55:32 +08:00
re PR c++/20681 (wrong "control reaches" warning with switches)
PR c++/20681 * semantics.c (finish_break_stmt): Avoid adding an unreachable BREAK_STMT. From-SVN: r183161
This commit is contained in:
parent
07dee0c66a
commit
04771457dc
@ -1,5 +1,9 @@
|
||||
2012-01-13 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/20681
|
||||
* semantics.c (finish_break_stmt): Avoid adding an unreachable
|
||||
BREAK_STMT.
|
||||
|
||||
PR c++/51813
|
||||
* decl2.c (constrain_visibility): Clear DECL_VISIBILITY_SPECIFIED
|
||||
when reducing the visibility.
|
||||
|
@ -995,6 +995,15 @@ finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
|
||||
tree
|
||||
finish_break_stmt (void)
|
||||
{
|
||||
/* In switch statements break is sometimes stylistically used after
|
||||
a return statement. This can lead to spurious warnings about
|
||||
control reaching the end of a non-void function when it is
|
||||
inlined. Note that we are calling block_may_fallthru with
|
||||
language specific tree nodes; this works because
|
||||
block_may_fallthru returns true when given something it does not
|
||||
understand. */
|
||||
if (!block_may_fallthru (cur_stmt_list))
|
||||
return void_zero_node;
|
||||
return add_stmt (build_stmt (input_location, BREAK_STMT));
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-01-13 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/20681
|
||||
* g++.dg/warn/Wreturn-type-7.C: New.
|
||||
|
||||
2012-01-13 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
* gcc.c-torture/execute/20120111-1.c: Fix wrong int = int32_t
|
||||
|
16
gcc/testsuite/g++.dg/warn/Wreturn-type-7.C
Normal file
16
gcc/testsuite/g++.dg/warn/Wreturn-type-7.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR c++/20681
|
||||
// { dg-options -Wreturn-type }
|
||||
|
||||
struct a{~a();a();};
|
||||
int GetMetaCombination (int a2)
|
||||
{
|
||||
a bi;
|
||||
switch (a2)
|
||||
{
|
||||
case 1:
|
||||
return 18;
|
||||
break;//removing this works around the warning
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user