On Wed, 2022-06-08 at 14:47 +1000, Zopolis0 via Gcc-help wrote: /* snip */ > java/lang/Object.java: internal compiler error: tree check: expected > function_decl, have field_decl in layout_class_method, at java/class.cc:2627 > > I believe that this error is due to the following incorrect code at line > 2589 at gcc/java/class.cc: > for (tree method_decl = TYPE_FIELDS (this_class); > > Before it was removed, this line was: > for (method_decl = TYPE_METHODS (this_class); > > But I have since modified it ( > https://github.com/Zopolis4/gcj/commit/1f38bc896a704290ca0b742c60c60a88d5e1fb07#diff-bf49cdc948b20b9f25afd3fbb36922a10e979a55ff9600b3b51d0ec54175b752L2592) > in accordance with 5aaa8fb40681ee66282d73dab8c8eccbf5ee0518 > > Given that this was incorrect, what would be the correct way to replace > this instance of TYPE_METHODS? Were all my replacements of TYPE_METHODS in > gcc/java/class.cc wrong? 5aaa8fb is not a simple replacement. For example: /* If there are user-defined methods, they are deemed non-trivial. */ - for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp)) - if (!DECL_ARTIFICIAL (tmp)) + for (tree fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld)) + if (TREE_CODE (TREE_TYPE (fld)) == METHOD_TYPE && !DECL_ARTIFICIAL (fld)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return true; I think you need to check if the field is really a method like this. -- Xi Ruoyao <xry111@xxxxxxxxxxx> School of Aerospace Science and Technology, Xidian University