]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* c-common.c (shorten_compare): But look through macros from
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Nov 2015 15:51:35 +0000 (15:51 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Nov 2015 15:51:35 +0000 (15:51 +0000)
system headers.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230665 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/testsuite/gcc.dg/Wtype-limits2.c [new file with mode: 0644]

index 5ca75b4dbf00cededd675350a9bbca03d34425c2..c19cafa05f88eab2f02378e10d726ae2d315f73a 100644 (file)
@@ -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
index 068a0bcd2ec02c107fb45df631879a9dbf12b538..fe0a235988fe88a0e9020724b5b1f60df19945f7 100644 (file)
@@ -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 (file)
index 0000000..92151aa
--- /dev/null
@@ -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;
+}