From 06d2aa10535cea2889140b037501149a9394c9bb Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 13 Oct 2016 10:42:36 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241094 138bc75d-0d04-0410-961f-82ee72b054a4 git-id: c0f4422f26a07270ec6027df89b731e7b9977e14 Change-Id: Ied47aa4857f185e104b3ff29daf46ff11aee8f7d Signed-off-by: Slava Barinov --- gcc/testsuite/c-c++-common/Wimplicit-fallthrough-34.c | 12 ++++++++++++ gcc/tree.h | 2 +- gcc/varasm.c | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/Wimplicit-fallthrough-34.c 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 0000000..9168c52 --- /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 b6dd4cd..048d4f8 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -769,7 +769,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 1445794..22e499f 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6888,8 +6888,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. */ -- 2.7.4