From 07ee59246c2f67249882e74c4c131004aad9a6da Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 14 Aug 2019 20:52:58 +0100 Subject: [PATCH] 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. * g++.dg/lookup/missing-std-include-8.C: Check make_unique here. From-SVN: r274492 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/name-lookup.c | 4 ++-- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/lookup/missing-std-include-5.C | 1 + gcc/testsuite/g++.dg/lookup/missing-std-include-6.C | 9 --------- gcc/testsuite/g++.dg/lookup/missing-std-include-8.C | 9 +++++++++ 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8fee0458fe9..9eeba3dadc3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-08-14 Jonathan Wakely + + 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 Marek Polacek diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index d5e491e9072..16c74287bb1 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -5559,7 +5559,7 @@ get_std_name_hint (const char *name) {"bitset", "", cxx11}, /* . */ {"complex", "", cxx98}, - {"complex_literals", "", cxx98}, + {"complex_literals", "", cxx14}, /* . */ {"condition_variable", "", cxx11}, {"condition_variable_any", "", cxx11}, @@ -5632,7 +5632,7 @@ get_std_name_hint (const char *name) {"allocator", "", cxx98}, {"allocator_traits", "", cxx11}, {"make_shared", "", cxx11}, - {"make_unique", "", cxx11}, + {"make_unique", "", cxx14}, {"shared_ptr", "", cxx11}, {"unique_ptr", "", cxx11}, {"weak_ptr", "", cxx11}, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7a3e6bfde7..33a9fc6d338 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-08-14 Jonathan Wakely + + 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 * gcc.c-torture/execute/noinit-attribute.c: Fix typo. 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 " "" { 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 -void test_make_unique () -{ - auto p = std::make_unique(); // { dg-error "'make_unique' is not a member of 'std'" } - // { dg-message "'#include '" "" { target *-*-* } .-1 } - // { dg-error "expected primary-expression before '>' token" "" { target *-*-* } .-2 } - // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } -} - std::shared_ptr test_shared_ptr; // { dg-error "'shared_ptr' in namespace 'std' does not name a template type" } // { dg-message "'#include '" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C b/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C index 68b208299f2..73532c82968 100644 --- a/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C +++ b/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C @@ -13,6 +13,15 @@ void test_make_shared () // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } } +template +void test_make_unique () +{ + std::make_unique(); // { 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'" } -- 2.30.2