PR c++/80990 use cv-qualifiers in class template argument deduction

gcc/cp:

	PR c++/80990
	* pt.c (do_class_deduction): Build qualified type.

gcc/testsuite:

	PR c++/80990
	* g++.dg/cpp1z/class-deduction39.C: New.

From-SVN: r248966
This commit is contained in:
Jonathan Wakely 2017-06-07 12:34:36 +01:00 committed by Jonathan Wakely
parent 09a939a0d5
commit 83059741a0
4 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2017-06-07 Jonathan Wakely <jwakely@redhat.com>
PR c++/80990
* pt.c (do_class_deduction): Build qualified type.
2017-06-06 Nathan Sidwell <nathan@acm.org>
* name-lookup.c (suggest_alternatives_for): Use qualified lookup

View File

@ -25367,7 +25367,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
--cp_unevaluated_operand;
release_tree_vector (args);
return TREE_TYPE (t);
return cp_build_qualified_type (TREE_TYPE (t), cp_type_quals (ptype));
}
/* Replace occurrences of 'auto' in TYPE with the appropriate type deduced

View File

@ -1,3 +1,8 @@
2017-06-07 Jonathan Wakely <jwakely@redhat.com>
PR c++/80990
* g++.dg/cpp1z/class-deduction39.C: New.
2017-06-07 Marek Polacek <polacek@redhat.com>
PR sanitizer/80932

View File

@ -0,0 +1,15 @@
// { dg-options -std=c++1z }
template <class T> struct A { };
A<int> a;
const A c = a;
volatile A v = a;
const volatile A cv = a;
template <class,class> struct same;
template <class T> struct same<T,T> {};
same<decltype(c), const A<int>> s1;
same<decltype(v), volatile A<int>> s2;
same<decltype(cv), const volatile A<int>> s3;