+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>
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
--- /dev/null
+/* 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);
+}