From 058f0b9e5f073da9d1d98a91e482cbdead1561ee Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 28 Nov 2017 22:22:52 +0100 Subject: re PR sanitizer/81275 (-fsanitize=thread produce incorrect -Wreturn-type warning) PR sanitizer/81275 * tree.c (block_may_fallthru): Return false if SWITCH_ALL_CASES_P is set on SWITCH_EXPR and !block_may_fallthru (SWITCH_BODY ()). c/ * c-typeck.c (c_finish_case): Set SWITCH_ALL_CASES_P if c_switch_covers_all_cases_p returns true. c-family/ * c-common.c (c_switch_covers_all_cases_p_1, c_switch_covers_all_cases_p): New functions. * c-common.h (c_switch_covers_all_cases_p): Declare. testsuite/ * c-c++-common/tsan/pr81275.c: New test. From-SVN: r255217 --- gcc/c/ChangeLog | 6 ++++++ gcc/c/c-typeck.c | 2 ++ 2 files changed, 8 insertions(+) (limited to 'gcc/c') diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index ff73043..2c36348 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2017-11-28 Jakub Jelinek + + PR sanitizer/81275 + * c-typeck.c (c_finish_case): Set SWITCH_ALL_CASES_P if + c_switch_covers_all_cases_p returns true. + 2017-11-28 Julia Koval Sebastian Peryt diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index f761305..6846bc5 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -10360,6 +10360,8 @@ c_finish_case (tree body, tree type) type ? type : TREE_TYPE (cs->switch_expr), SWITCH_COND (cs->switch_expr), cs->bool_cond_p, cs->outside_range_p); + if (c_switch_covers_all_cases_p (cs->cases, TREE_TYPE (cs->switch_expr))) + SWITCH_ALL_CASES_P (cs->switch_expr) = 1; /* Pop the stack. */ c_switch_stack = cs->next; -- cgit v1.1