PR c/89425 - -Wabsolute-value warns in dead subexpressions
authorMartin Sebor <msebor@redhat.com>
Fri, 22 Feb 2019 16:24:36 +0000 (16:24 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Fri, 22 Feb 2019 16:24:36 +0000 (09:24 -0700)
gcc/c/ChangeLog:

PR c/89425
* c-parser.c (sizeof_ptr_memacc_comptypes): Avoid warning in
unreachable subexpressions.

gcc/testsuite/ChangeLog:

PR c/89425
* gcc.dg/Wabsolute-value.c: New test.

From-SVN: r269121

gcc/ChangeLog
gcc/c/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wabsolute-value.c [new file with mode: 0644]

index 41deb1c46566aff5dc5cc81a5ae92c591b0390ee..42ed0dca5b00bba7748ec732bd2a864f3e14add1 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-22  Martin Sebor  <msebor@redhat.com>
+
+       PR c/89425
+       * c-parser.c (sizeof_ptr_memacc_comptypes): Avoid warning in
+       unreachable subexpressions.
+
 2019-02-22  H.J. Lu  <hongjiu.lu@intel.com>
            Hongtao Liu  <hongtao.liu@intel.com>
            Sunil K Pandey  <sunil.k.pandey@intel.com>
index 22c7416ac94e62974661ec0e1456c4bee9a2e633..ee722cc9df90065b9edb25764e1699e322d12ba1 100644 (file)
@@ -9374,6 +9374,10 @@ sizeof_ptr_memacc_comptypes (tree type1, tree type2)
 static void
 warn_for_abs (location_t loc, tree fndecl, tree arg)
 {
+  /* Avoid warning in unreachable subexpressions.  */
+  if (c_inhibit_evaluation_warnings)
+    return;
+
   tree atype = TREE_TYPE (arg);
 
   /* Casts from pointers (and thus arrays and fndecls) will generate
index cb653e3652aef86f5b09e4ac13d459bdc5e4c420..8c8f4a5e3fdeb0b602590c12d6c56bb5c68e5537 100644 (file)
@@ -1,5 +1,8 @@
 2019-02-22  Martin Sebor  <msebor@redhat.com>
 
+       PR c/89425
+       * gcc.dg/Wabsolute-value.c: New test.
+
        * gcc.dg/Wbuiltin-declaration-mismatch-12.c: New test.
 
 2019-02-22  H.J. Lu  <hongjiu.lu@intel.com>
diff --git a/gcc/testsuite/gcc.dg/Wabsolute-value.c b/gcc/testsuite/gcc.dg/Wabsolute-value.c
new file mode 100644 (file)
index 0000000..e3717f9
--- /dev/null
@@ -0,0 +1,57 @@
+/* PR c/89425 - -Wabsolute-value warns in dead subexpressions
+   { dg-do compile }
+   { dg-options "-Wabsolute-value -ftrack-macro-expansion=0" } */
+
+struct Vals
+{
+  signed char sc;
+  signed short ss;
+  signed int si;
+  signed long sl;
+  signed long long sll;
+
+  unsigned char uc;
+  unsigned short us;
+  unsigned int ui;
+  unsigned long ul;
+  unsigned long long ull;
+
+  float f;
+  double d;
+  long double ld;
+};
+
+#define abs(x)     __builtin_abs (x)
+#define labs(x)    __builtin_labs (x)
+#define llabs(x)   __builtin_llabs (x)
+
+#define fabsf(x)   __builtin_fabsf (x)
+#define fabs(x)    __builtin_fabs (x)
+
+
+void tst_warn (struct Vals *p)
+{
+  /* Verify that "-Wabsolute-value is issued for subexpressions
+     that are evaluated.  */
+
+  p->uc =  0 ? abs (p->sc) : abs (p->uc);         /* { dg-warning "\\\[-Wabsolute-value]" } */
+  p->us =  0 ? abs (p->ss) : abs (p->us);         /* { dg-warning "\\\[-Wabsolute-value]" } */
+  p->ui =  0 ? abs (p->si) : abs (p->ui);         /* { dg-warning "\\\[-Wabsolute-value]" } */
+  p->ul =  0 ? labs (p->sl) : labs (p->ul);       /* { dg-warning "\\\[-Wabsolute-value]" } */
+  p->ull = 0 ? llabs (p->sll) : llabs (p->ull);   /* { dg-warning "\\\[-Wabsolute-value]" } */
+
+  p->d   = 0 ? fabs (p->d) : fabsf (p->d);        /* { dg-warning "\\\[-Wabsolute-value]" } */
+}
+
+void tst_no_warn (struct Vals *p)
+{
+  /* Verify that "-Wabsolute-value is not issued for subexpressions
+     that are not evaluated.  */
+
+  p->uc =  0 ? abs (p->uc) : abs (p->sc);
+  p->us =  0 ? abs (p->us) : abs (p->ss);
+  p->ui =  0 ? abs (p->ui) : abs (p->si);
+  p->ul =  0 ? labs (p->ul) : labs (p->sl);
+  p->ull = 0 ? llabs (p->ull) : llabs (p->sll);
+  p->d   = 0 ? fabsf (p->d) : fabs (p->d);
+}