From 9469850c188249125ff0c1e29065a30a5292e69d Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 15 Dec 2009 15:13:08 +0000 Subject: [PATCH] PR c++/41183 * cp-tree.h (current_class_ptr): Give NULL even when cfun has NULL cfun->language. * g++.dg/torture/pr41183.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155254 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-tree.h | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/torture/pr41183.C | 30 ++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr41183.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fbfed9f..d9d758f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-12-15 Jakub Jelinek + + PR c++/41183 + * cp-tree.h (current_class_ptr): Give NULL even when cfun + has NULL cfun->language. + 2009-12-14 Jason Merrill PR c++/42364 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index eb7f06d..4e32f9b 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1026,7 +1026,8 @@ struct GTY(()) language_function { expression for `*this'. */ #define current_class_ptr \ - (cfun ? cp_function_chain->x_current_class_ptr : NULL_TREE) + (cfun && cp_function_chain \ + ? cp_function_chain->x_current_class_ptr : NULL_TREE) #define current_class_ref \ (cfun ? cp_function_chain->x_current_class_ref : NULL_TREE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eb9cf47..a4ccde9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-15 Jakub Jelinek + + PR c++/41183 + * g++.dg/torture/pr41183.C: New test. + 2009-12-15 Tobias Burnus PR fortran/41235 diff --git a/gcc/testsuite/g++.dg/torture/pr41183.C b/gcc/testsuite/g++.dg/torture/pr41183.C new file mode 100644 index 0000000..df3e303 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr41183.C @@ -0,0 +1,30 @@ +// PR c++/41183 +// { dg-do compile } + +void foo (const char *); + +template +struct A +{ + template A (const int &, T); + int i; +}; + +template +template +A::A (const int &j, T) : i(j) +{ + foo (0); + foo (0); + foo (__PRETTY_FUNCTION__); +} + +int N; + +struct B +{ + B (); + A<&N> a; +}; + +B::B() : a(N, 0) {} -- 2.7.4