This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/57047] [4.7/4.8/4.9 Regression] [C++11] stl_pair.h:137:64: internal compiler error: Segmentation fault in constexpr constructor


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57047

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org
   Target Milestone|---                         |4.7.4
            Summary|[C++11] stl_pair.h:137:64:  |[4.7/4.8/4.9 Regression]
                   |internal compiler error:    |[C++11] stl_pair.h:137:64:
                   |Segmentation fault in       |internal compiler error:
                   |constexpr constructor       |Segmentation fault in
                   |                            |constexpr constructor

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-23 15:10:32 UTC ---
Reduced testcase:
template <typename>
struct A;
template <typename T>
struct A <T &>
{
  typedef T type;
};
template <typename T>
constexpr T && foo (typename A <T>::type & __t) noexcept
{
  return static_cast <T &&>(__t);
}
template <class T1, class T2>
struct B
{
  T1 t1;
  T2 t2;
  template <class U>
  constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {}
};
static inline constexpr bool
fn1 (const char c)
{
  return ('0' <= c) && (c <= '9');
}
static inline constexpr bool
fn2 (const char c)
{
  return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z'));
}
static constexpr bool
fn3 (const char *const x)
{
  return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3
(&x[1]);
}
static constexpr bool
fn4 (const char *const x)
{
  return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]);
}
static inline constexpr bool
fn5 (const char *const x)
{
  return fn2 (x[0]) ? fn4 (x) : false;
}
struct C final
{
  constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {}
  unsigned c;
};
B <C, C> p ("a", "b");

Started to ICE in between r175000 and r175062.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]