mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/53184 (Unnecessary anonymous namespace warnings)
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53184 * doc/invoke.texi ([Wsubobject-linkage]): Document. /c-family 2015-09-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53184 * c.opt ([Wsubobject-linkage]): Add. /cp 2015-09-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53184 * decl2.c (constrain_class_visibility): Use Wsubobject-linkage. /testsuite 2015-09-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53184 * g++.dg/warn/Wsubobject-linkage-1.C: New. * g++.dg/warn/Wsubobject-linkage-2.C: Likewise. * g++.dg/warn/Wsubobject-linkage-3.C: Likewise. * g++.dg/warn/Wsubobject-linkage-4.C: Likewise. From-SVN: r227593
This commit is contained in:
parent
1842a04ce0
commit
273aa49e2f
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/53184
|
||||||
|
* doc/invoke.texi ([Wsubobject-linkage]): Document.
|
||||||
|
|
||||||
2015-09-09 Tom de Vries <tom@codesourcery.com>
|
2015-09-09 Tom de Vries <tom@codesourcery.com>
|
||||||
|
|
||||||
* params-list.h: Add missing copyright notice.
|
* params-list.h: Add missing copyright notice.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/53184
|
||||||
|
* c.opt ([Wsubobject-linkage]): Add.
|
||||||
|
|
||||||
2015-09-03 Martin Sebor <msebor@redhat.com>
|
2015-09-03 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
PR c/66516
|
PR c/66516
|
||||||
|
|
|
||||||
|
|
@ -944,6 +944,11 @@ Wuseless-cast
|
||||||
C++ ObjC++ Var(warn_useless_cast) Warning
|
C++ ObjC++ Var(warn_useless_cast) Warning
|
||||||
Warn about useless casts
|
Warn about useless casts
|
||||||
|
|
||||||
|
Wsubobject-linkage
|
||||||
|
C++ ObjC++ Var(warn_subobject_linkage) Warning Init(1)
|
||||||
|
Warn if a class type has a base or a field whose type uses the anonymous
|
||||||
|
namespace or depends on a type with no linkage
|
||||||
|
|
||||||
ansi
|
ansi
|
||||||
C ObjC C++ ObjC++
|
C ObjC C++ ObjC++
|
||||||
A synonym for -std=c89 (for C) or -std=c++98 (for C++)
|
A synonym for -std=c89 (for C) or -std=c++98 (for C++)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/53184
|
||||||
|
* decl2.c (constrain_class_visibility): Use Wsubobject-linkage.
|
||||||
|
|
||||||
2015-09-09 Jakub Jelinek <jakub@redhat.com>
|
2015-09-09 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/67504
|
PR c++/67504
|
||||||
|
|
|
||||||
|
|
@ -2564,10 +2564,25 @@ constrain_class_visibility (tree type)
|
||||||
|
|
||||||
if (subvis == VISIBILITY_ANON)
|
if (subvis == VISIBILITY_ANON)
|
||||||
{
|
{
|
||||||
if (!in_main_input_context ())
|
if (!in_main_input_context())
|
||||||
warning (0, "\
|
{
|
||||||
|
tree nlt = no_linkage_check (ftype, /*relaxed_p=*/false);
|
||||||
|
if (nlt)
|
||||||
|
{
|
||||||
|
if (same_type_p (TREE_TYPE (t), nlt))
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
|
%qT has a field %qD whose type has no linkage",
|
||||||
|
type, t);
|
||||||
|
else
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
|
%qT has a field %qD whose type depends on the type %qT which has no linkage",
|
||||||
|
type, t, nlt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
%qT has a field %qD whose type uses the anonymous namespace",
|
%qT has a field %qD whose type uses the anonymous namespace",
|
||||||
type, t);
|
type, t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (MAYBE_CLASS_TYPE_P (ftype)
|
else if (MAYBE_CLASS_TYPE_P (ftype)
|
||||||
&& vis < VISIBILITY_HIDDEN
|
&& vis < VISIBILITY_HIDDEN
|
||||||
|
|
@ -2585,9 +2600,24 @@ constrain_class_visibility (tree type)
|
||||||
if (subvis == VISIBILITY_ANON)
|
if (subvis == VISIBILITY_ANON)
|
||||||
{
|
{
|
||||||
if (!in_main_input_context())
|
if (!in_main_input_context())
|
||||||
warning (0, "\
|
{
|
||||||
|
tree nlt = no_linkage_check (TREE_TYPE (t), /*relaxed_p=*/false);
|
||||||
|
if (nlt)
|
||||||
|
{
|
||||||
|
if (same_type_p (TREE_TYPE (t), nlt))
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
|
%qT has a base %qT whose type has no linkage",
|
||||||
|
type, TREE_TYPE (t));
|
||||||
|
else
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
|
%qT has a base %qT whose type depends on the type %qT which has no linkage",
|
||||||
|
type, TREE_TYPE (t), nlt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
warning (OPT_Wsubobject_linkage, "\
|
||||||
%qT has a base %qT whose type uses the anonymous namespace",
|
%qT has a base %qT whose type uses the anonymous namespace",
|
||||||
type, TREE_TYPE (t));
|
type, TREE_TYPE (t));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (vis < VISIBILITY_HIDDEN
|
else if (vis < VISIBILITY_HIDDEN
|
||||||
&& subvis >= VISIBILITY_HIDDEN)
|
&& subvis >= VISIBILITY_HIDDEN)
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||||
-Wstrict-aliasing=n @gol -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
|
-Wstrict-aliasing=n @gol -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
|
||||||
-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
|
-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
|
||||||
-Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol
|
-Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol
|
||||||
-Wmissing-format-attribute @gol
|
-Wmissing-format-attribute -Wsubobject-linkage @gol
|
||||||
-Wswitch -Wswitch-default -Wswitch-enum -Wswitch-bool -Wsync-nand @gol
|
-Wswitch -Wswitch-default -Wswitch-enum -Wswitch-bool -Wsync-nand @gol
|
||||||
-Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol
|
-Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol
|
||||||
-Wtype-limits -Wundef @gol
|
-Wtype-limits -Wundef @gol
|
||||||
|
|
@ -4923,6 +4923,13 @@ types. @option{-Wconversion-null} is enabled by default.
|
||||||
Warn when a literal '0' is used as null pointer constant. This can
|
Warn when a literal '0' is used as null pointer constant. This can
|
||||||
be useful to facilitate the conversion to @code{nullptr} in C++11.
|
be useful to facilitate the conversion to @code{nullptr} in C++11.
|
||||||
|
|
||||||
|
@item -Wsubobject-linkage @r{(C++ and Objective-C++ only)}
|
||||||
|
@opindex Wsubobject-linkage
|
||||||
|
@opindex Wno-subobject-linkage
|
||||||
|
Warn if a class type has a base or a field whose type uses the anonymous
|
||||||
|
namespace or depends on a type with no linkage. This warning is
|
||||||
|
enabled by default.
|
||||||
|
|
||||||
@item -Wdate-time
|
@item -Wdate-time
|
||||||
@opindex Wdate-time
|
@opindex Wdate-time
|
||||||
@opindex Wno-date-time
|
@opindex Wno-date-time
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,11 @@
|
||||||
|
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/53184
|
||||||
|
* g++.dg/warn/Wsubobject-linkage-1.C: New.
|
||||||
|
* g++.dg/warn/Wsubobject-linkage-2.C: Likewise.
|
||||||
|
* g++.dg/warn/Wsubobject-linkage-3.C: Likewise.
|
||||||
|
* g++.dg/warn/Wsubobject-linkage-4.C: Likewise.
|
||||||
|
|
||||||
2015-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
2015-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||||
|
|
||||||
* gcc.target/aarch64/mod_2.x: New file.
|
* gcc.target/aarch64/mod_2.x: New file.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
// PR c++/53184
|
||||||
|
|
||||||
|
typedef volatile struct { } Foo;
|
||||||
|
|
||||||
|
#line 6 "foo.C"
|
||||||
|
struct Bar { Foo foo; }; // { dg-warning "no linkage" }
|
||||||
|
// { dg-bogus "anonymous namespace" "" { target *-*-* } 6 }
|
||||||
|
struct Bar2 : Foo { }; // { dg-warning "no linkage" }
|
||||||
|
// { dg-bogus "anonymous namespace" "" { target *-*-* } 8 }
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
// PR c++/53184
|
||||||
|
// { dg-options "-Wno-subobject-linkage" }
|
||||||
|
|
||||||
|
typedef volatile struct { } Foo;
|
||||||
|
|
||||||
|
#line 7 "foo.C"
|
||||||
|
struct Bar { Foo foo; };
|
||||||
|
struct Bar2 : Foo { };
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
// PR c++/53184
|
||||||
|
|
||||||
|
namespace { struct Foo { }; }
|
||||||
|
|
||||||
|
#line 6 "foo.C"
|
||||||
|
struct Bar { Foo foo; }; // { dg-warning "anonymous namespace" }
|
||||||
|
// { dg-bogus "no linkage" "" { target *-*-* } 6 }
|
||||||
|
struct Bar2 : Foo { }; // { dg-warning "anonymous namespace" }
|
||||||
|
// { dg-bogus "no linkage" "" { target *-*-* } 8 }
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
// PR c++/53184
|
||||||
|
// { dg-options "-Wno-subobject-linkage" }
|
||||||
|
|
||||||
|
namespace { struct Foo { }; }
|
||||||
|
|
||||||
|
#line 7 "foo.C"
|
||||||
|
struct Bar { Foo foo; };
|
||||||
|
struct Bar2 : Foo { };
|
||||||
Loading…
Reference in New Issue