From c73d5dd948d68fb2550f7d178d1483aebcfbcaea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Fri, 8 Aug 2008 23:32:23 +0000 Subject: [PATCH] re PR middle-end/7651 (Define -Wextra strictly in terms of other warning flags) 2008-08-09 Manuel Lopez-Ibanez PR 7651 * doc/invoke.texi (-Wextra): Move warning from here... (-Wuninitialized): ... to here. cp/ * class.c (check_bases_and_members): Warn with -Wuninitialized instead of -Wextra. testsuite/ * g++.dg/warn/Wuninitializable-member.C: New. * g++.dg/warn/Wuninitializable-member-no.C: New. From-SVN: r138892 --- gcc/ChangeLog | 6 ++++++ gcc/cp/ChangeLog | 6 ++++++ gcc/cp/class.c | 10 +++++----- gcc/doc/invoke.texi | 10 ++++------ gcc/testsuite/ChangeLog | 6 ++++++ .../g++.dg/warn/Wuninitializable-member-no.C | 15 +++++++++++++++ .../g++.dg/warn/Wuninitializable-member.C | 14 ++++++++++++++ 7 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wuninitializable-member-no.C create mode 100644 gcc/testsuite/g++.dg/warn/Wuninitializable-member.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 569efd1f5b32..8ba80b2aa342 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-08-09 Manuel Lopez-Ibanez + + PR 7651 + * doc/invoke.texi (-Wextra): Move warning from here... + (-Wuninitialized): ... to here. + 2008-08-08 Manuel Lopez-Ibanez PR 28875 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d37f31f96fb4..46370908becd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-08-09 Manuel Lopez-Ibanez + + PR 7651 + * class.c (check_bases_and_members): Warn with -Wuninitialized + instead of -Wextra. + 2008-08-08 Volker Reichelt PR c++/35985 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f7e46a717aaf..b08f9c80d296 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -4306,7 +4306,7 @@ check_bases_and_members (tree t) /* If the class has no user-declared constructor, but does have non-static const or reference data members that can never be initialized, issue a warning. */ - if (extra_warnings + if (warn_uninitialized /* Classes with user-declared constructors are presumed to initialize these members. */ && !TYPE_HAS_USER_CONSTRUCTOR (t) @@ -4325,13 +4325,13 @@ check_bases_and_members (tree t) type = TREE_TYPE (field); if (TREE_CODE (type) == REFERENCE_TYPE) - warning (OPT_Wextra, "non-static reference %q+#D in class " - "without a constructor", field); + warning (OPT_Wuninitialized, "non-static reference %q+#D " + "in class without a constructor", field); else if (CP_TYPE_CONST_P (type) && (!CLASS_TYPE_P (type) || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type))) - warning (OPT_Wextra, "non-static const member %q+#D in class " - "without a constructor", field); + warning (OPT_Wuninitialized, "non-static const member %q+#D " + "in class without a constructor", field); } } diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index cb0299585d8e..051f6d1ff053 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -2748,10 +2748,6 @@ A pointer is compared against integer zero with @samp{<}, @samp{<=}, (C++ only) An enumerator and a non-enumerator both appear in a conditional expression. -@item -(C++ only) A non-static reference or non-static @samp{const} member -appears in a class without constructors. - @item (C++ only) Ambiguous virtual bases. @@ -3173,8 +3169,10 @@ either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies @item -Wuninitialized @opindex Wuninitialized @opindex Wno-uninitialized -Warn if an automatic variable is used without first being initialized or -if a variable may be clobbered by a @code{setjmp} call. +Warn if an automatic variable is used without first being initialized +or if a variable may be clobbered by a @code{setjmp} call. In C++, +warn if a non-static reference or non-static @samp{const} member +appears in a class without constructors. If you want to warn about code which uses the uninitialized value of the variable in its own initializer, use the @option{-Winit-self} option. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index db2088fac1a1..6be4d9423f42 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-08-09 Manuel Lopez-Ibanez + + PR 7651 + * g++.dg/warn/Wuninitializable-member.C: New. + * g++.dg/warn/Wuninitializable-member-no.C: New. + 2008-08-08 Manuel Lopez-Ibanez PR 28875 diff --git a/gcc/testsuite/g++.dg/warn/Wuninitializable-member-no.C b/gcc/testsuite/g++.dg/warn/Wuninitializable-member-no.C new file mode 100644 index 000000000000..0f6ccfd9d62a --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wuninitializable-member-no.C @@ -0,0 +1,15 @@ +// Test disabling +// { dg-do compile } +// { dg-options "-Wall -Wextra -Wno-uninitialized" } + +class X { + int & flag;// { dg-bogus "non-static reference 'int& X::flag' in class without a constructor" } +public: + void f(){ flag++ ; } +}; + +class Y { + const int var;// { dg-bogus "non-static const member 'const int Y::var' in class without a constructor" } +public: + int g(){ return 2*var; } +}; diff --git a/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C b/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C new file mode 100644 index 000000000000..1c37e3ea0239 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C @@ -0,0 +1,14 @@ +// { dg-do compile } +// { dg-options "-Wuninitialized" } + +class X { + int & flag;// { dg-warning "non-static reference 'int& X::flag' in class without a constructor" } +public: + void f(){ flag++ ; } +}; + +class Y { + const int var;// { dg-warning "non-static const member 'const int Y::var' in class without a constructor" } +public: + int g(){ return 2*var; } +}; -- 2.47.2