diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-04-11 21:42:33 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-04-11 21:42:33 +0200 |
commit | 43a8d6ccf2142b8128e659b14842f50cf2fa48b2 (patch) | |
tree | 14bafee9573e5728d39dea1c54d806b4cb2843c2 | |
parent | a2a5f18ea792acb01cf1ae24e94d9ad0daf3acca (diff) | |
download | gcc-43a8d6ccf2142b8128e659b14842f50cf2fa48b2.zip gcc-43a8d6ccf2142b8128e659b14842f50cf2fa48b2.tar.gz gcc-43a8d6ccf2142b8128e659b14842f50cf2fa48b2.tar.bz2 |
re PR c++/56895 (ICE: unexpected expression of kind arrow_expr)
PR c++/56895
* call.c (null_ptr_cst_p): Call fold_non_dependent_expr_sfinae before
calling maybe_constant_value for C++98.
* g++.dg/template/arrow4.C: New test.
From-SVN: r197824
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/arrow4.C | 19 |
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e2cf1b4..a9e40c2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-04-11 Jakub Jelinek <jakub@redhat.com> + + PR c++/56895 + * call.c (null_ptr_cst_p): Call fold_non_dependent_expr_sfinae before + calling maybe_constant_value for C++98. + 2013-04-11 Jason Merrill <jason@redhat.com> PR c++/56901 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 4c59866..88bf100 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -555,7 +555,7 @@ null_ptr_cst_p (tree t) { /* Core issue 903 says only literal 0 is a null pointer constant. */ if (cxx_dialect < cxx0x) - t = maybe_constant_value (t); + t = maybe_constant_value (fold_non_dependent_expr_sfinae (t, tf_none)); STRIP_NOPS (t); if (integer_zerop (t) && !TREE_OVERFLOW (t)) return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21b44e7..a3a517e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-04-11 Jakub Jelinek <jakub@redhat.com> + + PR c++/56895 + * g++.dg/template/arrow4.C: New test. + 2013-04-11 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/array23.adb: New test. diff --git a/gcc/testsuite/g++.dg/template/arrow4.C b/gcc/testsuite/g++.dg/template/arrow4.C new file mode 100644 index 0000000..89e7822 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/arrow4.C @@ -0,0 +1,19 @@ +// PR c++/56895 +// { dg-do compile } + +void fn (int *); +void fn (int); +extern struct A { bool foo (); A bar (); } *a; + +template <int> +void +baz () +{ + fn (a->bar().foo() ? 1 : 0); +} + +void +test () +{ + baz<0> (); +} |