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.


Tested x86_64-linux. OK for trunk?


commit b58e771fe21ae380200fdec00aa899d4b15b73d5
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Aug 13 13:25:39 2019 +0100

    PR c++/91436 fix C++ dialect for std::make_unique fix-it hint
    
    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.

diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 9f278220df3..96b2d90540d 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -5557,7 +5557,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},
@@ -5619,7 +5619,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},
diff --git a/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C 
b/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C
index fe880a6263b..3ec9abd9316 100644
--- a/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C
+++ b/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C
@@ -1,2 +1,3 @@
+// { dg-do compile { target c++14 } }
 using namespace std::complex_literals; // { dg-error "" }
 // { dg-message "#include <complex>" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C 
b/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C
index d9eeb4284e8..a8f27473e6d 100644
--- a/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C
+++ b/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C
@@ -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 }
 

Reply via email to