aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-01-26 10:32:22 -0500
committerJason Merrill <jason@gcc.gnu.org>2017-01-26 10:32:22 -0500
commit5668970a07f9e44a67c67600909911c757cd05fd (patch)
treee87dd12c0017d1279d91854f08c73f2ffa072452
parenteffdaefed3023fea3c3b56932d1a2be816af7aea (diff)
downloadgcc-5668970a07f9e44a67c67600909911c757cd05fd.zip
gcc-5668970a07f9e44a67c67600909911c757cd05fd.tar.gz
gcc-5668970a07f9e44a67c67600909911c757cd05fd.tar.bz2
* name-lookup.c (parse_using_directive): Deprecate strong using.
From-SVN: r244936
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/name-lookup.c2
-rw-r--r--gcc/doc/extend.texi48
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inline-ns6.C (renamed from gcc/testsuite/g++.dg/lookup/strong-using-1.C)0
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inline-ns7.C (renamed from gcc/testsuite/g++.dg/lookup/strong-using-2.C)0
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inline-ns8.C (renamed from gcc/testsuite/g++.dg/lookup/strong-using-3.C)0
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inline-ns9.C (renamed from gcc/testsuite/g++.dg/lookup/strong-using-5.C)0
-rw-r--r--gcc/testsuite/g++.dg/lookup/strong-using-4.C8
-rw-r--r--libstdc++-v3/doc/html/manual/debug_mode_design.html1
-rw-r--r--libstdc++-v3/doc/xml/manual/debug_mode.xml1
10 files changed, 4 insertions, 58 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 90b1671..48d6952 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
2017-01-26 Jason Merrill <jason@redhat.com>
+ * name-lookup.c (parse_using_directive): Deprecate strong using.
+
PR c++/79176 - lambda ICE with -flto -Os
* decl2.c (vague_linkage_p): Handle decloned 'tors.
* tree.c (decl_linkage): Likewise.
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 4004640..10fb540 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -4125,6 +4125,8 @@ parse_using_directive (tree name_space, tree attribs)
tree name = get_attribute_name (a);
if (is_attribute_p ("strong", name))
{
+ warning (OPT_Wdeprecated, "strong using is deprecated; use inline "
+ "namespaces instead");
if (!toplevel_bindings_p ())
error ("strong using only meaningful at namespace scope");
else if (name_space != error_mark_node)
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 5cb4748..20eba82 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -21802,7 +21802,6 @@ Predefined Macros,cpp,The GNU C Preprocessor}).
method denoted by a @samp{->*} or @samp{.*} expression.
* C++ Attributes:: Variable, function, and type attributes for C++ only.
* Function Multiversioning:: Declaring multiple function versions.
-* Namespace Association:: Strong using-directives for namespace association.
* Type Traits:: Compiler support for type traits.
* C++ Concepts:: Improved support for generic programming.
* Deprecated Features:: Things will disappear from G++.
@@ -22368,8 +22367,6 @@ does not have constructors or destructors.
@end table
-See also @ref{Namespace Association}.
-
@node Function Multiversioning
@section Function Multiversioning
@cindex function versions
@@ -22428,51 +22425,6 @@ dispatching to call the right version at runtime. Refer to the
@uref{http://gcc.gnu.org/wiki/FunctionMultiVersioning, GCC wiki on
Function Multiversioning} for more details.
-@node Namespace Association
-@section Namespace Association
-
-@strong{Caution:} The semantics of this extension are equivalent
-to C++ 2011 inline namespaces. Users should use inline namespaces
-instead as this extension will be removed in future versions of G++.
-
-A using-directive with @code{__attribute ((strong))} is stronger
-than a normal using-directive in two ways:
-
-@itemize @bullet
-@item
-Templates from the used namespace can be specialized and explicitly
-instantiated as though they were members of the using namespace.
-
-@item
-The using namespace is considered an associated namespace of all
-templates in the used namespace for purposes of argument-dependent
-name lookup.
-@end itemize
-
-The used namespace must be nested within the using namespace so that
-normal unqualified lookup works properly.
-
-This is useful for composing a namespace transparently from
-implementation namespaces. For example:
-
-@smallexample
-namespace std @{
- namespace debug @{
- template <class T> struct A @{ @};
- @}
- using namespace debug __attribute ((__strong__));
- template <> struct A<int> @{ @}; // @r{OK to specialize}
-
- template <class T> void f (A<T>);
-@}
-
-int main()
-@{
- f (std::A<float>()); // @r{lookup finds} std::f
- f (std::A<int>());
-@}
-@end smallexample
-
@node Type Traits
@section Type Traits
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-1.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns6.C
index aa0c5f9..aa0c5f9 100644
--- a/gcc/testsuite/g++.dg/lookup/strong-using-1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/inline-ns6.C
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-2.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns7.C
index d9f99a8..d9f99a8 100644
--- a/gcc/testsuite/g++.dg/lookup/strong-using-2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/inline-ns7.C
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-3.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns8.C
index 7679c6f..7679c6f 100644
--- a/gcc/testsuite/g++.dg/lookup/strong-using-3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/inline-ns8.C
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-5.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns9.C
index 555adb0..555adb0 100644
--- a/gcc/testsuite/g++.dg/lookup/strong-using-5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/inline-ns9.C
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-4.C b/gcc/testsuite/g++.dg/lookup/strong-using-4.C
deleted file mode 100644
index 5ea1784..0000000
--- a/gcc/testsuite/g++.dg/lookup/strong-using-4.C
+++ /dev/null
@@ -1,8 +0,0 @@
-// PR c++/16301
-
-// { dg-do compile }
-
-namespace NS2
-{
- using namespace NS1 __attribute__ ((strong)); // { dg-error "" }
-}
diff --git a/libstdc++-v3/doc/html/manual/debug_mode_design.html b/libstdc++-v3/doc/html/manual/debug_mode_design.html
index 3373471..3fcdb2d 100644
--- a/libstdc++-v3/doc/html/manual/debug_mode_design.html
+++ b/libstdc++-v3/doc/html/manual/debug_mode_design.html
@@ -250,7 +250,6 @@ namespace std
};
} // namespace __cxx1998
- // namespace __debug __attribute__ ((strong));
inline namespace __debug { }
}
</pre></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml
index ff2f1cc..9e97a1d 100644
--- a/libstdc++-v3/doc/xml/manual/debug_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml
@@ -656,7 +656,6 @@ namespace std
};
} // namespace __cxx1998
- // namespace __debug __attribute__ ((strong));
inline namespace __debug { }
}
</programlisting>