[Bug c++/19948] [4.0/4.1 Regression] ICE: tree check: expected class 'declaration', have 'exceptional' (error_mark) in pushtag, at cp/name-lookup.c:4658

fang at csl dot cornell dot edu gcc-bugzilla@gcc.gnu.org
Sun Feb 27 17:15:00 GMT 2005

------- Additional Comments From fang at csl dot cornell dot edu  2005-02-27 06:25 -------
1) Has anyone figured out a workaround to this yet?  I suppose I could remove some using 
namespace declarations and prefix type names with namespaces...  I'll keep tinkering around.  

2) New and perhaps closely related bug?
g++-4.0 is also rejecting-valid the following code, tweaked from Andrew's example to reproduce 
something else I'm doing in my project: (using same version info as reported here)

//-------------- snip ---------------
namespace util
  class persistent_object_manager;
  namespace memory
    class pointer_manipulator
      friend class persistent_object_manager;
namespace util
  using namespace memory;

  class persistent_object_manager
        static const int foo;

namespace util {
        const int
        persistent_object_manager::foo = 666;
//--------------- end snip ----------------
g++-4.0 -c blah.cc -o blah.o
blah.cc:24: error: 'persistent_object_manager' has not been declared

whereas 3.3 and 3.4 accept the code.  
Removing the friend declaration on line 8 allows g++-4.0 to compile.  
Removing the using namespace memory line 14 also allows g++-4.0 to compile.  

It was difficult to find a bug in the bugzilla database with the same characteristics.  
Should I file a separate bug report for this one or just tack it on to this one because it's probably closely 

-- David



More information about the Gcc-bugs mailing list