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.

Reply via email to