[Bug c++/39014] New: g++ 4.3.1 ICE with -fipa-pta
warren dot armstrong at anu dot edu dot au
gcc-bugzilla@gcc.gnu.org
Thu Jan 29 02:04:00 GMT 2009
I ran across the following while compiling a C++ source of mine:
borked.cpp: In function 'void std::__introsort_loop(_RandomAccessIterator,
_RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator =
__gnu_cxx::__normal_iterator<triple<long long int, long long int, double>*,
std::vector<triple<long long int, long long int, double>,
std::allocator<triple<long long int, long long int, double> > > >, _Size = int,
_Compare = bool (*)(mm_entry_t, mm_entry_t)]':
borked.cpp:51: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
I have reduced the source code as much as possible and pasted it below (I
couldn't see a way to make an attachment). I haven't preprocessed it, but the
only headers involved are standard C++ headers, and there are no complicated
#defines.
I invoked the compiler as:
g++ -c -fipa-pta -o bork.o borked.cpp
If I drop -fipa-pta, everything works.
My compiler version is:
gcc (Gentoo 4.3.1-r1 p1.1) 4.3.1
(I was not sure whether to file a report with Gentoo or here. I chose here as
I doubt Gentoo have fiddled with the implementation of -fipa-pta. Apologies if
I guessed wrong.)
---------------------------
Source:
---------------------------
#include <vector>
#include <stdint.h>
#include <algorithm>
template< class T1, class T2, class T3 >
class triple{
public:
T1 first;
T2 second;
T3 third;
triple() : first(), second(), third()
{}
triple( T1 a, T2 b, T3 c ) : first(a), second(b), third(c)
{}
};
typedef int64_t sindex_t;
typedef uint64_t entry_t;
typedef double value_t;
typedef triple<sindex_t, sindex_t, value_t> mm_entry_t;
typedef triple<sindex_t, sindex_t, sindex_t > mm_size_t;
typedef std::vector< mm_entry_t > mm_entries_t;
typedef std::pair< mm_size_t, mm_entries_t > mm_matrix_t;
#define get_row( entry ) (entry).first
#define get_col( entry ) (entry).second
bool compare( mm_entry_t a, mm_entry_t b ){
if ( get_row(a) < get_row(b) )
return true;
if ( get_row(a) > get_row(b) )
return false;
if ( get_col(a) < get_col(b) )
return true;
return false;
}
int main( int argc, char* argv[] ){
mm_matrix_t matrix;
std::sort( matrix.second.begin(), matrix.second.end(), compare );
return 0;
}
--
Summary: g++ 4.3.1 ICE with -fipa-pta
Product: gcc
Version: 4.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: warren dot armstrong at anu dot edu dot au
GCC build triplet: --build=i686-pc-linux-gnu
GCC host triplet: --host=i686-pc-linux-gnu
GCC target triplet: Same as host
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39014
More information about the Gcc-bugs
mailing list