]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/91436 fix C++ dialect for std::make_unique fix-it hint
authorJonathan Wakely <jwakely@redhat.com>
Wed, 14 Aug 2019 20:10:00 +0000 (21:10 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 14 Aug 2019 20:10:00 +0000 (21:10 +0100)
The std::make_unique function wasn't added until C++14, and neither was
the std::complex_literals namespace.

gcc/cp:

PR c++/91436
* name-lookup.c (get_std_name_hint): Fix min_dialect field for
complex_literals and make_unique entries.

gcc/testsuite:

PR c++/91436
* g++.dg/lookup/missing-std-include-5.C: Limit test to C++14 and up.
* g++.dg/lookup/missing-std-include-6.C: Don't check make_unique in
test that runs for C++11.
* g++.dg/lookup/missing-std-include-8.C: Check make_unique here.

From-SVN: r274493

gcc/cp/ChangeLog
gcc/cp/name-lookup.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lookup/missing-std-include-5.C
gcc/testsuite/g++.dg/lookup/missing-std-include-6.C
gcc/testsuite/g++.dg/lookup/missing-std-include-8.C

index 925341d5d4738c42f655a909934f451656216e63..307f1e6b032db9dfc413b917fe8126d72bb1fbc5 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR c++/91436
+       * name-lookup.c (get_std_name_hint): Fix min_dialect field for
+       complex_literals and make_unique entries.
+
 2019-08-12  Tom Honermann  <tom@honermann.net>
 
        * parser.c (cp_parser_template_declaration_after_parameters): Enable
index 4ca976c812d84d87c69147276f834c6a582b1ff8..29004d920b10f3d1cbf6efb2747bc460df15c590 100644 (file)
@@ -5656,7 +5656,7 @@ get_std_name_hint (const char *name)
     {"bitset", "<bitset>", cxx11},
     /* <complex>.  */
     {"complex", "<complex>", cxx98},
-    {"complex_literals", "<complex>", cxx98},
+    {"complex_literals", "<complex>", cxx14},
     /* <condition_variable>. */
     {"condition_variable", "<condition_variable>", cxx11},
     {"condition_variable_any", "<condition_variable>", cxx11},
@@ -5718,7 +5718,7 @@ get_std_name_hint (const char *name)
     {"multimap", "<map>", cxx98},
     /* <memory>.  */
     {"make_shared", "<memory>", cxx11},
-    {"make_unique", "<memory>", cxx11},
+    {"make_unique", "<memory>", cxx14},
     {"shared_ptr", "<memory>", cxx11},
     {"unique_ptr", "<memory>", cxx11},
     {"weak_ptr", "<memory>", cxx11},
index 111c5ace0651ca5ae785f421e3f07b8262bf9762..255786692a0888e8d2304ede7496895431431b79 100644 (file)
@@ -1,3 +1,11 @@
+2019-08-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR c++/91436
+       * g++.dg/lookup/missing-std-include-5.C: Limit test to C++14 and up.
+       * g++.dg/lookup/missing-std-include-6.C: Don't check make_unique in
+       test that runs for C++11.
+       * g++.dg/lookup/missing-std-include-8.C: Check make_unique here.
+
 2019-08-13  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/87991
index fe880a6263ba1e4a0587aeb92eaa0a4cb18b5daa..3ec9abd93165f771b31975fcadf461b0d6c92a82 100644 (file)
@@ -1,2 +1,3 @@
+// { dg-do compile { target c++14 } }
 using namespace std::complex_literals; // { dg-error "" }
 // { dg-message "#include <complex>" "" { target *-*-* } .-1 }
index d9eeb4284e8835244ca89303d82ab26c10ad2af4..a8f27473e6dc833da73b48027a2cd7e0c9acc788 100644 (file)
@@ -11,15 +11,6 @@ void test_make_shared ()
   // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 }
 }
 
-template<class T>
-void test_make_unique ()
-{
-  auto p = std::make_unique<T>(); // { dg-error "'make_unique' is not a member of 'std'" }
-  // { dg-message "'#include <memory>'" "" { target *-*-* } .-1 }
-  // { dg-error "expected primary-expression before '>' token" "" { target *-*-* } .-2 }
-  // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 }
-}
-
 std::shared_ptr<int> test_shared_ptr; // { dg-error "'shared_ptr' in namespace 'std' does not name a template type" }
 // { dg-message "'#include <memory>'" "" { target *-*-* } .-1 }
 
index 68b208299f2e2482a4bf1e228f35fd57f009465e..73532c82968099ca551a593a860ef95301948ccf 100644 (file)
@@ -13,6 +13,15 @@ void test_make_shared ()
   // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 }
 }
 
+template<class T>
+void test_make_unique ()
+{
+  std::make_unique<T>(); // { dg-error "'make_unique' is not a member of 'std'" }
+  // { dg-message "'std::make_unique' is only available from C\\+\\+14 onwards" "" { target *-*-* } .-1 }
+  // { dg-error "expected primary-expression before '>' token" "" { target *-*-* } .-2 }
+  // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 }
+}
+
 void test_array ()
 {
   std::array a; // { dg-error "'array' is not a member of 'std'" }