------- Comment #4 from dodji at gcc dot gnu dot org 2009-01-21 22:25 ------- I think I have an idea of what's going on.
g++ is actually failing on the line: typedef unsigned int uaddr __attribute__ ((mode (pointer))); (in libjava/include/jvm.h:262, while compiling libjava/jni-libjvm.cc). That's due to my changing grokfield (in decl2.c) to make it create typedef variant variant types for typedef declarations. It appears that later down in that function, the call to cplus_decl_attributes honours the mode (pointer) attribute set specification. That attribute specification changes the TREE_TYPE property of the typedef declaration, making it be an unsigned pointer. Changing the TREE_TYPE like that invalidates an invariant condition of typedefs, hence the ICE on the gcc_assert() in gen_typedef_die. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38930