From 9fec765f9cdb08df9383ddcc630302745a0931c7 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 3 Feb 2011 22:34:51 +0000 Subject: [PATCH] re PR c++/47589 (internal compiler error: Segmentation fault) 2011-02-03 Jonathan Wakely PR c++/47589 Backport from mainline 2010-11-09 Jakub Jelinek PR c++/45894 * tree.c (lvalue_kind): Don't crash if ref has NULL type. From-SVN: r169813 --- gcc/cp/ChangeLog | 9 +++++++++ gcc/cp/tree.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/pr47589.C | 26 ++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/pr47589.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e780d2a25bae..2dc4781655bd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2011-02-03 Jonathan Wakely + + PR c++/47589 + Backport from mainline + 2010-11-09 Jakub Jelinek + + PR c++/45894 + * tree.c (lvalue_kind): Don't crash if ref has NULL type. + 2010-12-07 Jakub Jelinek Backport from mainline diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 45e0c33bd582..ec069b0ca216 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc19e213f65e..438f912b3485 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-02-03 Jonathan Wakely + + PR c++/47589 + * g++.dg/pr47589.C: New test. + 2011-01-31 Nathan Froyd Backport from mainline: diff --git a/gcc/testsuite/g++.dg/pr47589.C b/gcc/testsuite/g++.dg/pr47589.C new file mode 100644 index 000000000000..6bc3c80347dc --- /dev/null +++ b/gcc/testsuite/g++.dg/pr47589.C @@ -0,0 +1,26 @@ +// PR c++/47589 +// { dg-do compile } + +struct F +{ + typedef void(*Cb)(); + + F(Cb); +}; + +struct C +{ + template static void f(); +}; + +template +struct TF : F +{ + TF() : F(C::f) { } +}; + +struct DTC : TF +{ + DTC() { } +}; + -- 2.47.2