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

             Bug #: 51395
           Summary: [4.5/4.6 Regression] ICE in dependent_type_p (endless
                    (?) recursion)
    Classification: Unclassified
           Product: gcc
           Version: 4.6.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: d...@gcc.gnu.org


Created attachment 25981
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25981
test case

the ICE is seen with 4.5 and 4.6 branches, not with 4.4 and trunk.

$ g++-4.4 -std=c++0x t.cpp
t.cpp: In function 'F2 operator|(F1, F2)':
t.cpp:2: error: expected primary-expression before '[' token
t.cpp:2: error: expected primary-expression before '=' token
t.cpp:2: error: expected primary-expression before ']' token
t.cpp:2: error: expected primary-expression before 'unsigned'
t.cpp:2: error: expected ';' before '{' token
t.cpp:2: error: 'x' was not declared in this scope
t.cpp: At global scope:
t.cpp:4: error: expected primary-expression before '[' token
t.cpp:4: error: expected primary-expression before ']' token
t.cpp:4: error: expected primary-expression before 'float'
t.cpp:4: error: unable to deduce 'auto' from '<expression error>'
t.cpp:5: error: expected ',' or ';' before '{' token


$ g++-4.5 -std=c++0x t.cpp 
g++-4.5: Internal error: Segmentation fault (program cc1plus)
Please submit a full bug report.


$ g++-4.6 -std=c++0x t.cpp 
g++-4.6: internal compiler error: Segmentation fault (program cc1plus)
Please submit a full bug report,



$ /usr/lib/gcc-snapshot/bin/g++ -std=c++0x t.cpp 
t.cpp: In instantiation of 'operator|(F1, F2) [with F1 =
<lambda(float)>::<lambda(long long unsigned int)>; F2 =
<lambda()>]::<lambda(long long unsigned int)>':
t.cpp:2:75:   required from 'struct operator|(F1, F2) [with F1 =
<lambda(float)>::<lambda(long long unsigned int)>; F2 =
<lambda()>]::<lambda(long long unsigned int)>'
t.cpp:2:83:   required from 'F2 operator|(F1, F2) [with F1 =
<lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]'
t.cpp:16:26:   required from here
t.cpp:2:83: error: no match for call to '(const<lambda()>) (float)'
t.cpp:9:15: note: candidates are:
t.cpp:2:83: note: <lambda()>::<lambda(float)> (*)() <conversion>
t.cpp:2:83: note:   candidate expects 1 argument, 2 provided
t.cpp:9:17: note: <lambda()>
t.cpp:9:17: note:   candidate expects 0 arguments, 1 provided
t.cpp:2:83: error: return-statement with a value, in function returning 'void'
[-fpermissive]
t.cpp: In instantiation of 'F2 operator|(F1, F2) [with F1 =
<lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]':
t.cpp:16:26:   required from here
t.cpp:2:83: error: could not convert '{f2, f1}' from 'operator|(F1, F2) [with
F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 =
<lambda()>]::<lambda(long long unsigned int)>' to '<lambda()>'

Reply via email to