https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99086
Bug ID: 99086
Summary: including <iterator> and defaulting spaceship operator
causes compiler segfault
Product: gcc
Version: 10.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: crillion at tiscali dot it
Target Milestone: ---
Created attachment 50178
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50178&action=edit
an archive containing .ii and .s files for windows and linux
Hi,
a little program with a tiny class defaulting the spaceship operator and the
inclusion of <iterator> header causes compiler segfault (the compiler gives
segmentation error while compiling, no executable is produced).
I could see this behaviour on these systems :
(windows 10 64bit)
(it's the g++ 10.2 from mingw-w64 distribution obtained by msys2)
g++ --version
g++ (Rev6, Built by MSYS2 project) 10.2.0
(linux opensuse 15.2 64bit, hosted on virtual box 6.1.16 r140961 (Qt5.6.2),
running on my above windows system)
> g++ --version
g++ (SUSE Linux) 10.2.1 20200825 [revision
c0746a1beb1ba073c7981eb09f55b3d993b32e5c]
==============
program.cpp :
------------------
#include <iterator>
class value_wrapper
{
public :
bool operator<=>(const value_wrapper& rhs) const = default;
private :
unsigned short value_;
};
int main(int, char**)
{
value_wrapper lhs, rhs;
auto x = lhs < rhs;
}
=================================
batch file used to compile it (already including your recommended switches in
bug reporting instructions, which turn out not to mitigate the segfault error)
windows :
g++ -std=c++20 -pedantic -Wall -Wextra -Werror=return-type -Wshadow=local
-Wempty-body -fdiagnostics-color -s -Os -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations program.cpp -save-temps -o program_gpp.exe
linux :
g++ -std=c++20 -pedantic -Wall -Wextra -Werror=return-type -Wshadow=local
-Wempty-body -fdiagnostics-color -s -Os -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations program.cpp -save-temps -o program_gpp
I add as attachment a 7zip archive containing the requested .ii and .s files
respectively for the windows and linux compilation:
program.ii.linux
program.ii.windows
program.s.linux
program.s.windows
I was originally using a field of type boost gregorian date, which in turn
causes inclusion of <iterator>. I could reduce boost include files just to the
inclusion of <iterator>
Sorry but I didn't reduce, nor inspect the <iterator> header, since I consider
standard library headers too complicated for me to analyze.
Thanks,
Marco