seen with the 4.7 branch 20120704 and trunk, works with 4.6: $ g++ -std=c++0x -c -O foo.cc foo.cc: In constructor 'std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = std::_Bind<std::_Mem_fn<void (User::*)(void*)>(User*, std::nullptr_t)>; <template-parameter-2-2> = void; _Res = void; _ArgTypes = {}]': foo.cc:12:1: internal compiler error: in type_contains_placeholder_1, at tree.c:3015 } ^ Please submit a full bug report, with preprocessed source if appropriate. #include <functional> struct User { void run(void *) {} }; int main() { User u; std::function<void()> p = std::bind(&User::run, &u, nullptr); }
[forwarded from http://bugs.debian.org/680521] "Seems related to optimization and nullptr in args. When nullptr is replaced with (void *)0, gcc compiles the code successfully."
Works for me on Linux/x86-64 with GCC 4.7 revision 189343 and trunk revision 189334.
still see this with trunk 189355
Author: jason Date: Mon Jul 9 14:11:01 2012 New Revision: 189386 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=189386 Log: PR c++/53882 * tree.c (type_contains_placeholder_1): Handle NULLPTR_TYPE. (type_hash_eq): Likewise. Added: trunk/gcc/testsuite/g++.dg/cpp0x/nullptr29.C Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree.c
Author: jason Date: Mon Jul 9 14:11:33 2012 New Revision: 189388 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=189388 Log: PR c++/53882 * tree.c (type_contains_placeholder_1): Handle NULLPTR_TYPE. (type_hash_eq): Likewise. Added: branches/gcc-4_7-branch/gcc/testsuite/g++.dg/cpp0x/nullptr29.C Modified: branches/gcc-4_7-branch/gcc/ChangeLog branches/gcc-4_7-branch/gcc/testsuite/ChangeLog branches/gcc-4_7-branch/gcc/tree.c
Fixed for 4.7.2.