diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-12-15 16:13:08 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-12-15 16:13:08 +0100 |
commit | 3efd49f9dfe125830c71d8f52a65ced5180dad88 (patch) | |
tree | 92e30d493eab99316735e2576348cdc30ab3d769 /gcc | |
parent | bb194134aca9e09bc1d35c35f87a369e994e616f (diff) | |
download | gcc-3efd49f9dfe125830c71d8f52a65ced5180dad88.zip gcc-3efd49f9dfe125830c71d8f52a65ced5180dad88.tar.gz gcc-3efd49f9dfe125830c71d8f52a65ced5180dad88.tar.bz2 |
re PR c++/41183 (ICE compiling chromium)
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.
From-SVN: r155254
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr41183.C | 30 |
4 files changed, 43 insertions, 1 deletions
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 <jakub@redhat.com> + + PR c++/41183 + * cp-tree.h (current_class_ptr): Give NULL even when cfun + has NULL cfun->language. + 2009-12-14 Jason Merrill <jason@redhat.com> 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 <jakub@redhat.com> + + PR c++/41183 + * g++.dg/torture/pr41183.C: New test. + 2009-12-15 Tobias Burnus <burnus@net-b.de> 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 <int *> +struct A +{ + template <typename T> A (const int &, T); + int i; +}; + +template <int *X> +template <typename T> +A<X>::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) {} |