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
This commit is contained in:
Jonathan Wakely 2019-08-14 20:52:58 +01:00 committed by Jonathan Wakely
parent 07fd852ff1
commit 07ee59246c
6 changed files with 26 additions and 11 deletions

View 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>

View 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},

View 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.

View File

@ -1,2 +1,3 @@
// { dg-do compile { target c++14 } }
using namespace std::complex_literals; // { dg-error "" }
// { dg-message "#include <complex>" "" { target *-*-* } .-1 }

View 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 }

View 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'" }