+2008-01-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR 32102
+ * flags.h (warn_strict_aliasing): Remove.
+ (warn_strict_overflow): Remove.
+ * opts.c (warn_strict_aliasing): Remove.
+ (warn_strict_overflow): Remove.
+ * c-opts.c (c_common_handle_option): -Wall only sets
+ -Wstrict-aliasing or -Wstrict-overflow if they are uninitialized.
+ (c_common_post_options): Give default values to -Wstrict-aliasing
+ and -Wstrict-overflow if they are uninitialized.
+ * common.opt (Wstrict-aliasing): Specify Var and Init.
+ (Wstrict-overflow): Likewise.
+
2008-01-25 Joseph Myers <joseph@codesourcery.com>
PR other/31955
/* C/ObjC/C++ command line option handling.
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Neil Booth.
if (c_dialect_cxx ())
warn_sign_compare = value;
warn_switch = value;
- warn_strict_aliasing = value;
- warn_strict_overflow = value;
+ if (warn_strict_aliasing == -1)
+ warn_strict_aliasing = value;
+ if (warn_strict_overflow == -1)
+ warn_strict_overflow = value;
warn_address = value;
/* Only warn about unknown pragmas that are not in system
if (warn_pointer_sign == -1)
warn_pointer_sign = 0;
+ if (warn_strict_aliasing == -1)
+ warn_strict_aliasing = 0;
+ if (warn_strict_overflow == -1)
+ warn_strict_overflow = 0;
+
/* -Woverlength-strings is off by default, but is enabled by -pedantic.
It is never enabled in C++, as the minimum limit is not normative
in that standard. */
Warn about code which might break strict aliasing rules
Wstrict-aliasing=
-Common Joined UInteger
+Common Joined UInteger Var(warn_strict_aliasing) Init(-1)
Warn about code which might break strict aliasing rules
Wstrict-overflow
Warn about optimizations that assume that signed overflow is undefined
Wstrict-overflow=
-Common Joined UInteger
+Common Joined UInteger Var(warn_strict_overflow) Init(-1)
Warn about optimizations that assume that signed overflow is undefined
Wswitch
extern bool warn_larger_than;
extern HOST_WIDE_INT larger_than_size;
-/* Nonzero means warn about constructs which might not be strict
- aliasing safe. */
-
-extern int warn_strict_aliasing;
-
-/* Nonzero means warn about optimizations which rely on undefined
- signed overflow. */
-
-extern int warn_strict_overflow;
-
/* Temporarily suppress certain warnings.
This is set while reading code from a system header file. */
bool warn_larger_than;
HOST_WIDE_INT larger_than_size;
-/* Nonzero means warn about constructs which might not be
- strict-aliasing safe. */
-int warn_strict_aliasing;
-
-/* Nonzero means warn about optimizations which rely on undefined
- signed overflow. */
-int warn_strict_overflow;
-
/* Hack for cooperation between set_Wunused and set_Wextra. */
static bool maybe_warn_unused_parameter;
+2008-01-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR 32102
+ * gcc.dg/Wstrict-overflow-21.c: New.
+ * g++.dg/warn/Wstrict-aliasing-8.C: New.
+
2008-01-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/pr29254.c (func1): Mark static when pic.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wstrict-aliasing=2 -O2 -Wall" } */
+
+int a[2];
+
+double *foo1(void)
+{
+ return (double *)a; /* { dg-warning "strict-aliasing" } */
+}
+
+double *foo2(void)
+{
+ return (double *)&a[0]; /* { dg-warning "strict-aliasing" } */
+}
+
+__complex__ double x;
+int *bar(void)
+{
+ return (int *)&__imag__ x; /* { dg-warning "strict-aliasing" } */
+}
--- /dev/null
+/* PR 32102: -Wall stomps on -Wstrict-overflow */
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=2 -Wall" } */
+int
+foo (int i)
+{
+ return __builtin_abs (i) >= 0; /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
+}
+
+