PR c++/91436 fix C++ dialect for std::make_unique fix-it hint
authorJonathan Wakely <jwakely@redhat.com>
Wed, 14 Aug 2019 19:52:58 +0000 (20:52 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 14 Aug 2019 19:52:58 +0000 (20:52 +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: r274492

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 8fee045..9eeba3d 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-14  Jakub Jelinek  <jakub@redhat.com>
            Marek Polacek  <polacek@redhat.com>
 
index d5e491e..16c7428 100644 (file)
@@ -5559,7 +5559,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},
@@ -5632,7 +5632,7 @@ get_std_name_hint (const char *name)
     {"allocator", "<memory>", cxx98},
     {"allocator_traits", "<memory>", cxx11},
     {"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 d7a3e6b..33a9fc6 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-14  Christophe Lyon  <christophe.lyon@linaro.org>
 
        * gcc.c-torture/execute/noinit-attribute.c: Fix typo.
index fe880a6..3ec9abd 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 d9eeb42..a8f2747 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 68b2082..73532c8 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'" }