From ddc757fe19adf1b99121fd6c42f6149b8d8cac2e Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 11 Oct 2013 14:18:42 +0000 Subject: [PATCH] re PR c++/31671 (Non-type template of type const ref accepted as a non-const ref) /cp 2013-10-11 Paolo Carlini PR c++/31671 * pt.c (convert_nontype_argument): Set expr_type to TREE_TYPE (probe_type). /testsuite 2013-10-11 Paolo Carlini PR c++/31671 * g++.dg/template/nontype26.C: New. From-SVN: r203444 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/nontype26.C | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/nontype26.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index da49d12c629..1e0c46cd45f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-10-11 Paolo Carlini + + PR c++/31671 + * pt.c (convert_nontype_argument): Set expr_type to + TREE_TYPE (probe_type). + 2013-10-11 Jakub Jelinek * decl.c (duplicate_decls): Error out for redeclaration of UDRs. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5721a681a4a..57b3ff04feb 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5611,7 +5611,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) TREE_TYPE (TREE_TYPE (addr))))) { expr = TREE_OPERAND (addr, 0); - expr_type = TREE_TYPE (expr); + expr_type = TREE_TYPE (probe_type); } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f182ad704b5..c27d500b211 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-11 Paolo Carlini + + PR c++/31671 + * g++.dg/template/nontype26.C: New. + 2013-10-11 Thomas Schwinge * c-c++-common/cpp/openmp-define-1.c: New file. diff --git a/gcc/testsuite/g++.dg/template/nontype26.C b/gcc/testsuite/g++.dg/template/nontype26.C new file mode 100644 index 00000000000..763d987dd39 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/nontype26.C @@ -0,0 +1,20 @@ +// PR c++/31671 + +template void doit() { + i = 0; +} + +template class X { +public: + void foo() { + doit(); // { dg-error "cv-qualification|no matching" } + } +}; + +int i = 0; + +X x; + +int main() { + x.foo(); +} -- 2.30.2