diff options
author | Andrew Pinski <apinski@apple.com> | 2004-06-24 06:51:56 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2004-06-23 23:51:56 -0700 |
commit | b713a445f2bfa00419e7efdb5ffc0cf89e335227 (patch) | |
tree | 8b542cb717be7d0a6115fd0fa9904df608c4535f /gcc | |
parent | 62d1db179e700aeb45e805aa81de54036745f93e (diff) | |
download | gcc-b713a445f2bfa00419e7efdb5ffc0cf89e335227.zip gcc-b713a445f2bfa00419e7efdb5ffc0cf89e335227.tar.gz gcc-b713a445f2bfa00419e7efdb5ffc0cf89e335227.tar.bz2 |
re PR middle-end/15988 (ICE in fold_convert with pointer-to-member-function)
2004-06-23 Andrew Pinski <apinski@apple.com>
PR middle-end/15988
* fold-const.c (fold_convert): Types which are compatible
can be converted with only a NOP_EXPR.
2004-06-23 Andrew Pinski <apinski@apple.com>
PR middle-end/15988
* g++.dg/opt/ptrmem4.C: New test.
From-SVN: r83585
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/ptrmem4.C | 12 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eb04bf3..6d23ff9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-06-23 Andrew Pinski <apinski@apple.com> + + PR middle-end/15988 + * fold-const.c (fold_convert): Types which are compatible + can be converted with only a NOP_EXPR. + 2004-06-24 Alan Modra <amodra@bigpond.net.au> * calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 0dd5973..6ef7b1a 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1907,7 +1907,9 @@ fold_convert (tree type, tree arg) || TREE_CODE (orig) == ERROR_MARK) return error_mark_node; - if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (orig)) + if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (orig) + || lang_hooks.types_compatible_p (TYPE_MAIN_VARIANT (type), + TYPE_MAIN_VARIANT (orig))) return fold (build1 (NOP_EXPR, type, arg)); if (INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index facc58b..d46e673 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2004-06-23 Andrew Pinski <apinski@apple.com> + PR middle-end/15988 + * g++.dg/opt/ptrmem4.C: New test. + * gcc.dg/c90-array-quals-2.c: New test. 2006-06-23 Nitin Yewale <NitinY@KPITCummins.com> diff --git a/gcc/testsuite/g++.dg/opt/ptrmem4.C b/gcc/testsuite/g++.dg/opt/ptrmem4.C new file mode 100644 index 0000000..2ca34f4 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/ptrmem4.C @@ -0,0 +1,12 @@ +// { dg-do run } +// { dg-options "-O3" } + +struct X { void foo (); }; + +template <typename> +inline void spawn (void (X::*fun_ptr)()) {} + +void bar () { + void (X::*const comp)() = &X::foo; + spawn<int> (comp); +} |