aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2015-11-20 10:51:35 -0500
committerJason Merrill <jason@gcc.gnu.org>2015-11-20 10:51:35 -0500
commit269adb9dea5b2ded168fb9ca12bd29c4e217d241 (patch)
tree9a5ca109c0eccf8777190899db2f34866efb7366 /gcc
parent8e92560a9c9c57dfed3283c48ef5e46a7e0204b1 (diff)
downloadgcc-269adb9dea5b2ded168fb9ca12bd29c4e217d241.zip
gcc-269adb9dea5b2ded168fb9ca12bd29c4e217d241.tar.gz
gcc-269adb9dea5b2ded168fb9ca12bd29c4e217d241.tar.bz2
c-common.c (shorten_compare): But look through macros from system headers.
* c-common.c (shorten_compare): But look through macros from system headers. From-SVN: r230665
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c6
-rw-r--r--gcc/testsuite/gcc.dg/Wtype-limits2.c12
3 files changed, 21 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 5ca75b4..c19cafa 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-19 Jason Merrill <jason@redhat.com>
+
+ * c-common.c (shorten_compare): But look through macros from
+ system headers.
+
2015-11-18 Jason Merrill <jason@redhat.com>
* c-common.c (shorten_compare): Don't -Wtype-limits if the
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;
+}