From 009683b3add393296a992f44e7078b0e3e3e6246 Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 1 May 2001 11:47:49 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41721 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 5255f15..b082ce2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 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. (read_token): Set it here. (yyerror): Use it here. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 4d4d033..d2a1c95 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 bc82921..12d5b6e 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 0000000..1291dc1 --- /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.7.4