From 5668970a07f9e44a67c67600909911c757cd05fd Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 26 Jan 2017 10:32:22 -0500 Subject: [PATCH] * name-lookup.c (parse_using_directive): Deprecate strong using. From-SVN: r244936 --- gcc/cp/ChangeLog | 2 + gcc/cp/name-lookup.c | 2 + gcc/doc/extend.texi | 48 ------------------- .../strong-using-1.C => cpp0x/inline-ns6.C} | 0 .../strong-using-2.C => cpp0x/inline-ns7.C} | 0 .../strong-using-3.C => cpp0x/inline-ns8.C} | 0 .../strong-using-5.C => cpp0x/inline-ns9.C} | 0 gcc/testsuite/g++.dg/lookup/strong-using-4.C | 8 ---- .../doc/html/manual/debug_mode_design.html | 1 - libstdc++-v3/doc/xml/manual/debug_mode.xml | 1 - 10 files changed, 4 insertions(+), 58 deletions(-) rename gcc/testsuite/g++.dg/{lookup/strong-using-1.C => cpp0x/inline-ns6.C} (100%) rename gcc/testsuite/g++.dg/{lookup/strong-using-2.C => cpp0x/inline-ns7.C} (100%) rename gcc/testsuite/g++.dg/{lookup/strong-using-3.C => cpp0x/inline-ns8.C} (100%) rename gcc/testsuite/g++.dg/{lookup/strong-using-5.C => cpp0x/inline-ns9.C} (100%) delete mode 100644 gcc/testsuite/g++.dg/lookup/strong-using-4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 90b1671e6f0..48d69525425 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2017-01-26 Jason Merrill + * 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 4004640a60c..10fb540e1f1 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 5cb4748e032..20eba822d54 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 struct A @{ @}; - @} - using namespace debug __attribute ((__strong__)); - template <> struct A @{ @}; // @r{OK to specialize} - - template void f (A); -@} - -int main() -@{ - f (std::A()); // @r{lookup finds} std::f - f (std::A()); -@} -@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 similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-1.C rename to 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 similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-2.C rename to 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 similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-3.C rename to 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 similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-5.C rename to 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 5ea17844a63..00000000000 --- 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 3373471d48e..3fcdb2db885 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 { } }
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 ff2f1cced89..9e97a1ddbe7 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 { } } -- 2.30.2