User account creation filtered due to spam.

Bug 47336 - [C++0x] ICE: "Error reporting routines re-entered"
Summary: [C++0x] ICE: "Error reporting routines re-entered"
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.6.0
: P3 normal
Target Milestone: 4.6.1
Assignee: Jason Merrill
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2011-01-17 21:35 UTC by Nathan Ridge
Modified: 2011-05-25 08:58 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2011-05-22 20:03:39


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nathan Ridge 2011-01-17 21:35:57 UTC
For the following code:

struct A
{
    template <typename T>
    struct B
    {
    };

    template <typename T>
    B<T> f(T t)
    {
        return B<T>();
    }
};

template <typename T>
auto g(T t) -> decltype(A().f(t))
{
    return A().f(t);
}
    
template <typename S>
class C
{
    struct D
    {
    };
    D d;
public:
    decltype(g(d)) h() 
    {
        return g(d);
    }
};

void g()
{
    C<int> c;
    c.h();
}
                    

Both gcc 4.5 and 4.6 give the following error:

test.cpp: In instantiation of ‘decltype (A().A::B<T> A::f(t))
     g(T) [with T = C<int>::D, decltype (A().A::f(t)) = A::B<C<int>::D>]’:

Internal compiler error: Error reporting routines re-entered.

As far as I can tell, this is valid C++0x code.
Comment 1 Jonathan Wakely 2011-04-18 23:23:36 UTC
Here's another example which produces the "error reporting routines re-entered" ICE, this time on invalid code:


template<typename T> T declval();

template<typename T>
struct S {

  template<typename U>
    static U get(const volatile T&);

  template<typename U>
    static decltype(*declval<U>()) get(...);

  typedef decltype(get<T>(declval<T>())) type;
};

struct X { };

S<X>::type x;
Comment 2 Jason Merrill 2011-05-23 15:32:34 UTC
Author: jason
Date: Mon May 23 15:32:29 2011
New Revision: 174072

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=174072
Log:
	PR c++/47336
	* error.c (dump_template_bindings): Suppress access control.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/error3.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/error.c
    trunk/gcc/testsuite/ChangeLog
Comment 3 Jason Merrill 2011-05-25 01:08:26 UTC
Author: jason
Date: Wed May 25 01:08:24 2011
New Revision: 174160

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=174160
Log:
	PR c++/47336
	* error.c (dump_template_bindings): Suppress access control.

Added:
    branches/gcc-4_6-branch/gcc/testsuite/g++.dg/cpp0x/error3.C
Modified:
    branches/gcc-4_6-branch/gcc/cp/ChangeLog
    branches/gcc-4_6-branch/gcc/cp/error.c
    branches/gcc-4_6-branch/gcc/testsuite/ChangeLog
Comment 4 Jason Merrill 2011-05-25 01:26:19 UTC
Original testcase fixed for 4.6.1.  The testcase in comment 1 is a different problem and should get its own bug report.
Comment 5 Jonathan Wakely 2011-05-25 08:58:32 UTC
Thanks, Jason, I submitted PR 49156