aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2004-01-16 16:59:30 +0000
committerMark Mitchell <mark@codesourcery.com>2004-01-16 16:59:30 +0000
commit215f5f167f59c726cdc340d3dc642dc3294e6f7a (patch)
tree879517ea24b96ba333e7228a05258a2dfd305570
parentb852fd6443b95bc143cee36530287cdd7fc4e6b8 (diff)
PR c++/13478
* call.c (convert_like_real): Do not perform an additional direct-initialization when binding to a reference. PR c++/13478 * g++.dg/init/ref10.C: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@75979 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/init/ref10.C14
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a902c255768..3c41c9a2585 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/13478
+ * call.c (convert_like_real): Do not perform an additional
+ direct-initialization when binding to a reference.
+
2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/13407
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 26ca4885f7d..74878fd5cdc 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4068,8 +4068,7 @@ convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner,
conversion, but is not considered during overload resolution.
If the target is a class, that means call a ctor. */
- if (IS_AGGR_TYPE (totype)
- && (inner >= 0 || !lvalue_p (expr)))
+ if (IS_AGGR_TYPE (totype) && inner >= 0)
{
expr = (build_temp
(expr, totype,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3136eda9d74..a9f2858e270 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/13478
+ * g++.dg/init/ref10.C: New test.
+
2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/13407
diff --git a/gcc/testsuite/g++.dg/init/ref10.C b/gcc/testsuite/g++.dg/init/ref10.C
new file mode 100644
index 00000000000..73fd6de92dc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref10.C
@@ -0,0 +1,14 @@
+// PR c++/13478
+
+struct A {};
+struct B : protected A {
+ B() {};
+ B(const A& ) {};
+private:
+ B(const B& ) {};
+};
+
+void foo(const A* ap)
+{
+ const B& br = *ap;
+}