https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91740

            Bug ID: 91740
           Summary: ICE in fold_convert_loc, at fold-const.c:2429
           Product: gcc
           Version: 9.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: julien at vivenot dot fr
  Target Milestone: ---

The following causes an internal compiler error on gcc 9.2.0 on x86-64.
I do not have access to other versions myself but tested on godbolt: It seems
to say that 9.1, 9.2 and current trunk are affected, while 8.3 is unaffected.

$ cat test.cpp
constexpr bool f(const char*) { return true; }
template<typename T> const char c = "FOO"[f("BAR") ? 1 : 0];


$ g++ test.cpp
test.cpp:2:59: internal compiler error: in fold_convert_loc, at
fold-const.c:2429
    2 | template<typename T> const char c = "FOO"[f("BAR") ? 1 : 0];
      |                                                           ^

The current code is obviously meaningless because it has been slowly scaled
down from production code.
I have noted that any of the following changes make the issue disappear :
  - removing the argument to f()
  - removing the templatization
  - removing the ternary operator

Reply via email to