From 4b48a93e898353dc4bbe1bec80ec56736fc16beb Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 1 May 2001 11:47:49 +0000 Subject: [PATCH] call.c (build_new_op): Convert args from reference here. cp: * call.c (build_new_op): Convert args from reference here. (build_conditional_expr): Don't convert here. testsuite: * g++.old-deja/g++.pt/ref4.C: New test. From-SVN: r41721 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/call.c | 11 ++++++----- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.old-deja/g++.pt/ref4.C | 25 ++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/ref4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5255f156ba8..b082ce289ac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-05-01 Nathan Sidwell + + * call.c (build_new_op): Convert args from reference here. + (build_conditional_expr): Don't convert here. + 2001-05-01 Nathan Sidwell * spew.c (last_token_id): New static variable. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 4d4d033c130..d2a1c95fbd8 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -2892,11 +2892,6 @@ build_conditional_expr (arg1, arg2, arg3) || TREE_TYPE (arg3) == error_mark_node) return error_mark_node; - /* Convert from reference types to ordinary types; no expressions - really have reference type in C++. */ - arg2 = convert_from_reference (arg2); - arg3 = convert_from_reference (arg3); - /* [expr.cond] If either the second or the third operand has type (possibly @@ -3244,6 +3239,12 @@ build_new_op (code, flags, arg1, arg2, arg3) if (arg3 && TREE_CODE (arg3) == OFFSET_REF) arg3 = resolve_offset_ref (arg3); + arg1 = convert_from_reference (arg1); + if (arg2) + arg2 = convert_from_reference (arg2); + if (arg3) + arg3 = convert_from_reference (arg3); + if (code == COND_EXPR) { if (arg2 == NULL_TREE diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bc82921c28b..12d5b6e4e21 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-05-01 Nathan Sidwell + + * g++.old-deja/g++.pt/ref4.C: New test. + 2001-04-30 Richard Henderson * gcc.dg/20000724-1.c: Revert last change. diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ref4.C b/gcc/testsuite/g++.old-deja/g++.pt/ref4.C new file mode 100644 index 00000000000..1291dc1ff2d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/ref4.C @@ -0,0 +1,25 @@ +// Build don't link: +// +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 29 Apr 2001 + +// Bug 2664. We failed to convert_from_reference for non-type +// template parms. + +struct cow { }; + +cow c; + +void func (cow &c) {} +void operator-(cow &c) {} + +template void test() +{ + func(C); //OK + -C; //bogus error +} + +int main() +{ + test (); +} -- 2.30.2