[Bug c++/92105] New: [7/8/9/10 Regression] decltype(decltype(decltype)) prints exponential number of fix-it hints

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 15 14:50:00 GMT 2019


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

            Bug ID: 92105
           Summary: [7/8/9/10 Regression] decltype(decltype(decltype))
                    prints exponential number of fix-it hints
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

decltype(decltype) x = 42;

prints:

dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype) x = 42;
      |          ^~~~~~~~
dt.cc:1:10: error: expected ')' before 'decltype'
    1 | decltype(decltype) x = 42;
      |         ~^~~~~~~~
      |          )
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype) x = 42;
      |          ^~~~~~~~
dt.cc:1:10: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
dt.cc:1:1: error: expected unqualified-id before 'decltype'
    1 | decltype(decltype) x = 42;
      | ^~~~~~~~


but with an extra (decltype) it prints:

dt.cc:1:19: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |                   ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |          ^~~~~~~~
dt.cc:1:10: error: expected ')' before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |         ~^~~~~~~~
      |          )
dt.cc:1:19: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |                   ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |          ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |                   ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |          ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |                   ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |          ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |                   ^~~~~~~~
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:19: error: expected primary-expression before 'decltype'
dt.cc:1:10: error: expected primary-expression before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      |          ^~~~~~~~
dt.cc:1:1: error: expected unqualified-id before 'decltype'
    1 | decltype(decltype(decltype)) x = 42;
      | ^~~~~~~~


Add another (decltype) and you get 272 lines. Another gives 1342, then 6722,
and so on to 4 millions lines for:

decltype(decltype(decltype(decltype(decltype(decltype(decltype(decltype(decltype(decltype)))))))))
x = 42;


More information about the Gcc-bugs mailing list