[Bug c++/88820] ICE in in C++2a mode for code which is able to be compiled in C++17 mode

2019-01-13 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88820

--- Comment #5 from Marek Polacek  ---
This reduced test ICEs left and right with -std=c++17/14 since r236221, but the
ICE changed into another ICE with r248433.


template <__SIZE_TYPE__> class basic_fixed_string;
struct empty_subject;
template  struct parser {
  template  static auto trampoline_decide();
  bool correct = trampoline_decide();
};

[Bug c++/88820] ICE in in C++2a mode for code which is able to be compiled in C++17 mode

2019-01-13 Thread hanicka at hanicka dot net
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88820

--- Comment #4 from Hana Dusíková  ---
The ICE will not happen if you comment out line 464 from first example.

[Bug c++/88820] ICE in in C++2a mode for code which is able to be compiled in C++17 mode

2019-01-13 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88820

Marek Polacek  changed:

   What|Removed |Added

   Keywords||ice-on-valid-code
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-01-13
 CC||mpolacek at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |mpolacek at gcc dot 
gnu.org
   Target Milestone|--- |9.0
 Ever confirmed|0   |1

--- Comment #3 from Marek Polacek  ---
The first ICE started with r265734.  Will try to reduce...

[Bug c++/88820] ICE in in C++2a mode for code which is able to be compiled in C++17 mode

2019-01-13 Thread hanicka at hanicka dot net
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88820

--- Comment #2 from Hana Dusíková  ---
Created attachment 45422
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45422=edit
referencing subtype unable to deduce parent type

 ~/projekty/ice-gcc > g++-HEAD minimal.cpp -std=c++2a -DREFERENCE
 ~/projekty/ice-gcc > g++-HEAD minimal.cpp -std=c++2a -DAUTO 
 ~/projekty/ice-gcc > g++-HEAD minimal.cpp -std=c++2a -DCNTTP
minimal.cpp: In member function 'unsigned int Foo::count()':
minimal.cpp:33:19: error: class template argument deduction failed:
   33 |   return SubType<0>().value();
  |   ^
minimal.cpp:33:19: error: no matching function for call to 'ArgType(ArgType)'
minimal.cpp:8:21: note: candidate: 'template ArgType(const
char (&)[N])-> ArgType'
8 | template  ArgType(const char (&)[N]) -> ArgType;
  | ^~~
minimal.cpp:8:21: note:   template argument deduction/substitution failed:
minimal.cpp:33:19: note:   mismatched types 'const char [N]' and 'ArgType'
   33 |   return SubType<0>().value();
  |   ^
minimal.cpp:5:12: note: candidate: 'template
ArgType(...)-> ArgType'
5 |  constexpr ArgType(...) noexcept { }
  |^~~
minimal.cpp:5:12: note:   template argument deduction/substitution failed:
minimal.cpp:33:19: note:   couldn't deduce template parameter 'N'
   33 |   return SubType<0>().value();
  |   ^
minimal.cpp:4:28: note: candidate: 'template
ArgType(ArgType)-> ArgType'
4 | template  struct ArgType {
  |^~~
minimal.cpp:4:28: note:   template argument deduction/substitution failed:
minimal.cpp:33:19: note:   mismatched types 'ArgType' and 'ArgType'
   33 |   return SubType<0>().value();
  |   ^

[Bug c++/88820] ICE in in C++2a mode for code which is able to be compiled in C++17 mode

2019-01-13 Thread hanicka at hanicka dot net
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88820

--- Comment #1 from Hana Dusíková  ---
I think I found a related problem. It's about deducting argument of a class
when instantiating subtype. I created a minimal case. I'm attaching.