2015-09-16 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Sep 2015 15:14:39 +0000 (15:14 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Sep 2015 15:14:39 +0000 (15:14 +0000)
* doc/invoke.texi ([Wsubobject-linkage]): Extend documentation.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227828 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/doc/invoke.texi

index cdbfe48..92f6354 100644 (file)
@@ -1,3 +1,7 @@
+2015-09-16  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * doc/invoke.texi ([Wsubobject-linkage]): Extend documentation.
+
 2015-09-16  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR bootstrap/67587
index 99c9685..547ee2d 100644 (file)
@@ -4942,8 +4942,15 @@ be useful to facilitate the conversion to @code{nullptr} in C++11.
 @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.
+namespace or depends on a type with no linkage.  If a type A depends on
+a type B with no or internal linkage, defining it in multiple
+translation units would be an ODR violation because the meaning of B
+is different in each translation unit.  If A only appears in a single
+translation unit, the best way to silence the warning is to give it
+internal linkage by putting it in an anonymous namespace as well.  The
+compiler doesn't give this warning for types defined in the main .C
+file, as those are unlikely to have multiple definitions.
+@option{-Wsubobject-linkage} is enabled by default.
 
 @item -Wdate-time
 @opindex Wdate-time