Bug 53882 - [4.7/4.8 Regression] ICE in type_contains_placeholder_1, at tree.c:3015
Summary: [4.7/4.8 Regression] ICE in type_contains_placeholder_1, at tree.c:3015
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.7.1
: P3 normal
Target Milestone: 4.7.2
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2012-07-06 21:54 UTC by Matthias Klose
Modified: 2012-07-10 09:02 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work: 4.6.3
Known to fail: 4.7.1, 4.8.0
Last reconfirmed: 2012-07-07 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Matthias Klose 2012-07-06 21:54:00 UTC
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);
}
Comment 1 Matthias Klose 2012-07-06 22:04:26 UTC
[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."
Comment 2 H.J. Lu 2012-07-07 12:34:48 UTC
Works for me on Linux/x86-64 with GCC 4.7 revision 189343 and
trunk revision 189334.
Comment 3 Matthias Klose 2012-07-08 17:59:33 UTC
still see this with trunk 189355
Comment 4 Jason Merrill 2012-07-09 14:11:11 UTC
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
Comment 5 Jason Merrill 2012-07-09 14:11:47 UTC
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
Comment 6 Jason Merrill 2012-07-10 09:02:25 UTC
Fixed for 4.7.2.