https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71740
Bug ID: 71740
Summary: ICE when defining a pointer to the `memcpy()` function
with namespace scope using `auto` targeting i686
Product: gcc
Version: 6.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lh_mouse at 126 dot com
Target Milestone: ---
The following code generates an ICE with i686-w64-mingw32-gcc:
** Note: the function `memcpy` is declared manually to avoid
#include'ing any system headers. The prototype MUST match
the one in the standard library. Renaming it or changing its
parameters is not allowed in order to reproduce the ICE. **
```
D:\Desktop>cat test.cpp
extern "C" void *__attribute__((__cdecl__)) memcpy(void *, const void *,
unsigned);
auto p = &memcpy;
D:\Desktop>i686-w64-mingw32-gcc test.cpp
test.cpp:2:11: internal compiler error: Segmentation fault
auto p = &memcpy;
^~~~~~
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
test.cpp:2:11: internal compiler error: Aborted
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
i686-w64-mingw32-gcc: internal compiler error: Aborted (program cc1plus)
```
Changing `memcpy` to something like `foo` or changing the type of the last
parameter to `unsigned long` causes the ICE to vanish.
Replacing `auto p =` with `void *(*p)(void *, const void *, unsigned) =` works
around the problem.