| Submitter | Jonathan Wakely |
|---|---|
| Date | Feb. 3, 2011, 12:19 a.m. |
| Message ID | <AANLkTimy-0dfdBd1cGbFS93oFqH-K4=9N+8boQpmsN+i@mail.gmail.com> |
| Download | mbox | patch |
| Permalink | /patch/81600/ |
| State | New |
| Headers | show |
Comments
On Thu, Feb 3, 2011 at 1:19 AM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote: > this patch fixes PR c++/47589 (a 4.3/4.4 ice-on-valid-code regression) > by backporting Jakub's fix for c++/45894, which was caused by the same > problem but only manifested with -std=c++0x -Wsequence-point > > Jakub's new test doesn't compile on the 4.4 branch, so this adds a new > test reduced from the original reproducer attached to c++/47589 > > Tested x86_64-linux, OK for 4.4? > > ==> cp/ChangeLog <== > 2011-02-02 Jonathan Wakely <jwakely.gcc@gmail.com> > > PR c++/47589 > Backport from mainline > 2010-11-09 Jakub Jelinek <jakub@redhat.com> > > PR c++/45894 > * tree.c (lvalue_kind): Don't crash if ref has NULL type. > > ==> testsuite/ChangeLog <== > 2011-02-02 Jonathan Wakely <jwakely.gcc@gmail.com> > > PR c++/47589 > * g++.dg/pr47589.C: New test. > > > Should I also check the new test into the 4.5 branch and trunk to > avoid future regressions? Yes, testcases should always go to all newer branches (and trunk) as well. Richard.
OK. Jason
Patch
Index: cp/tree.c =================================================================== --- cp/tree.c (revision 169769) +++ cp/tree.c (working copy) @@ -72,7 +72,8 @@ lvalue_p_1 (tree ref) == REFERENCE_TYPE) return lvalue_p_1 (TREE_OPERAND (ref, 0)); - if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE) + if (TREE_TYPE (ref) + && TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE) { /* unnamed rvalue references are rvalues */ if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref)) Index: testsuite/g++.dg/pr47589.C =================================================================== --- testsuite/g++.dg/pr47589.C (revision 0) +++ testsuite/g++.dg/pr47589.C (revision 0) @@ -0,0 +1,26 @@ +// PR c++/47589 +// { dg-do compile } + +struct F +{ + typedef void(*Cb)(); + + F(Cb); +}; + +struct C +{ + template<class D> static void f(); +}; + +template<class D> +struct TF : F +{ + TF() : F(C::f<D>) { } +}; + +struct DTC : TF<DTC> +{ + DTC() { } +}; +
this patch fixes PR c++/47589 (a 4.3/4.4 ice-on-valid-code regression) by backporting Jakub's fix for c++/45894, which was caused by the same problem but only manifested with -std=c++0x -Wsequence-point Jakub's new test doesn't compile on the 4.4 branch, so this adds a new test reduced from the original reproducer attached to c++/47589 Tested x86_64-linux, OK for 4.4? ==> cp/ChangeLog <== 2011-02-02 Jonathan Wakely <jwakely.gcc@gmail.com> PR c++/47589 Backport from mainline 2010-11-09 Jakub Jelinek <jakub@redhat.com> PR c++/45894 * tree.c (lvalue_kind): Don't crash if ref has NULL type. ==> testsuite/ChangeLog <== 2011-02-02 Jonathan Wakely <jwakely.gcc@gmail.com> PR c++/47589 * g++.dg/pr47589.C: New test. Should I also check the new test into the 4.5 branch and trunk to avoid future regressions?