Message ID | 564F419B.4080507@redhat.com |
---|---|
State | New |
Headers | show |
>> Hmm, it looks like using expansion_point_if_in_system_header might avoid >> the first issue you mention. > > Thus. Great, thanks! (I'll have to remember the trick for my own use!) Martin
On 20 November 2015 at 16:10, Martin Sebor <msebor@gmail.com> wrote: >>> Hmm, it looks like using expansion_point_if_in_system_header might avoid >>> the first issue you mention. >> >> >> Thus. > > > Great, thanks! (I'll have to remember the trick for my own use!) I added this to https://gcc.gnu.org/wiki/DiagnosticsGuidelines under "Locations" for future reference. I hope others would do the same in the future, so the info is kept up-to-date. Cheers, Manuel.
commit fb71bf4de520cc4bd11eefb57e50748b4679996f Author: Jason Merrill <jason@redhat.com> Date: Thu Nov 19 15:21:47 2015 -0500 * c-common.c (shorten_compare): But look through macros from system headers. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 068a0bc..fe0a235 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -4651,8 +4651,10 @@ shorten_compare (location_t loc, tree *op0_ptr, tree *op1_ptr, } if (TREE_CODE (primop0) != INTEGER_CST - /* Don't warn if it's from a macro. */ - && !from_macro_expansion_at (EXPR_LOCATION (primop0))) + /* Don't warn if it's from a (non-system) macro. */ + && !(from_macro_expansion_at + (expansion_point_location_if_in_system_header + (EXPR_LOCATION (primop0))))) { if (val == truthvalue_false_node) warning_at (loc, OPT_Wtype_limits, diff --git a/gcc/testsuite/gcc.dg/Wtype-limits2.c b/gcc/testsuite/gcc.dg/Wtype-limits2.c new file mode 100644 index 0000000..92151aa --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wtype-limits2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-Wtype-limits" } */ +/* { dg-require-effective-target sync_char_short } */ + +#include <stdatomic.h> + +unsigned foo (unsigned char *x) +{ + if (atomic_load (x) > 1000) /* { dg-warning "comparison is always false due to limited range of data type" } */ + return 0; + return 1; +}