re PR c/77946 (-Wimplicit-fallthrough=1 ICE: tree check: expected tree that contains ‘decl with visibility’ structure, have ‘label_decl’)

PR c/77946
	* tree.h (FALLTHROUGH_LABEL_P): Use private_flag instead of
	public_flag.
	* varasm.c (default_binds_local_p_3): Formatting fix.

	* c-c++-common/Wimplicit-fallthrough-34.c: New test.

From-SVN: r241094
This commit is contained in:
Jakub Jelinek 2016-10-13 12:42:36 +02:00 committed by Jakub Jelinek
parent 5579170b40
commit 1a1ab05e90
5 changed files with 27 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2016-10-13 Jakub Jelinek <jakub@redhat.com>
PR c/77946
* tree.h (FALLTHROUGH_LABEL_P): Use private_flag instead of
public_flag.
* varasm.c (default_binds_local_p_3): Formatting fix.
2016-10-13 Bin Cheng <bin.cheng@arm.com>
* tree-vect-loop-manip.c (slpeel_can_duplicate_loop_p): Fix code

View File

@ -1,3 +1,8 @@
2016-10-13 Jakub Jelinek <jakub@redhat.com>
PR c/77946
* c-c++-common/Wimplicit-fallthrough-34.c: New test.
2016-10-13 Martin Liska <mliska@suse.cz>
PR tree-optimization/77943

View File

@ -0,0 +1,12 @@
/* PR c/77946 */
/* { dg-do compile } */
/* { dg-options "-Wimplicit-fallthrough" } */
void
foo (void)
{
static void *p = &&lab;
goto *p;
/*FALLTHRU*/
lab:;
}

View File

@ -777,7 +777,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
/* Whether a case or a user-defined label is allowed to fall through to.
This is used to implement -Wimplicit-fallthrough. */
#define FALLTHROUGH_LABEL_P(NODE) \
(LABEL_DECL_CHECK (NODE)->base.public_flag)
(LABEL_DECL_CHECK (NODE)->base.private_flag)
/* Nonzero means this expression is volatile in the C sense:
its address should be of type `volatile WHATEVER *'.

View File

@ -6856,8 +6856,8 @@ default_binds_local_p_3 (const_tree exp, bool shlib, bool weak_dominate,
FIXME: We can resolve the weakref case more curefuly by looking at the
weakref alias. */
if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
|| (TREE_CODE (exp) == FUNCTION_DECL
&& lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
|| (TREE_CODE (exp) == FUNCTION_DECL
&& lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
return false;
/* Static variables are always local. */