gpc-20030830 have a memory management bug which is probably responsible for crashes reported by Adriaan van Os and Maurice Lombardi. Mainly builds with gcc-3.3.x are affected (I do not know if it is possible to trigger the bug with earlier gcc version). The patch below fixes the problem:
diff -ru gpc-20030830.orig/p/gpc.h gpc-20030830/p/gpc.h --- gpc-20030830.orig/p/gpc.h Wed Aug 13 06:30:35 2003 +++ gpc-20030830/p/gpc.h Sun Sep 7 03:28:26 2003 @@ -276,12 +276,13 @@ };
union lang_tree_node - GTY((desc ("((TREE_CODE (&%h.generic) == IDENTIFIER_NODE) || (TREE_CODE (&%h.generic) == INTERFACE_NAME_NODE)) ? TREE_CODE (&%h.generic) : 0"), + GTY((desc ("((TREE_CODE (&%h.generic) == IDENTIFIER_NODE) || (TREE_CODE (&%h.generic) == INTERFACE_NAME_NODE) || (TREE_CODE (&%h.generic) == IMPORT_NODE)) ? TREE_CODE (&%h.generic) : 0"), chain_next ("(union lang_tree_node *) TREE_CHAIN (&%h.generic)"))) { union tree_node GTY ((tag ("0"), desc ("tree_node_structure (&%h)"))) generic; struct lang_identifier GTY ((tag ("IDENTIFIER_NODE"))) identifier; struct tree_inn GTY ((tag ("INTERFACE_NAME_NODE"))) interface; + struct tree_import GTY ((tag ("IMPORT_NODE"))) import; };
#define AS_LANG_IDENTIFIER_NODE(ID) ((struct lang_identifier *) IDENTIFIER_NODE_CHECK (ID)) diff -ru gpc-20030830.orig/p/p-tree.def gpc-20030830/p/p-tree.def --- gpc-20030830.orig/p/p-tree.def Fri Jun 6 00:14:08 2003 +++ gpc-20030830/p/p-tree.def Sun Sep 7 03:40:08 2003 @@ -27,14 +27,14 @@ /* The field `gpi_int checksum' might be larger than a pointer, so reserve two pointer sizes for it. */ DEFTREECODE (INTERFACE_NAME_NODE, "interface_name_node", 'x', 3) -DEFTREECODE (IMPORT_NODE, "import_node", 'x', 3) +DEFTREECODE (IMPORT_NODE, "import_node", 'x', 4) DEFTREECODE (POWER_EXPR, "power_expr", '2', 2) DEFTREECODE (POW_EXPR, "pow_expr", '2', 2) DEFTREECODE (SYMDIFF_EXPR, "symdiff_expr", '2', 2) #else DEFTREECODE (OPERATOR_DECL, "operator_decl", "d", 0) DEFTREECODE (INTERFACE_NAME_NODE, "interface_name_node", "x", 3) -DEFTREECODE (IMPORT_NODE, "import_node", "x", 3) +DEFTREECODE (IMPORT_NODE, "import_node", "x", 4) DEFTREECODE (POWER_EXPR, "power_expr", "2", 2) DEFTREECODE (POW_EXPR, "pow_expr", "2", 2) DEFTREECODE (SYMDIFF_EXPR, "symdiff_expr", "2", 2)