From: Jakub Jelinek Date: Thu, 13 Oct 2016 10:42:36 +0000 (+0200) Subject: re PR c/77946 (-Wimplicit-fallthrough=1 ICE: tree check: expected tree that contains... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1a1ab05e906d5fe546e72354dd79d455becd71df;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 449a759f458..b2b3ab5804c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-10-13 Jakub Jelinek + + 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 * tree-vect-loop-manip.c (slpeel_can_duplicate_loop_p): Fix code diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c059a1d79d3..5dc04c5e659 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-10-13 Jakub Jelinek + + PR c/77946 + * c-c++-common/Wimplicit-fallthrough-34.c: New test. + 2016-10-13 Martin Liska PR tree-optimization/77943 diff --git a/gcc/testsuite/c-c++-common/Wimplicit-fallthrough-34.c b/gcc/testsuite/c-c++-common/Wimplicit-fallthrough-34.c new file mode 100644 index 00000000000..9168c5225f0 --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wimplicit-fallthrough-34.c @@ -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:; +} diff --git a/gcc/tree.h b/gcc/tree.h index 30c643968de..434a7a13076 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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 *'. diff --git a/gcc/varasm.c b/gcc/varasm.c index a03687210c0..99dd4cb3cfc 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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. */