Introspector/GccCpp/patch.diff

diff -d -u ./coretypes.h /home/new_version/gcc-3.4.4-3/gcc/coretypes.h --- ./coretypes.h	2003-01-28 18:26:22.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/coretypes.h	2007-12-27 07:06:25.500000000 -0500 @@ -35,14 +35,7 @@ -#ifndef USED_FOR_TARGET -struct rtx_def; -typedef struct rtx_def *rtx; -struct rtvec_def; -typedef struct rtvec_def *rtvec; -union tree_node; -typedef union tree_node *tree; /* Provide forward struct declaration so that we don't have to include all of cpplib.h whenever a random prototype includes a pointer. @@ -50,16 +43,6 @@ struct cpp_reader; -#else - -struct _dont_use_rtx_here_; -struct _dont_use_rtvec_here_; -union _dont_use_tree_here_; -#define rtx struct _dont_use_rtx_here_ * -#define rtvec struct _dont_use_rtvec_here * -#define tree union _dont_use_tree_here_ * - -#endif
 * 1) define GTY(x) /* nothing - marker for gengtype */
 * 1) endif /* coretypes.h */

diff -d -u ./cpplib.c /home/new_version/gcc-3.4.4-3/gcc/cpplib.c --- ./cpplib.c	2004-12-01 21:32:17.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/cpplib.c	2007-12-25 06:41:32.281250000 -0500 @@ -978,25 +978,25 @@ insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain, 		    const cpp_hashnode *pragma, pragma_cb handler) { - struct pragma_entry *new; + struct pragma_entry *_new; - new = (struct pragma_entry *) + _new = (struct pragma_entry *) _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry)); - new->pragma = pragma; + _new->pragma = pragma; if (handler) { -     new->is_nspace = 0; -     new->u.handler = handler; +     _new->is_nspace = 0; +     _new->u.handler = handler; }  else { -     new->is_nspace = 1; -     new->u.space = NULL; +     _new->is_nspace = 1; +     _new->u.space = NULL; } - new->next = *chain; - *chain = new; - return new; + _new->next = *chain; + *chain = _new; + return _new; } /* Register a pragma NAME in namespace SPACE. If SPACE is null, it

diff -d -u ./cselib.h /home/new_version/gcc-3.4.4-3/gcc/cselib.h --- ./cselib.h	2004-09-13 04:52:43.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/cselib.h	2007-12-27 06:37:18.218750000 -0500 @@ -24,8 +24,9 @@ {  /* The hash value. */  unsigned int value; - union cselib_val_u + class cselib_val_u { + public: /* A VALUE rtx that points back to this structure. */    rtx GTY ((tag ("1"))) val_rtx; /* Used to keep a list of free cselib_val structures. */

Common subdirectories: ./doc and /home/new_version/gcc-3.4.4-3/gcc/doc

Common subdirectories: ./fixinc and /home/new_version/gcc-3.4.4-3/gcc/fixinc diff -d -u ./fold-const.c /home/new_version/gcc-3.4.4-3/gcc/fold-const.c --- ./fold-const.c	2005-02-11 16:12:48.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/fold-const.c	2007-12-26 08:47:26.062500000 -0500 @@ -215,7 +215,13 @@    {       TREE_INT_CST_HIGH (t) = 0; if (prec < HOST_BITS_PER_WIDE_INT) -	TREE_INT_CST_LOW (t) &= ~((unsigned HOST_WIDE_INT) (-1) << prec); +	{ +#ifndef NOTESTS +	 // just a compiler test +	 //void * test=~((unsigned HOST_WIDE_INT) (-1) << prec); fold-const.c:221: error: invalid conversion from `long unsigned int' to `void*' +#endif +	 TREE_INT_CST_LOW (t) &= ~((unsigned HOST_WIDE_INT) (-1) << prec); +	}    }   /* Unsigned types do not suffer sign extension or overflow unless they @@ -225,6 +231,8 @@ 	   && TYPE_IS_SIZETYPE (TREE_TYPE (t)))) return overflow; + //  & ((unsigned HOST_WIDE_INT) 1 << (prec - 1))))) +   /* If the value's sign bit is set, extend the sign.  */   if (prec != 2 * HOST_BITS_PER_WIDE_INT && (prec > HOST_BITS_PER_WIDE_INT @@ -234,6 +242,9 @@ 	 : 0 != (TREE_INT_CST_LOW (t) & ((unsigned HOST_WIDE_INT) 1 << (prec - 1)))))    { + +      //void * test=((unsigned HOST_WIDE_INT) 1 << (prec - 1)); +       /* Value is negative: 	 set to 1 all the bits that are outside this type's precision.  */       if (prec > HOST_BITS_PER_WIDE_INT) @@ -850,7 +861,11 @@   type = TREE_TYPE (t); +  ////////////////////////////// +  +  ////////////////////////////////   STRIP_SIGN_NOPS (t); +   switch (TREE_CODE (t))     {     case INTEGER_CST: @@ -1510,6 +1525,12 @@ /* Return the hash code code X, an INTEGER_CST.  */ +///MIKE TODO: +//const hashval_t&                 operator ^ (const long unsigned  int &,const hashval_t&); +const TRefHOST_WIDE_INT& operator ^ (const TRefHOST_WIDE_INT& ,const hashval_t&); +const TRefunsignedHOST_WIDE_INT& operator ^ (const TRefunsignedHOST_WIDE_INT& ,const hashval_t&); + + static hashval_t size_htab_hash (const void *x) { @@ -2387,17 +2408,17 @@ twoval_comparison_p (tree arg, tree *cval1, tree *cval2, int *save_p) {  enum tree_code code = TREE_CODE (arg); - char class = TREE_CODE_CLASS (code); + char _class = TREE_CODE_CLASS (code); /* We can handle some of the 'e' cases here. */ - if (class == 'e' && code == TRUTH_NOT_EXPR) -   class = '1'; - else if (class == 'e' +  if (_class == 'e' && code == TRUTH_NOT_EXPR) +    _class = '1'; +  else if (_class == 'e' 	   && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR 	       || code == COMPOUND_EXPR)) -    class = '2'; +    _class = '2'; -  else if (class == 'e' && code == SAVE_EXPR && SAVE_EXPR_RTL (arg) == 0 + else if (_class == 'e' && code == SAVE_EXPR && SAVE_EXPR_RTL (arg) == 0 	   && ! TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0))) {      /* If we've already found a CVAL1 or CVAL2, this expression is @@ -2405,11 +2426,11 @@ if (*cval1 || *cval2) return 0; -     class = '1'; +     _class = '1'; *save_p = 1; } - switch (class) + switch (_class) {    case '1': return twoval_comparison_p (TREE_OPERAND (arg, 0), cval1, cval2, save_p); @@ -2480,16 +2501,16 @@ {  tree type = TREE_TYPE (arg); enum tree_code code = TREE_CODE (arg); - char class = TREE_CODE_CLASS (code); + char _class = TREE_CODE_CLASS (code); /* We can handle some of the 'e' cases here. */ - if (class == 'e' && code == TRUTH_NOT_EXPR) -   class = '1'; - else if (class == 'e' +  if (_class == 'e' && code == TRUTH_NOT_EXPR) +    _class = '1'; +  else if (_class == 'e' 	   && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)) -    class = '2'; +    _class = '2'; -  switch (class) +  switch (_class)     {     case '1':       return fold (build1 (code, type, @@ -3187,7 +3208,11 @@   if (arg0 != 0 && arg1 != 0)     { -      tem = fold (build (code, type != 0 ? type : TREE_TYPE (arg0), +      tem = fold (build (code, type != 0 +			 ? +			 ((TreeTypeRef)type) +			 : +			 TREE_TYPE (arg0), 			 arg0, fold_convert (TREE_TYPE (arg0), arg1)));       STRIP_NOPS (tem);       return TREE_CODE (tem) == INTEGER_CST ? tem : 0; @@ -5716,13 +5741,13 @@ 	  && TREE_CODE (TREE_OPERAND (t, 0)) == BIT_AND_EXPR 	  && TREE_CODE (TREE_OPERAND (TREE_OPERAND (t, 0), 1)) == INTEGER_CST) { -	 tree and = TREE_OPERAND (t, 0); -	 tree and0 = TREE_OPERAND (and, 0), and1 = TREE_OPERAND (and, 1); +	 tree _and = TREE_OPERAND (t, 0); +	 tree and0 = TREE_OPERAND (_and, 0), and1 = TREE_OPERAND (_and, 1); int change = 0; -	 if (TREE_UNSIGNED (TREE_TYPE (and)) +	  if (TREE_UNSIGNED (TREE_TYPE (_and)) || (TYPE_PRECISION (TREE_TYPE (t)) -		 <= TYPE_PRECISION (TREE_TYPE (and)))) +		  <= TYPE_PRECISION (TREE_TYPE (_and)))) 	    change = 1; 	  else if (TYPE_PRECISION (TREE_TYPE (and1)) <= HOST_BITS_PER_WIDE_INT @@ -7303,8 +7328,16 @@ 		 || integer_onep (folded_compare)) 		return omit_one_operand (type, folded_compare, varop); -	      shift = build_int_2 (TYPE_PRECISION (TREE_TYPE (varop)) - size, -				  0); +	      shift = +		build_int_2 ( +			    ToLongUnsignedInt( +					       TYPE_PRECISION ( +							      TREE_TYPE (varop) +							      ) +					       - +					       size), +			    0 +			     ); 	      newconst = fold (build (LSHIFT_EXPR, TREE_TYPE (varop), 				      newconst, shift)); 	      newconst = fold (build (RSHIFT_EXPR, TREE_TYPE (varop), @@ -8721,8 +8754,13 @@ 	  if (TREE_CODE (inner1) == INTEGER_TYPE && TREE_UNSIGNED (inner1) && TREE_CODE (inner2) == INTEGER_TYPE && TREE_UNSIGNED (inner2)) 	   { -	      unsigned int prec = MAX (TYPE_PRECISION (inner1), -				      TYPE_PRECISION (inner2)) + 1; +	      unsigned int prec = +		ToUnsignedInt(MAX ( +		     TYPE_PRECISION (inner1), +		     TYPE_PRECISION (inner2) +		     ) +			     + 1); + 	      return prec < TYPE_PRECISION (TREE_TYPE (t)); 	    } 	} @@ -8907,10 +8945,12 @@ /* Return true if `r' is known to be non-negative.    Only handles constants at the moment.  */ +template  rtx_code GetRtxCode(T); + int rtl_expr_nonnegative_p (rtx r) { -  switch (GET_CODE (r)) +  switch (GetRtxCode(r))     {     case CONST_INT:       return INTVAL (r) >= 0;

diff -d -u ./genconstants.c /home/new_version/gcc-3.4.4-3/gcc/genconstants.c --- ./genconstants.c	2003-06-01 11:59:08.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/genconstants.c	2007-12-24 08:56:20.875000000 -0500 @@ -42,8 +42,8 @@ static int print_md_constant (void **slot, void *info) { - struct md_constant *def = *slot; - FILE *file = info; + struct md_constant *def = (md_constant*)*slot; + FILE *file = (FILE*)info; fprintf (file, "#define %s %s\n", def->name, def->value); return 1;

diff -d -u ./gengenrtl.c /home/new_version/gcc-3.4.4-3/gcc/gengenrtl.c --- ./gengenrtl.c	2003-10-18 14:45:16.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/gengenrtl.c	2007-12-24 07:09:33.671875000 -0500 @@ -80,7 +80,7 @@    case 'b': return "struct bitmap_head_def *"; /* bitmap - typedef not available */ case 't': -     return "union tree_node *";  /* tree - typedef not available */ +     return "tree_node *";  /* tree - typedef not available */ case 'B': return "struct basic_block_def *"; /* basic block - typedef not available */ default:

diff -d -u ./gengtype-lex.c /home/new_version/gcc-3.4.4-3/gcc/gengtype-lex.c --- ./gengtype-lex.c	2005-05-19 05:59:14.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/gengtype-lex.c	2007-12-25 07:07:07.515625000 -0500 @@ -1,4 +1,4 @@ -#line 2 "gengtype-lex.c" +//#line2 "gengtype-lex.c" /* A lexical scanner generated by flex */ /* Scanner skeleton version: @@ -1475,7 +1475,7 @@ char *yytext; -#line 1 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line1 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* -*- indented-text -*- */ /* Process source files and output type information. @@ -1497,7 +1497,7 @@ along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#line 23 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line23 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" @@ -1528,7 +1528,7 @@ -#line 1532 "gengtype-lex.c" +//#line1532 "gengtype-lex.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1682,10 +1682,10 @@ 	register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 56 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line56 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" -#line 1689 "gengtype-lex.c" +//#line1689 "gengtype-lex.c" 	if ( yy_init ) { @@ -1771,7 +1771,7 @@ case 1: YY_RULE_SETUP -#line 58 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line58 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *tagstart; size_t taglen; @@ -1797,16 +1797,18 @@      is_pointer = 1; for (namelen = 1; ISIDNUM (namestart[namelen]); namelen++) ; - t = find_structure (xmemdup (tagstart, taglen, taglen+1), union_p); + t = find_structure ( +		      (const char *)xmemdup (tagstart, taglen, taglen+1) +		     , union_p); if (is_pointer) t = create_pointer (t); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK case 2: YY_RULE_SETUP -#line 90 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line90 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *namestart; @@ -1830,13 +1832,13 @@    ;   t = create_scalar_type (typestart, typelen); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK case 3: YY_RULE_SETUP -#line 117 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line117 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *namestart; size_t namelen; @@ -1849,13 +1851,13 @@  namestart -= namelen - 1; t = create_scalar_type ("function type", sizeof ("function type")-1); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK case 4: YY_RULE_SETUP -#line 133 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line133 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *namestart; size_t namelen; @@ -1868,13 +1870,13 @@  namestart -= namelen - 1; t = create_scalar_type ("function type", sizeof ("function type")-1); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK case 5: YY_RULE_SETUP -#line 149 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line149 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *namestart; size_t namelen; @@ -1887,13 +1889,13 @@  namestart -= namelen - 1; t = create_scalar_type ("function type", sizeof ("function type")-1); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK case 6: YY_RULE_SETUP -#line 165 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line165 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *namestart; size_t namelen; @@ -1906,7 +1908,7 @@  namestart -= namelen - 1; t = create_scalar_type ("function type", sizeof ("function type")-1); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char *)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } 	YY_BREAK @@ -1915,7 +1917,7 @@ yy_c_buf_p = yy_cp -= 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 181 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line181 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { char *tagstart; size_t taglen; @@ -1938,7 +1940,7 @@  for (taglen = 1; ISIDNUM (tagstart[taglen]); taglen++) ; - yylval.t = find_structure (xmemdup (tagstart, taglen, taglen + 1), union_p); + yylval.t = find_structure ((const char *)xmemdup (tagstart, taglen, taglen + 1), union_p); BEGIN(in_struct); update_lineno (yytext, yyleng); return typedef_p ? ENT_TYPEDEF_STRUCT : ENT_STRUCT; @@ -1949,7 +1951,7 @@ yy_c_buf_p = yy_cp -= 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 209 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line209 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_struct); update_lineno (yytext, yyleng); @@ -1961,7 +1963,7 @@ yy_c_buf_p = yy_cp -= 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 215 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line215 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_struct); update_lineno (yytext, yyleng); @@ -1971,22 +1973,22 @@ case 10: YY_RULE_SETUP -#line 223 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line223 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_struct_comment); } YY_BREAK case 11: YY_RULE_SETUP -#line 225 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line225 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_yacc_escape); } YY_BREAK case 12: YY_RULE_SETUP -#line 227 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line227 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* Used for c-parse.in C/ObjC demarcation. */ 	YY_BREAK case 13: YY_RULE_SETUP -#line 229 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line229 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 14: @@ -1994,7 +1996,7 @@ yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 231 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line231 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* don't care */ YY_BREAK case 15: @@ -2002,7 +2004,7 @@ yy_c_buf_p = yy_cp = yy_bp + 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 233 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line233 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return GTY_TOKEN; } YY_BREAK case 16: @@ -2010,7 +2012,7 @@ yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 234 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line234 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return UNION; } YY_BREAK case 17: @@ -2018,7 +2020,7 @@ yy_c_buf_p = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 235 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line235 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return STRUCT; } YY_BREAK case 18: @@ -2026,7 +2028,7 @@ yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 236 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line236 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return ENUM; } YY_BREAK case 19: @@ -2034,12 +2036,12 @@ yy_c_buf_p = yy_cp = yy_bp + 9; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 237 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line237 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return ALIAS; } YY_BREAK case 20: YY_RULE_SETUP -#line 238 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line238 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return NUM; } YY_BREAK case 21: @@ -2047,9 +2049,9 @@ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 239 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line239 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext, yyleng, yyleng+1); + yylval.s = (const char *)xmemdup (yytext, yyleng, yyleng+1); return PARAM_IS; } 	YY_BREAK @@ -2057,10 +2059,10 @@ *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ -#line 245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 23: YY_RULE_SETUP -#line 245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { size_t len; @@ -2077,52 +2079,52 @@ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 256 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line256 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext, yyleng, yyleng+1); + yylval.s = (const char *)xmemdup (yytext, yyleng, yyleng+1); return ID; } 	YY_BREAK case 25: YY_RULE_SETUP -#line 261 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line261 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext+1, yyleng-2, yyleng-1); + yylval.s = (const char *)xmemdup (yytext+1, yyleng-2, yyleng-1); return STRING; } 	YY_BREAK case 26: YY_RULE_SETUP -#line 265 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line265 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext+1, yyleng-2, yyleng-1); + yylval.s = (const char *)xmemdup (yytext+1, yyleng-2, yyleng-1); return ARRAY; } 	YY_BREAK case 27: YY_RULE_SETUP -#line 269 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line269 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext+1, yyleng-1, yyleng); + yylval.s = (const char *)xmemdup (yytext+1, yyleng-1, yyleng); return PERCENT_ID; } 	YY_BREAK case 28: YY_RULE_SETUP -#line 273 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line273 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { - yylval.s = xmemdup (yytext+1, yyleng-2, yyleng); + yylval.s = (const char *)xmemdup (yytext+1, yyleng-2, yyleng); return CHAR; } 	YY_BREAK case 29: YY_RULE_SETUP -#line 278 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line278 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { return yytext[0]; } YY_BREAK case 30: YY_RULE_SETUP -#line 280 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line280 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { if (lexer_toplevel_done) { @@ -2134,7 +2136,7 @@ 	YY_BREAK case 31: YY_RULE_SETUP -#line 289 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line289 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(INITIAL); return PERCENTPERCENT; @@ -2142,7 +2144,7 @@ 	YY_BREAK case 32: YY_RULE_SETUP -#line 294 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line294 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { error_at_line (&lexer_line, "unexpected character `%s'", yytext); } @@ -2150,26 +2152,26 @@ case 33: YY_RULE_SETUP -#line 299 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line299 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_comment); } YY_BREAK case 34: YY_RULE_SETUP -#line 300 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line300 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 35: -#line 302 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line302 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 36: -#line 303 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line303 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 37: YY_RULE_SETUP -#line 303 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line303 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 38: YY_RULE_SETUP -#line 304 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line304 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 39: @@ -2177,20 +2179,20 @@ yy_c_buf_p = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 305 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line305 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 40: YY_RULE_SETUP -#line 308 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line308 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 41: -#line 310 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line310 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 42: YY_RULE_SETUP -#line 310 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line310 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 43: @@ -2198,31 +2200,31 @@ yy_c_buf_p = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 311 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line311 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 44: YY_RULE_SETUP -#line 313 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line313 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(INITIAL); } YY_BREAK case 45: YY_RULE_SETUP -#line 314 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line314 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_struct); } YY_BREAK case 46: YY_RULE_SETUP -#line 317 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line317 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 47: -#line 319 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line319 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 48: YY_RULE_SETUP -#line 319 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line319 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 49: @@ -2230,17 +2232,17 @@ yy_c_buf_p = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 320 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line320 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 50: YY_RULE_SETUP -#line 321 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line321 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { BEGIN(in_struct); } YY_BREAK case 51: YY_RULE_SETUP -#line 322 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line322 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { error_at_line (&lexer_line, 		 "unterminated %%{; unexpected EOF"); @@ -2248,10 +2250,10 @@ 	YY_BREAK case 52: -#line 330 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line330 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" case 53: YY_RULE_SETUP -#line 330 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line330 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" { error_at_line (&lexer_line, 		 "unterminated comment or string; unexpected EOF"); @@ -2259,10 +2261,10 @@ 	YY_BREAK case 54: YY_RULE_SETUP -#line 335 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line335 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2266 "gengtype-lex.c" +//#line2266 "gengtype-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(in_struct): case YY_STATE_EOF(in_struct_comment): @@ -3149,7 +3151,7 @@ 	return 0; } -#line 335 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" +//#line335 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-lex.l" void
 * 1) define YY_MORE_ADJ 0
 * 2) define YY_RESTORE_YY_MORE_OFFSET
 * 1) define INITIAL 0
 * 1) include "bconfig.h"
 * 2) include "coretypes.h"
 * 3) include "system.h"
 * 1) define YY_NO_UNPUT 1
 * 2) define YY_NEVER_INTERACTIVE 1
 * 1) endif

diff -d -u ./gengtype-lex.l /home/new_version/gcc-3.4.4-3/gcc/gengtype-lex.l --- ./gengtype-lex.l	2004-01-26 21:35:18.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/gengtype-lex.l	2007-12-24 09:58:21.781250000 -0500 @@ -80,7 +80,7 @@      is_pointer = 1; for (namelen = 1; ISIDNUM (namestart[namelen]); namelen++) ; - t = find_structure (xmemdup (tagstart, taglen, taglen+1), union_p); + t = (const char*)find_structure (xmemdup (tagstart, taglen, taglen+1), union_p); if (is_pointer) t = create_pointer (t); do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); @@ -142,7 +142,7 @@  namestart -= namelen - 1; t = create_scalar_type ("function type", sizeof ("function type")-1); - do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line); + do_typedef ((const char*)xmemdup (namestart, namelen, namelen+1), t, &lexer_line); update_lineno (yytext, yyleng); } @@ -200,7 +200,7 @@  for (taglen = 1; ISIDNUM (tagstart[taglen]); taglen++) ; - yylval.t = find_structure (xmemdup (tagstart, taglen, taglen + 1), union_p); + yylval.t = (const char*)find_structure (xmemdup (tagstart, taglen, taglen + 1), union_p); BEGIN(in_struct); update_lineno (yytext, yyleng); return typedef_p ? ENT_TYPEDEF_STRUCT : ENT_STRUCT;

diff -d -u ./gengtype-yacc.c /home/new_version/gcc-3.4.4-3/gcc/gengtype-yacc.c --- ./gengtype-yacc.c	2005-05-19 05:59:14.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/gengtype-yacc.c	2007-12-25 07:09:23.937500000 -0500 @@ -22,7 +22,7 @@ -#line 22 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line22 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" @@ -31,7 +31,7 @@ -#line 31 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line31 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" typedef union { type_p t; @@ -262,7 +262,7 @@ -1,   -1,    -1,    -1,    -1,    -1,    59 }; /* -*-C-*-  Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison/bison.simple" +//#line3 "/usr/share/bison/bison.simple" /* Skeleton output parser for bison, @@ -575,7 +575,7 @@ � -#line 315 "/usr/share/bison/bison.simple" +//#line315 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed @@ -969,7 +969,7 @@  switch (yyn) { case 5: -#line 71 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line71 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { new_structure (yyvsp[-5].t->u.s.tag, UNION_P (yyvsp[-5].t), &lexer_line, 				   yyvsp[-2].p, yyvsp[-4].o); @@ -978,11 +978,11 @@ 		  ;     break;} case 6: -#line 78 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line78 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" {; break;} case 7: -#line 80 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line80 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { new_structure (yyvsp[-4].t->u.s.tag, UNION_P (yyvsp[-4].t), &lexer_line, 				   yyvsp[-1].p, yyvsp[-3].o); @@ -990,25 +990,25 @@ 		  ;     break;} case 8: -#line 86 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line86 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" {; break;} case 9: -#line 90 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line90 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { note_variable (yyvsp[-1].s, adjust_field_type (yyvsp[-2].t, yyvsp[-3].o), yyvsp[-3].o, 				 &lexer_line); ;    break;} case 10: -#line 95 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line95 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { note_variable (yyvsp[-2].s, create_array (yyvsp[-3].t, yyvsp[-1].s), 	     		    yyvsp[-4].o, &lexer_line); ;    break;} case 11: -#line 100 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line100 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { note_variable (yyvsp[-3].s, create_array (create_array (yyvsp[-4].t, yyvsp[-1].s), yyvsp[-2].s), @@ -1016,24 +1016,24 @@ 	        ;     break;} case 12: -#line 108 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line108 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { 	      lexer_toplevel_done = 1; 	      yyval.t = yyvsp[0].t; 	    ;     break;} case 15: -#line 120 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line120 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { 	        note_yacc_type (yyvsp[-4].o, yyvsp[-3].p, yyvsp[-1].p, &lexer_line); 	      ;     break;} case 16: -#line 126 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line126 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.p = NULL; ;     break;} case 17: -#line 128 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line128 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { pair_p p; 		    for (p = yyvsp[0].p; p->next != NULL; p = p->next) @@ -1048,7 +1048,7 @@ 		  ;     break;} case 18: -#line 141 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line141 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { pair_p p; 		    type_p newtype = NULL; @@ -1066,16 +1066,16 @@ 		  ;     break;} case 19: -#line 159 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line159 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.p = NULL; ; break;} case 20: -#line 161 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line161 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	 pair_p p = xcalloc (1, sizeof (*p)); + pair_p p = (pair_p)xcalloc (1, sizeof (*p)); p->next = yyvsp[-1].p; 	 p->line = lexer_line; -	 p->opt = xmalloc (sizeof (*(p->opt))); +	 p->opt = (options*)xmalloc (sizeof (*(p->opt))); p->opt->name = "tag"; p->opt->next = NULL; p->opt->info = (char *)yyvsp[0].s; @@ -1083,12 +1083,12 @@ ;    break;} case 21: -#line 172 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line172 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	 pair_p p = xcalloc (1, sizeof (*p)); + pair_p p = (pair_p)xcalloc (1, sizeof (*p)); p->next = yyvsp[-1].p; 	 p->line = lexer_line; -	 p->opt = xmalloc (sizeof (*(p->opt))); +	 p->opt = (options*)xmalloc (sizeof (*(p->opt))); p->opt->name = "tag"; p->opt->next = NULL; p->opt->info = xasprintf ("'%s'", yyvsp[0].s); @@ -1096,13 +1096,13 @@ 	;    break;} case 22: -#line 184 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line184 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.p = NULL; ; break;} case 23: -#line 186 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line186 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	           pair_p p = xmalloc (sizeof (*p)); + pair_p p = (pair_p)xmalloc (sizeof (*p)); p->type = adjust_field_type (yyvsp[-5].t, yyvsp[-4].o); p->opt = yyvsp[-4].o; 		   p->name = yyvsp[-3].s; @@ -1112,9 +1112,9 @@ ;    break;} case 24: -#line 196 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line196 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	           pair_p p = xmalloc (sizeof (*p)); + pair_p p = (pair_p)xmalloc (sizeof (*p)); p->type = adjust_field_type (create_array (yyvsp[-5].t, yyvsp[-2].s), yyvsp[-4].o); p->opt = yyvsp[-4].o; 		   p->name = yyvsp[-3].s; @@ -1124,9 +1124,9 @@ ;    break;} case 25: -#line 206 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line206 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	           pair_p p = xmalloc (sizeof (*p)); + pair_p p = (pair_p)xmalloc (sizeof (*p)); p->type = create_array (create_array (yyvsp[-6].t, yyvsp[-2].s), yyvsp[-3].s); p->opt = yyvsp[-5].o; 		   p->name = yyvsp[-4].s; @@ -1136,122 +1136,122 @@ ;    break;} case 29: -#line 223 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line223 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = yyvsp[0].t; ; break;} case 30: -#line 225 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line225 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = resolve_typedef (yyvsp[0].s, &lexer_line); ; break;} case 31: -#line 227 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line227 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = create_pointer (yyvsp[-1].t); ; break;} case 32: -#line 229 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line229 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { new_structure (yyvsp[-3].s, 0, &lexer_line, yyvsp[-1].p, NULL); yyval.t = find_structure (yyvsp[-3].s, 0); ;    break;} case 33: -#line 234 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line234 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = find_structure (yyvsp[0].s, 0); ; break;} case 34: -#line 236 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line236 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { new_structure (yyvsp[-3].s, 1, &lexer_line, yyvsp[-1].p, NULL); yyval.t = find_structure (yyvsp[-3].s, 1); ;    break;} case 35: -#line 241 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line241 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = find_structure (yyvsp[0].s, 1); ; break;} case 36: -#line 243 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line243 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = create_scalar_type (yyvsp[0].s, strlen (yyvsp[0].s)); ; break;} case 37: -#line 245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line245 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.t = create_scalar_type (yyvsp[-3].s, strlen (yyvsp[-3].s)); ; break;} case 39: -#line 250 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line250 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { ; break;} case 40: -#line 252 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line252 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { ; break;} case 41: -#line 254 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line254 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { ; break;} case 42: -#line 257 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line257 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.o = NULL; ; break;} case 43: -#line 258 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line258 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.o = yyvsp[0].o; ; break;} case 44: -#line 262 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line262 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.o = yyvsp[-2].o; ; break;} case 45: -#line 266 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line266 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.s = "ptr_alias"; ; break;} case 46: -#line 268 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line268 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.s = yyvsp[0].s; ; break;} case 47: -#line 272 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line272 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	    options_p o = xmalloc (sizeof (*o)); +	    options_p o = (options_p)xmalloc (sizeof (*o)); o->name = yyvsp[-3].s; 	    o->info = adjust_field_type (yyvsp[-1].t, NULL); yyval.o = o; 	  ; break;} case 48: -#line 279 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line279 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { -	    options_p o = xmalloc (sizeof (*o)); + options_p o = (options_p)xmalloc (sizeof (*o)); o->name = yyvsp[-3].s; 	    o->info = (void *)yyvsp[-1].s; 	     yyval.o = o; 	   ; break;} case 49: -#line 288 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line288 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyvsp[0].o->next = NULL; yyval.o = yyvsp[0].o; 	     ; break;} case 50: -#line 293 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line293 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyvsp[0].o->next = yyvsp[-2].o; 		yyval.o = yyvsp[0].o; 	     ; break;} case 51: -#line 299 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line299 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.o = NULL; ; break;} case 52: -#line 300 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line300 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" { yyval.o = yyvsp[0].o; ; break;} } -#line 705 "/usr/share/bison/bison.simple" +//#line705 "/usr/share/bison/bison.simple" �  yyvsp -= yylen; @@ -1482,5 +1482,5 @@  return yyresult; } -#line 302 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y" +//#line302 "/scratch/mitchell/gcc-releases/gcc-3.4.4/gcc-3.4.4/gcc/gengtype-yacc.y"
 * 1) define	PERCENT_ID	273
 * 2) define	CHAR	274
 * 1) include "bconfig.h"
 * 2) include "system.h"
 * 1) include "gengtype.h"
 * 2) define YYERROR_VERBOSE
 * 1) ifndef YYSTYPE
 * 1) endif
 * 2) endif
 * 1) endif

diff -d -u ./gengtype.c /home/new_version/gcc-3.4.4-3/gcc/gengtype.c --- ./gengtype.c	2004-01-23 18:35:59.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/gengtype.c	2007-12-24 09:45:07.812500000 -0500 @@ -117,7 +117,7 @@ 	return; } - p = xmalloc (sizeof (struct pair)); + p = (pair*)xmalloc (sizeof (struct pair)); p->next = typedefs; p->name = s;  p->type = t; @@ -173,7 +173,7 @@ else if (si->u.s.line.file != NULL && si->u.s.bitmap != bitmap) { 	   ls = si; -	   si = xcalloc (1, sizeof (struct type)); +	   si = (type*)xcalloc (1, sizeof (struct type)); memcpy (si, ls, sizeof (struct type)); ls->kind = TYPE_LANG_STRUCT; ls->u.s.lang_struct = si; @@ -187,7 +187,7 @@ 	if (ls != NULL && s == NULL) { -	   s = xcalloc (1, sizeof (struct type)); +	   s = (type*)xcalloc (1, sizeof (struct type)); s->next = ls->u.s.lang_struct; ls->u.s.lang_struct = s; 	   s->u.s.lang_struct = ls; @@ -197,7 +197,7 @@  if (s == NULL) { -     s = xcalloc (1, sizeof (struct type)); +     s = (type*)xcalloc (1, sizeof (struct type)); s->next = structures; structures = s;    } @@ -233,7 +233,7 @@ 	&& UNION_P (s) == isunion)      return s; -  s = xcalloc (1, sizeof (struct type)); +  s = (type*)xcalloc (1, sizeof (struct type));   s->next = structures;   structures = s;   s->kind = isunion ? TYPE_UNION : TYPE_STRUCT; @@ -258,7 +258,7 @@       break;   if (res == NULL)     { -      res = xcalloc (1, sizeof (*res)); +      res = (type*)xcalloc (1, sizeof (*res));       res->kind = TYPE_PARAM_STRUCT;       res->next = param_structs;       param_structs = res; @@ -273,9 +273,9 @@ type_p create_scalar_type (const char *name, size_t name_len) { -  type_p r = xcalloc (1, sizeof (struct type)); +  type_p r = (type*)xcalloc (1, sizeof (struct type));   r->kind = TYPE_SCALAR; -  r->u.sc = xmemdup (name, name_len, name_len + 1); +  r->u.sc = (char*)xmemdup (name, name_len, name_len + 1);   return r; } @@ -286,7 +286,7 @@ {   if (! t->pointer_to)    { -      type_p r = xcalloc (1, sizeof (struct type)); +      type_p r = (type*)xcalloc (1, sizeof (struct type));       r->kind = TYPE_POINTER;       r->u.p = t;       t->pointer_to = r; @@ -301,7 +301,7 @@ {   type_p v; -  v = xcalloc (1, sizeof (*v)); +  v = (type*)xcalloc (1, sizeof (*v));   v->kind = TYPE_ARRAY;   v->u.a.p = t;   v->u.a.len = len; @@ -315,7 +315,7 @@ note_variable (const char *s, type_p t, options_p o, struct fileloc *pos) {   pair_p n; -  n = xmalloc (sizeof (*n)); +  n = (pair*)xmalloc (sizeof (*n));   n->name = s;   n->type = t;   n->line = *pos; @@ -402,7 +402,7 @@       return &string_type;     } -  nodot = xmalloc (sizeof (*nodot)); +  nodot = (options*)xmalloc (sizeof (*nodot));   nodot->next = NULL;   nodot->name = "dot";   nodot->info = ""; @@ -424,10 +424,10 @@       { 	pair_p old_note_flds = note_flds; -	note_flds = xmalloc (sizeof (*note_flds)); +	note_flds = (pair*)xmalloc (sizeof (*note_flds)); note_flds->line.file = __FILE__; note_flds->line.line = __LINE__; -	note_flds->opt = xmalloc (sizeof (*note_flds->opt)); +	note_flds->opt = (options*)xmalloc (sizeof (*note_flds->opt)); note_flds->opt->next = nodot; note_flds->opt->name = "tag"; note_flds->opt->info = xasprintf ("%d", c); @@ -575,7 +575,7 @@ 	     break; } -	 subfields = xmalloc (sizeof (*subfields)); +	 subfields = (pair*)xmalloc (sizeof (*subfields)); subfields->next = old_subf; subfields->type = t; 	 subfields->name = xasprintf (".fld[%lu].%s", (unsigned long)aindex, @@ -584,7 +584,7 @@ 	  subfields->line.line = __LINE__; 	  if (t == note_union_tp) 	    { -	      subfields->opt = xmalloc (sizeof (*subfields->opt)); +	      subfields->opt = (options*)xmalloc (sizeof (*subfields->opt)); 	      subfields->opt->next = nodot; 	      subfields->opt->name = "desc"; 	      subfields->opt->info = "NOTE_LINE_NUMBER (&%0)"; @@ -592,7 +592,7 @@ 	  else if (t == basic_block_tp) 	    { 	      /* We don't presently GC basic block structures...  */ -	      subfields->opt = xmalloc (sizeof (*subfields->opt)); +	      subfields->opt = (options*)xmalloc (sizeof (*subfields->opt)); 	      subfields->opt->next = nodot; 	      subfields->opt->name = "skip"; 	      subfields->opt->info = NULL; @@ -601,7 +601,7 @@ 	    subfields->opt = nodot; 	} -      flds = xmalloc (sizeof (*flds)); +     flds = (pair*)xmalloc (sizeof (*flds)); flds->next = old_flds; flds->name = ""; sname = xasprintf ("rtx_def_%s", rtx_name[i]); @@ -609,7 +609,7 @@      flds->type = find_structure (sname, 0); flds->line.file = __FILE__; flds->line.line = __LINE__; -     flds->opt = xmalloc (sizeof (*flds->opt)); +     flds->opt = (options*)xmalloc (sizeof (*flds->opt)); flds->opt->next = nodot; flds->opt->name = "tag"; ftag = xstrdup (rtx_name[i]); @@ -652,24 +652,24 @@      return &string_type; } - nodot = xmalloc (sizeof (*nodot)); + nodot = (options*)xmalloc (sizeof (*nodot)); nodot->next = NULL; nodot->name = "dot"; nodot->info = ""; - flds = xmalloc (sizeof (*flds)); + flds = (pair*)xmalloc (sizeof (*flds)); flds->next = NULL; flds->name = ""; flds->type = t;  flds->line.file = __FILE__; flds->line.line = __LINE__; - flds->opt = xmalloc (sizeof (*flds->opt)); + flds->opt = (options*)xmalloc (sizeof (*flds->opt)); flds->opt->next = nodot; flds->opt->name = "length"; flds->opt->info = "TREE_CODE_LENGTH (TREE_CODE ((tree) &%0))"; {    options_p oldopt = flds->opt; -   flds->opt = xmalloc (sizeof (*flds->opt)); +   flds->opt = (options*)xmalloc (sizeof (*flds->opt)); flds->opt->next = oldopt; flds->opt->name = "default"; flds->opt->info = ""; @@ -687,7 +687,7 @@ 	  r_index++) 	{ 	  pair_p old_subf = subfields; -	  subfields = xmalloc (sizeof (*subfields)); +	  subfields = (pair*)xmalloc (sizeof (*subfields)); 	  subfields->next = old_subf; 	  subfields->name = xasprintf ("[%d]", r_index); 	  if (r_index < data[i].first_rtl) @@ -699,7 +699,7 @@ 	  subfields->opt = nodot; 	} -      flds = xmalloc (sizeof (*flds)); +      flds = (pair*)xmalloc (sizeof (*flds));       flds->next = old_flds;       flds->name = "";       sname = xasprintf ("tree_exp_%s", data[i].name); @@ -707,7 +707,7 @@       flds->type = find_structure (sname, 0);       flds->line.file = __FILE__;       flds->line.line = __LINE__; -      flds->opt = xmalloc (sizeof (*flds->opt)); +      flds->opt = (options*)xmalloc (sizeof (*flds->opt));       flds->opt->next = nodot;       flds->opt->name = "tag";       flds->opt->info = data[i].name; @@ -827,7 +827,10 @@ 	  for (pp = typeinfo; pp; pp = pp->next) if (pp->type != (type_p) 1 -		&& strcmp (pp->opt->info, p->opt->info) == 0) +		&& strcmp ( +			  (const char*)pp->opt->info, +			   (const char*)p->opt->info +			   ) == 0) 	      { 		ok = 1; 		break; @@ -1028,7 +1031,7 @@   outf_p f;   size_t i; -  f = xcalloc (sizeof (*f), 1); +  f = (outf*)xcalloc (sizeof (*f), 1);   f->next = output_files;   f->name = oname;   output_files = f; @@ -1058,7 +1061,7 @@       do { 	new_len *= 2;       } while (o->bufused + slength >= new_len); -      o->buf = xrealloc (o->buf, new_len); +      o->buf = (char*)xrealloc (o->buf, new_len);       o->buflength = new_len;     }   memcpy (o->buf + o->bufused, s, slength); @@ -2687,7 +2690,7 @@ 	  break;       if (fli == NULL) 	{ -	  fli = xmalloc (sizeof (*fli)); +	  fli = (flist*)xmalloc (sizeof (*fli)); 	  fli->f = f; 	  fli->next = flp; 	  fli->started_p = 0;

diff -d -u ./gengtype.h /home/new_version/gcc-3.4.4-3/gcc/gengtype.h --- ./gengtype.h	2003-06-01 11:59:09.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/gengtype.h	2007-12-24 09:08:03.109375000 -0500 @@ -59,17 +59,21 @@ +enum gc_used_enum { + GC_UNUSED = 0, +   GC_USED, +   GC_MAYBE_POINTED_TO, +   GC_POINTED_TO + } ; + /* A description of a type. */ struct type { enum typekind kind; type_p next; type_p pointer_to; - enum gc_used_enum { -   GC_UNUSED = 0, -   GC_USED, -   GC_MAYBE_POINTED_TO, -   GC_POINTED_TO - } gc_used; + + gc_used_enum gc_used; +  union { type_p p;    struct {
 * 1) define NUM_PARAM 10

diff -d -u ./genmodes.c /home/new_version/gcc-3.4.4-3/gcc/genmodes.c --- ./genmodes.c	2003-11-06 03:38:50.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/genmodes.c	2007-12-24 08:52:22.156250000 -0500 @@ -55,7 +55,7 @@  struct mode_data *next;	/* next this class - arbitrary order */ const char *name;		/* printable mode name -- SI, not SImode */ - enum mode_class class;	/* this mode class */ + enum mode_class m_class;	/* this mode class */ unsigned int precision;	/* size in bits, equiv to TYPE_PRECISION */ unsigned int bytesize;	/* storage size in addressable units */ unsigned int ncomponents;	/* number of subunits */ @@ -105,27 +105,27 @@ /* Mode class operations. */ static enum mode_class -complex_class (enum mode_class class) +complex_class (enum mode_class aclass) { - switch (class) + switch (aclass) {    case MODE_INT: return MODE_COMPLEX_INT; case MODE_FLOAT: return MODE_COMPLEX_FLOAT; default: -     error ("no complex class for class %s", mode_class_names[class]); +     error ("no complex class for class %s", mode_class_names[aclass]); return MODE_RANDOM; } } static enum mode_class -vector_class (enum mode_class class) +vector_class (enum mode_class aclass) { - switch (class) + switch (aclass) {    case MODE_INT: return MODE_VECTOR_INT; case MODE_FLOAT: return MODE_VECTOR_FLOAT; default: -     error ("no vector class for class %s", mode_class_names[class]); +     error ("no vector class for class %s", mode_class_names[aclass]); return MODE_RANDOM; } } @@ -137,11 +137,11 @@  struct mode_data key; key.name = name; - return htab_find (modes_by_name, &key); + return (mode_data*)htab_find (modes_by_name, &key); } static struct mode_data * -new_mode (enum mode_class class, const char *name, +new_mode (enum mode_class aclass, const char *name, const char *file, unsigned int line) {  struct mode_data *m; @@ -155,17 +155,17 @@       return m;     } -  m = xmalloc (sizeof (struct mode_data)); +  m = (mode_data*)xmalloc (sizeof (struct mode_data));   memcpy (m, &blank_mode, sizeof (struct mode_data)); -  m->class = class; +  m->m_class = aclass;   m->name = name;   if (file)     m->file = trim_filename (file);   m->line = line; -  m->next = modes[class]; -  modes[class] = m; -  n_modes[class]++; +  m->next = modes[aclass]; +  modes[aclass] = m; +  n_modes[aclass]++;   *htab_find_slot (modes_by_name, m, INSERT) = m; @@ -189,7 +189,7 @@ } -  for (C = 0; C < MAX_MODE_CLASS; C++)		\ +  for (C = 0; C < MAX_MODE_CLASS; C++)	\     for (M = modes[C]; M; M = M->next) static void ATTRIBUTE_UNUSED @@ -210,7 +210,7 @@       return;     } -  if (required_class != MODE_RANDOM && mode->class != required_class) +  if (required_class != MODE_RANDOM && mode->m_class != required_class) {      error ("%s:%d: mode \"%s\" is not class %s", 	     file, line, name, mode_class_names[required_class] + 5); @@ -226,7 +226,7 @@ 	return; } - a = xmalloc (sizeof (struct mode_adjust)); + a = (mode_adjust*)xmalloc (sizeof (struct mode_adjust)); a->mode = mode; a->adjustment = adjustment; a->file = file; @@ -289,13 +289,13 @@      error ("%s:%d: mode with no name", m->file, m->line); return; } - if (m->class == MAX_MODE_CLASS) + if (m->m_class == MAX_MODE_CLASS) {      error ("%s:%d: %smode has no mode class", m->file, m->line, m->name); return; } - switch (m->class) + switch (m->m_class) {    case MODE_RANDOM: /* Nothing more need be said. */ @@ -326,7 +326,7 @@ 	 and must not have components. A float mode must have a         format. */      validate_mode (m, OPTIONAL, SET, UNSET, UNSET, -		     m->class == MODE_FLOAT ? SET : UNSET); +		    m->m_class == MODE_FLOAT ? SET : UNSET);      m->ncomponents = 1;       m->component = 0; @@ -370,7 +370,7 @@   /* If not already specified, the mode alignment defaults to the largest      power of two that divides the size of the object.  Complex types are      not more aligned than their contents.  */ -  if (m->class == MODE_COMPLEX_INT || m->class == MODE_COMPLEX_FLOAT) +  if (m->m_class == MODE_COMPLEX_INT || m->m_class == MODE_COMPLEX_FLOAT)     alignment = m->component->bytesize;   else     alignment = m->bytesize; @@ -390,27 +390,27 @@ complete_all_modes (void) {   struct mode_data *m; -  enum mode_class c; -  -  for_all_modes (c, m) -    complete_mode (m); +  int c;  +  for_all_modes(c,m) +	  complete_mode (m); + } /* For each mode in class CLASS, construct a corresponding complex mode.  */ static void -make_complex_modes (enum mode_class class, +make_complex_modes (enum mode_class aclass, 		   const char *file, unsigned int line) {  struct mode_data *m; struct mode_data *c; char buf[8]; - enum mode_class cclass = complex_class (class); + enum mode_class cclass = complex_class (aclass); if (cclass == MODE_RANDOM) return; - for (m = modes[class]; m; m = m->next) + for (m = modes[aclass]; m; m = m->next) {      /* Skip BImode. FIXME: BImode probably shouldn't be MODE_INT. */      if (m->precision == 1) @@ -426,7 +426,7 @@      /* Float complex modes are named SCmode, etc. Int complex modes are named CSImode, etc. This inconsistency should be eliminated. */ -     if (class == MODE_FLOAT) +     if (aclass == MODE_FLOAT) { 	 char *p; strncpy (buf, m->name, sizeof buf); @@ -452,19 +452,19 @@   WIDTH, having as many components as necessary. */ static void -make_vector_modes (enum mode_class class, unsigned int width, +make_vector_modes (enum mode_class aclass, unsigned int width, const char *file, unsigned int line) {  struct mode_data *m;   struct mode_data *v;   char buf[8];   unsigned int ncomponents; -  enum mode_class vclass = vector_class (class); +  enum mode_class vclass = vector_class (aclass);   if (vclass == MODE_RANDOM)     return; -  for (m = modes[class]; m; m = m->next) +  for (m = modes[aclass]; m; m = m->next)     {       /* Do not construct vector modes with only one element, or 	 vector modes where the element size doesn't divide the full @@ -477,9 +477,9 @@       /* Skip QFmode and BImode.  FIXME: this special case should 	 not be necessary.  */ -      if (class == MODE_FLOAT && m->bytesize == 1) +      if (aclass == MODE_FLOAT && m->bytesize == 1) 	continue; -      if (class == MODE_INT && m->precision == 1) +      if (aclass == MODE_INT && m->precision == 1) 	continue;       if ((size_t)snprintf (buf, sizeof buf, "V%u%s", ncomponents, m->name) @@ -503,10 +503,10 @@ static void -make_special_mode (enum mode_class class, const char *name, +make_special_mode (enum mode_class aclass, const char *name, const char *file, unsigned int line) { - new_mode (class, name, file, line); +  new_mode (aclass, name, file, line); } @@ -551,7 +551,7 @@       error ("%s:%d: no mode \"%s\"", file, line, name);       return;     } -  if (m->class != MODE_FLOAT) +  if (m->m_class != MODE_FLOAT)     {       error ("%s:%d: mode \"%s\" is not class FLOAT", file, line, name);       return; @@ -575,7 +575,7 @@       error ("%s:%d: no mode \"%s\"", file, line, name);       return;     } -  if (component->class != MODE_INT) +  if (component->m_class != MODE_INT)     {       error ("%s:%d: mode \"%s\" is not class INT", file, line, name);       return; @@ -608,7 +608,7 @@       error ("%s:%d: no mode \"%s\"", file, line, base);       return;     } -  if (component->class != bclass) +  if (component->m_class != bclass)     {       error ("%s:%d: mode \"%s\" is not class %s", file, line, base, mode_class_names[bclass] + 5); @@ -692,7 +692,7 @@ static void calc_wider_mode (void) { - enum mode_class c; +  int c;   struct mode_data *m;   struct mode_data **sortbuf;   unsigned int max_n_modes = 0; @@ -703,7 +703,7 @@   /* Allocate max_n_modes + 1 entries to leave room for the extra null      pointer assigned after the qsort call below.  */ -  sortbuf = alloca ((max_n_modes + 1) * sizeof (struct mode_data *)); +  sortbuf = (mode_data**)alloca ((max_n_modes + 1) * sizeof (struct mode_data *));   for (c = 0; c < MAX_MODE_CLASS; c++)     { @@ -765,7 +765,7 @@ static void emit_insn_modes_h (void) { -  enum mode_class c; +  int c;   struct mode_data *m, *first, *last;   printf ("/* Generated automatically from machmode.def%s%s\n", @@ -866,7 +866,7 @@ static void emit_mode_name (void) { - enum mode_class c; +  int c;   struct mode_data *m; print_decl ("char *const", "mode_name", "NUM_MACHINE_MODES"); @@ -880,13 +880,13 @@ static void emit_mode_class (void) { - enum mode_class c; +  int c;   struct mode_data *m; print_decl ("unsigned char", "mode_class", "NUM_MACHINE_MODES"); for_all_modes (c, m) -   tagged_printf ("%s", mode_class_names[m->class], m->name); +   tagged_printf ("%s", mode_class_names[m->m_class], m->name); print_closer ; } @@ -894,7 +894,7 @@ static void emit_mode_precision (void) { - enum mode_class c; +  int c;   struct mode_data *m; print_decl ("unsigned short", "mode_precision", "NUM_MACHINE_MODES"); @@ -911,7 +911,7 @@ static void emit_mode_size (void) { - enum mode_class c; +  int c;   struct mode_data *m; print_maybe_const_decl ("%sunsigned char", "mode_size", @@ -926,7 +926,7 @@ static void emit_mode_nunits (void) { - enum mode_class c; +  int c;   struct mode_data *m;   print_decl ("unsigned char", "mode_nunits", "NUM_MACHINE_MODES"); @@ -940,7 +940,7 @@ static void emit_mode_wider (void) { -  enum mode_class c; +  int c;   struct mode_data *m;   print_decl ("unsigned char", "mode_wider", "NUM_MACHINE_MODES"); @@ -956,7 +956,7 @@ static void emit_mode_mask (void) { -  enum mode_class c; +  int c;   struct mode_data *m;   print_decl ("unsigned HOST_WIDE_INT", "mode_mask_array", @@ -980,7 +980,7 @@ static void emit_mode_inner (void) { - enum mode_class c; +  int c;; struct mode_data *m; print_decl ("unsigned char", "mode_inner", "NUM_MACHINE_MODES"); @@ -996,7 +996,7 @@ static void emit_mode_base_align (void) { - enum mode_class c; +  int c;; struct mode_data *m; print_maybe_const_decl ("%sunsigned char", @@ -1012,7 +1012,7 @@ static void emit_class_narrowest_mode (void) { - enum mode_class c; +  int c;;   print_decl ("unsigned char", "class_narrowest_mode", "MAX_MODE_CLASS"); @@ -1084,7 +1084,7 @@       for (m = a->mode->contained; m; m = m->next_cont) 	{ -	  switch (m->class) +	  switch (m->m_class) 	    { 	    case MODE_COMPLEX_INT: 	    case MODE_COMPLEX_FLOAT: @@ -1120,7 +1120,7 @@       for (m = a->mode->contained; m; m = m->next_cont) 	{ -	  switch (m->class) +	  switch (m->m_class) 	    { 	    case MODE_COMPLEX_INT: 	    case MODE_COMPLEX_FLOAT:
 * 1) define for_all_modes(C, M)			\
 * 1) define COMPLEX_MODES(C) make_complex_modes(MODE_##C, __FILE__, __LINE__)
 * 1) define VECTOR_MODES(C, W) make_vector_modes(MODE_##C, W, __FILE__, __LINE__)
 * 1) define CC_MODE(N) _SPECIAL_MODE (CC, N)
 * 1) define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1, Y)

diff -d -u ./ggc.h /home/new_version/gcc-3.4.4-3/gcc/ggc.h --- ./ggc.h	2003-12-21 09:08:33.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/ggc.h	2007-12-27 06:53:15.453125000 -0500 @@ -209,6 +209,11 @@ /* For regular tree allocations. */ extern struct alloc_zone *tree_zone; +#ifndef gt_types_enum +enum gt_types_enum + {}; +#endif + /* The internal primitive. */ extern void *ggc_alloc (size_t); /* Allocate an object into the specified allocation zone. */ @@ -287,4 +292,7 @@ extern int ggc_min_heapsize_heuristic (void); extern void init_ggc_heuristics (void); + +#include "mymem.h" +
 * 1) endif

diff -d -u ./loop.c /home/new_version/gcc-3.4.4-3/gcc/loop.c --- ./loop.c	2005-01-06 14:12:03.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/loop.c	2007-12-27 07:15:27.906250000 -0500 @@ -478,19 +478,20 @@     Leave some space for labels allocated by find_and_verify_loops. */  max_uid_for_loop = get_max_uid  + 1 + max_loop_num * 32; - uid_luid = xcalloc (max_uid_for_loop, sizeof (int)); - uid_loop = xcalloc (max_uid_for_loop, sizeof (struct loop *)); + uid_luid = xcalloc (max_uid_for_loop); + uid_loop = xcalloc (max_uid_for_loop); /* Allocate storage for array of loops. */ - loops->array = xcalloc (loops->num, sizeof (struct loop)); + loops->array = xcalloc (loops->num); /* Find and process each loop. First, find them, and record them in order of their beginnings. */  find_and_verify_loops (f, loops); /* Allocate and initialize auxiliary loop information. */ - loops_info = xcalloc (loops->num, sizeof (struct loop_info)); - for (i = 0; i < (int) loops->num; i++) + loops_info = xcalloc (loops->num); + +for (i = 0; i < (int) loops->num; i++) loops->array[i].aux = loops_info + i;  /* Now find all register lifetimes. This must be done after @@ -1839,8 +1840,8 @@  /* Map of pseudo-register replacements to handle combining when we move several insns that load the same value into different pseudo-registers. */ - rtx *reg_map = xcalloc (nregs, sizeof (rtx)); - char *already_moved = xcalloc (nregs, sizeof (char)); + rtx *reg_map = xcalloc (nregs); + char *already_moved = xcalloc (nregs); for (m = movables->head; m; m = m->next) { @@ -2185,8 +2186,8 @@ 			} 		     else if (m->insert_temp) { -			 rtx *reg_map2 = xcalloc (REGNO (newreg), -						   sizeof(rtx)); +			 rtx *reg_map2 = xcalloc (REGNO (newreg) +						   ); reg_map2 [m->regno] = newreg; i1 = loop_insn_hoist (loop, copy_rtx (PATTERN (p))); @@ -5131,7 +5132,7 @@  addr_placeholder = gen_reg_rtx (Pmode); ivs->n_regs = max_reg_before_loop; - ivs->regs = xcalloc (ivs->n_regs, sizeof (struct iv)); + ivs->regs = xcalloc (ivs->n_regs); /* Find all BIVs in loop. */  loop_bivs_find (loop); @@ -5185,7 +5186,7 @@     Some givs might have been made from biv increments, so look at      ivs->reg_iv_type for a suitable size. */  reg_map_size = ivs->n_regs; - reg_map = xcalloc (reg_map_size, sizeof (rtx)); + reg_map = xcalloc (reg_map_size); /* Examine each iv class for feasibility of strength reduction/induction variable elimination. */ @@ -7649,8 +7650,8 @@    if (!g1->ignore) giv_array[i++] = g1; - stats = xcalloc (giv_count, sizeof (*stats)); - can_combine = xcalloc (giv_count, giv_count * sizeof (rtx)); + stats = xcalloc (giv_count); + can_combine = xcalloc (giv_count *2); for (i = 0; i < giv_count; i++) {

diff -d -u ./loop.h /home/new_version/gcc-3.4.4-3/gcc/loop.h --- ./loop.h	2004-03-01 20:12:04.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/loop.h	2007-12-27 06:38:08.937500000 -0500 @@ -215,7 +215,7 @@  enum iv_mode type; union { -   struct iv_class *class; +   struct iv_class *m_class; struct induction *info; } iv; }; @@ -223,7 +223,7 @@ -#define REG_IV_CLASS(ivs, n) ivs->regs[n].iv.class +#define REG_IV_CLASS(ivs, n) ivs->regs[n].iv.m_class struct loop_ivs
 * 1) define REG_IV_TYPE(ivs, n) ivs->regs[n].type
 * 2) define REG_IV_INFO(ivs, n) ivs->regs[n].iv.info

diff -d -u ./optabs.h /home/new_version/gcc-3.4.4-3/gcc/optabs.h --- ./optabs.h	2004-01-23 18:36:01.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/optabs.h	2007-12-27 06:42:01.125000000 -0500 @@ -38,28 +38,35 @@   A few optabs, such as move_optab and cmp_optab, are used by special code. */ +#ifndef insn_code +enum insn_code { + +}; +#endif + struct optab_handlers GTY() {  enum insn_code insn_code; rtx libfunc; }; -struct optab GTY() +struct optab_tag GTY() {  enum rtx_code code; struct optab_handlers handlers[NUM_MACHINE_MODES]; }; -typedef struct optab * optab; + +typedef struct optab_tag * optab; /* A convert_optab is for some sort of conversion operation between modes. The first array index is the destination mode, the second is the source mode. */ -struct convert_optab GTY() +struct convert_optab_tag GTY() {  enum rtx_code code; struct optab_handlers handlers[NUM_MACHINE_MODES][NUM_MACHINE_MODES]; }; -typedef struct convert_optab *convert_optab; +typedef struct convert_optab_tag *convert_optab; /* Given an enum insn_code, access the function to construct the body of that kind of insn. */

Common subdirectories: ./po and /home/new_version/gcc-3.4.4-3/gcc/po Only in /home/new_version/gcc-3.4.4-3/gcc/: print-rtl1.c diff -d -u ./real.h /home/new_version/gcc-3.4.4-3/gcc/real.h --- ./real.h	2003-10-10 16:33:05.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/real.h	2007-12-27 06:36:26.437500000 -0500 @@ -42,7 +42,7 @@ struct real_value GTY() { - ENUM_BITFIELD (real_value_class) class : 2; + ENUM_BITFIELD (real_value_class) _class : 2; unsigned int sign : 1; unsigned int signalling : 1; unsigned int canonical : 1; @@ -53,7 +53,7 @@ /* Various headers condition prototypes on #ifdef REAL_VALUE_TYPE, so it   needs to be a macro. We do need to continue to have a structure tag so that other headers can forward declare it. */ -#define REAL_VALUE_TYPE struct real_value +//#define REAL_VALUE_TYPE struct real_value /* We store a REAL_VALUE_TYPE into an rtx, and we do this by putting it in   consecutive "w" slots. Moreover, we've got to compute the number of "w" @@ -64,6 +64,10 @@  (REAL_VALUE_TYPE_SIZE/HOST_BITS_PER_WIDE_INT \    + (REAL_VALUE_TYPE_SIZE%HOST_BITS_PER_WIDE_INT ? 1 : 0)) /* round up */ +#ifndef REAL_VALUE_TYPE +//MIKE +typedef double REAL_VALUE_TYPE; +#endif /* Verify the guess. */ extern char test_real_width [sizeof(REAL_VALUE_TYPE) <= REAL_WIDTH*sizeof(HOST_WIDE_INT) ? 1 : -1];

diff -d -u ./recog.h /home/new_version/gcc-3.4.4-3/gcc/recog.h --- ./recog.h	2004-01-09 15:03:53.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/recog.h	2007-12-27 06:35:44.843750000 -0500 @@ -38,7 +38,7 @@  const char *constraint; /* The register class valid for this alternative (possibly NO_REGS). */ - enum reg_class class; + enum reg_class m_class; /* "Badness" of this alternative, computed from number of '?' and '!' characters in the constraint string. */ @@ -148,6 +148,12 @@ /* The following vectors hold the results from insn_extract. */ +#ifndef MAX_RECOG_OPERANDS +//MIKE +#define MAX_RECOG_OPERANDS 1 +#define MAX_DUP_OPERANDS 1 +#endif + struct recog_data {  /* It is very tempting to make the 5 operand related arrays into a

diff -d -u ./rtl.h /home/new_version/gcc-3.4.4-3/gcc/rtl.h --- ./rtl.h	2004-12-05 00:21:01.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/rtl.h	2007-12-27 07:13:20.484375000 -0500 @@ -69,25 +69,6 @@ � /* The flags and bitfields of an ADDR_DIFF_VEC. BASE is the base label relative to which the offsets are calculated, as explained in rtl.def. */ -typedef struct -{ - /* Set at the start of shorten_branches - ONLY WHEN OPTIMIZING - : */ - unsigned min_align: 8; - /* Flags: */ - unsigned base_after_vec: 1; /* BASE is after the ADDR_DIFF_VEC. */ - unsigned min_after_vec: 1;  /* minimum address target label is -				 after the ADDR_DIFF_VEC. */ - unsigned max_after_vec: 1;  /* maximum address target label is -				 after the ADDR_DIFF_VEC. */ - unsigned min_after_base: 1; /* minimum address target label is -				 after BASE. */ - unsigned max_after_base: 1; /* maximum address target label is -				 after BASE. */ - /* Set by the actual branch shortening process - ONLY WHEN OPTIMIZING - : */ - unsigned offset_unsigned: 1; /* offsets have to be treated as unsigned. */ - unsigned : 2; - unsigned scale : 8; -} addr_diff_vec_flags; /* Structure used to describe the attributes of a MEM. These are hashed so MEMs that the same attributes share a data structure. This means @@ -96,8 +77,9 @@ /* ALIGN and SIZE are the alignment and size of the MEM itself, while EXPR can describe a larger underlying object, which might have a   stricter alignment; OFFSET is the offset of the MEM within that object. */ -typedef struct mem_attrs GTY() +class mem_attrs { + public: HOST_WIDE_INT alias;		/* Memory alias set. */  tree expr;			/* expr corresponding to MEM. */  rtx offset;			/* Offset from start of DECL, as CONST_INT. */ @@ -116,110 +98,11 @@ /* Common union for an element of an rtx. */ -union rtunion_def -{ - int rtint; - unsigned int rtuint; - const char *rtstr; - rtx rtx; - rtvec rtvec; - enum machine_mode rttype; - addr_diff_vec_flags rt_addr_diff_vec_flags; - struct cselib_val_struct *rt_cselib; - struct bitmap_head_def *rtbit; - tree rttree; - struct basic_block_def *bb; - mem_attrs *rtmem; - reg_attrs *rtreg; -}; -typedef union rtunion_def rtunion; - -/* RTL expression ("rtx"). */ - -struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), -		   chain_prev ("RTX_PREV (&%h)"))) -{ - /* The kind of expression this is. */ - ENUM_BITFIELD(rtx_code) code: 16; - /* The kind of value the expression has. */ - ENUM_BITFIELD(machine_mode) mode : 8; +typedef rtunion_base rtunion; - /* 1 in a MEM if we should keep the alias set for this mem unchanged -    when we access a component. -    1 in a CALL_INSN if it is a sibling call. -    1 in a SET that is for a return. -    In a CODE_LABEL, part of the two-bit alternate entry field. */ - unsigned int jump : 1; - /* In a CODE_LABEL, part of the two-bit alternate entry field. -    1 in a MEM if it cannot trap. */ - unsigned int call : 1; - /* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere. -    1 in a SUBREG if it references an unsigned object whose mode has been -    from a promoted to a wider mode. -    1 in a SYMBOL_REF if it addresses something in the per-function -    constants pool. -    1 in a CALL_INSN, NOTE, or EXPR_LIST for a const or pure call. -    1 in a JUMP_INSN, CALL_INSN, or INSN of an annulling branch. */ - unsigned int unchanging : 1; - /* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile. -    1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE -    if it has been deleted. -    1 in a REG expression if corresponds to a variable declared by the user, -    0 for an internally generated temporary. -    1 in a SUBREG with a negative value. -    1 in a LABEL_REF or in a REG_LABEL note for a non-local label. -    In a SYMBOL_REF, this flag is used for machine-specific purposes. */ - unsigned int volatil : 1; - /* 1 in a MEM referring to a field of an aggregate. -    0 if the MEM was a variable or the result of a * operator in C; -     1 if it was the result of a. or -> operator (on a struct) in C. -    1 in a REG if the register is used only in exit code a loop. -    1 in a SUBREG expression if was generated from a variable with a -     promoted mode. -    1 in a CODE_LABEL if the label is used for nonlocal gotos -    and must not be deleted even if its count is zero. -    1 in a LABEL_REF if this is a reference to a label outside the -    current loop. -    1 in an INSN, JUMP_INSN or CALL_INSN if this insn must be scheduled -    together with the preceding insn. Valid only within sched. -    1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and -    from the target of a branch. Valid from reorg until end of compilation; -    cleared before used. -    1 in an INSN, JUMP_INSN or CALL_INSN or related rtx if this insn is -     dead code. Valid only during dead-code elimination phase; cleared -    before use. */ - unsigned int in_struct : 1; - /* At the end of RTL generation, 1 if this rtx is used. This is used for -    copying shared structure. See `unshare_all_rtl'. -    In a REG, this is not needed for that purpose, and used instead -    in `leaf_renumber_regs_insn'. -    1 in a SYMBOL_REF, means that emit_library_call -    has used it as the function. */ - unsigned int used : 1; - /* Nonzero if this rtx came from procedure integration. -    1 in a REG or PARALLEL means this rtx refers to the return value -    of the current function. -    1 in a SYMBOL_REF if the symbol is weak. */ - unsigned integrated : 1; - /* 1 in an INSN or a SET if this rtx is related to the call frame, -    either changing how we compute the frame address or saving and -    restoring registers in the prologue and epilogue. -    1 in a MEM if the MEM refers to a scalar, rather than a member of -     an aggregate. -    1 in a REG if the register is a pointer. -    1 in a SYMBOL_REF if it addresses something in the per-function -    constant string pool. */ - unsigned frame_related : 1; +/* RTL expression ("rtx"). */ - /* The first element of the operands of this rtx. -    The number of operands and their types are controlled -    by the `code' field, according to rtl.def. */ - union u { -   rtunion fld[1]; -   HOST_WIDE_INT hwint[1]; - } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u; -}; /* The size in bytes of an rtx header (code, mode and flags). */ @@ -248,8 +131,10 @@ /* Define macros to access the `code' field of the rtx. */ -#define GET_CODE(RTX)	   ((enum rtx_code) (RTX)->code) -#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE)) +enum rtx_code GET_CODE(rtx RTX ); +//	   ((enum rtx_code) (RTX)->code) + +enum rtx_code PUT_CODE(rtx RTX, enum rtx_code CODE);// ((RTX)->code = (CODE)) @@ -505,8 +390,8 @@ -#define XEXP(RTX, N)	(RTL_CHECK2 (RTX, N, 'e', 'u').rtx) -#define XVEC(RTX, N)	(RTL_CHECK2 (RTX, N, 'E', 'V').rtvec) +#define XEXP(RTX, N)	(RTL_CHECK2 (RTX, N, 'e', 'u').m_rtx) +#define XVEC(RTX, N)	(RTL_CHECK2 (RTX, N, 'E', 'V').m_rtvec) @@ -522,8 +407,8 @@ -#define X0EXP(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rtx) -#define X0VEC(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rtvec) +#define X0EXP(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').m_rtx) +#define X0VEC(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').m_rtvec) @@ -539,8 +424,8 @@ -#define XCEXP(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rtx) -#define XCVEC(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rtvec) +#define XCEXP(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).m_rtx) +#define XCVEC(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).m_rtvec) @@ -551,7 +436,7 @@ -#define XC2EXP(RTX, N, C1, C2)     (RTL_CHECKC2 (RTX, N, C1, C2).rtx) +#define XC2EXP(RTX, N, C1, C2)     (RTL_CHECKC2 (RTX, N, C1, C2).m_rtx) � /* ACCESS MACROS for particular fields of insns. */ @@ -560,7 +445,8 @@ /* Holds a unique number for each insn. These are not necessarily sequentially increasing. */ -#define INSN_UID(INSN) XINT (INSN, 0) +int INSN_UID(rtx INSN) ; +// XINT (INSN, 0) /* Chain insns together in sequence. */ @@ -2338,4 +2224,6 @@ /* In tracer.c */ extern void tracer (unsigned int); + +
 * 1) define RTX_HDR_SIZE offsetof (struct rtx_def, u)
 * 1) define GET_MODE(RTX)	   ((enum machine_mode) (RTX)->mode)
 * 2) define PUT_MODE(RTX, MODE) ((RTX)->mode = (MODE))
 * 1) define XINT(RTX, N)	(RTL_CHECK2 (RTX, N, 'i', 'n').rtint)
 * 2) define XSTR(RTX, N)	(RTL_CHECK2 (RTX, N, 's', 'S').rtstr)
 * 1) define XMODE(RTX, N)	(RTL_CHECK1 (RTX, N, 'M').rttype)
 * 2) define XBITMAP(RTX, N) (RTL_CHECK1 (RTX, N, 'b').rtbit)
 * 3) define XTREE(RTX, N)  (RTL_CHECK1 (RTX, N, 't').rttree)
 * 1) define X0INT(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rtint)
 * 2) define X0UINT(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rtuint)
 * 3) define X0STR(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rtstr)
 * 1) define X0MODE(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rttype)
 * 2) define X0BITMAP(RTX, N)  (RTL_CHECK1 (RTX, N, '0').rtbit)
 * 3) define X0TREE(RTX, N)	  (RTL_CHECK1 (RTX, N, '0').rttree)
 * 1) define XCINT(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rtint)
 * 2) define XCUINT(RTX, N, C)    (RTL_CHECKC1 (RTX, N, C).rtuint)
 * 3) define XCSTR(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rtstr)
 * 1) define XCMODE(RTX, N, C)    (RTL_CHECKC1 (RTX, N, C).rttype)
 * 2) define XCBITMAP(RTX, N, C)  (RTL_CHECKC1 (RTX, N, C).rtbit)
 * 3) define XCTREE(RTX, N, C)    (RTL_CHECKC1 (RTX, N, C).rttree)
 * 1) define XCVECEXP(RTX, N, M, C)	RTVEC_ELT (XCVEC (RTX, N, C), M)
 * 2) define XCVECLEN(RTX, N, C)	GET_NUM_ELEM (XCVEC (RTX, N, C))
 * 1) define PREV_INSN(INSN)	XEXP (INSN, 1)
 * 1) endif /* ! GCC_RTL_H */

diff -d -u ./tree-dump.c /home/new_version/gcc-3.4.4-3/gcc/tree-dump.c --- ./tree-dump.c	2003-12-18 15:09:40.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/tree-dump.c	2007-12-26 08:51:24.812500000 -0500 @@ -57,10 +57,10 @@      di->free_list = dq->next; }  else -   dq = xmalloc (sizeof (struct dump_queue)); +   dq = (dump_queue*)xmalloc (sizeof (struct dump_queue)); /* Create a new entry in the splay-tree. */ - dni = xmalloc (sizeof (struct dump_node_info)); + dni = (dump_node_info*)xmalloc (sizeof (struct dump_node_info)); dni->index = index; dni->binfo_p = ((flags & DUMP_BINFO) != 0); dq->node = splay_tree_insert (di->nodes, (splay_tree_key) t,

diff -d -u ./tree.c /home/new_version/gcc-3.4.4-3/gcc/tree.c --- ./tree.c	2004-08-23 14:02:41.000000000 -0400 +++ /home/new_version/gcc-3.4.4-3/gcc/tree.c	2007-12-24 06:33:28.218750000 -0500 @@ -82,11 +82,6 @@ /* Since we cannot rehash a type after it is in the table, we have to   keep the hash code. */ -struct type_hash GTY() -{ - unsigned long hash; - tree type; -}; /* Initial size of the hash table (rounded to next prime). */ @@ -130,7 +125,7 @@ {  if (!DECL_ASSEMBLER_NAME_SET_P (decl)) (*lang_hooks.set_decl_assembler_name) (decl); - return DECL_CHECK (decl)->decl.assembler_name; + return DECL_CHECK (decl)->assembler_name; } /* Compute the number of bytes occupied by 'node'. This routine only @@ -295,7 +290,7 @@    case 't': TYPE_UID (t) = next_type_uid++; -     TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0; +     TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : false_bit_ref; TYPE_USER_ALIGN (t) = 0; TYPE_MAIN_VARIANT (t) = t; @@ -467,7 +462,7 @@ build_real (tree type, REAL_VALUE_TYPE d) { tree v; - REAL_VALUE_TYPE *dp; + REAL_VALUE_TYPEP dp; int overflow = 0; /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE. @@ -495,9 +490,14 @@     bitwise comparisons to see if two values are the same. */  memset (&d, 0, sizeof d); - real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, -		     TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i), -		     TREE_UNSIGNED (TREE_TYPE (i))); + real_from_integer (&d, +		     type ? +		     TYPE_MODE (type) : +		     VOIDmode, +		     TREE_INT_CST_LOW (i), +		     TREE_INT_CST_HIGH (i), +		     TREE_UNSIGNED ( +				   TREE_TYPE (i))); return d; } @@ -1945,7 +1945,7 @@ {  enum tree_code code = TREE_CODE (exp); tree op0, op1, op2; - tree new; + tree _new; tree inner; switch (TREE_CODE_CLASS (code)) @@ -1984,7 +1984,7 @@ 	 if (code == NON_LVALUE_EXPR) return op0; -	 new = fold (build1 (code, TREE_TYPE (exp), op0)); +	 _new = fold (build1 (code, TREE_TYPE (exp), op0)); break; case 2: @@ -2005,7 +2005,7 @@ 	 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)) return exp; -	 new = fold (build (code, TREE_TYPE (exp), op0, op1)); +	 _new = fold (build (code, TREE_TYPE (exp), op0, op1)); break; case 3: @@ -2042,7 +2042,7 @@ 	     && op2 == TREE_OPERAND (exp, 2)) 	    return exp; -	  new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); +	  _new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); 	  break; 	default: @@ -2075,7 +2075,7 @@ 	  if (op0 == TREE_OPERAND (exp, 0)) 	    return exp; -	  new = fold (build (code, TREE_TYPE (exp), op0, +	  _new = fold (build (code, TREE_TYPE (exp), op0, 			     TREE_OPERAND (exp, 1))); 	  break; @@ -2087,7 +2087,7 @@ 	      && op2 == TREE_OPERAND (exp, 2)) return exp; -	 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); +	 _new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); break; case INDIRECT_REF: @@ -2096,7 +2096,7 @@ 	 if (op0 == TREE_OPERAND (exp, 0)) return exp; -	 new = fold (build1 (code, TREE_TYPE (exp), op0)); +	 _new = fold (build1 (code, TREE_TYPE (exp), op0)); break; default: @@ -2108,8 +2108,8 @@      abort ; } - TREE_READONLY (new) = TREE_READONLY (exp); - return new; + TREE_READONLY (_new) = TREE_READONLY (exp); + return _new; } � /* Stabilize a reference so that we can use it any number of times @@ -2827,25 +2827,25 @@   The second instance of `foo' nullifies the dllimport. */ tree -merge_dllimport_decl_attributes (tree old, tree new) +merge_dllimport_decl_attributes (tree old, tree _new) {  tree a;   int delete_dllimport_p; old = DECL_ATTRIBUTES (old); - new = DECL_ATTRIBUTES (new); + _new = DECL_ATTRIBUTES (_new); /* What we need to do here is remove from `old' dllimport if it doesn't     appear in `new'. dllimport behaves like extern: if a declaration is     marked dllimport and a definition appears later, then the object is not dllimport'd. */ if (lookup_attribute ("dllimport", old) != NULL_TREE -     && lookup_attribute ("dllimport", new) == NULL_TREE) +     && lookup_attribute ("dllimport", _new) == NULL_TREE)     delete_dllimport_p = 1;   else     delete_dllimport_p = 0; -  a = merge_attributes (old, new); +  a = merge_attributes (old, _new);   if (delete_dllimport_p)     { @@ -2969,7 +2969,7 @@ static int type_hash_eq (const void *va, const void *vb) { -  const struct type_hash *a = va, *b = vb; +  const struct type_hash *a = (const struct type_hash*)va, *b = (const struct type_hash*)vb;   if (a->hash == b->hash && TREE_CODE (a->type) == TREE_CODE (b->type) && TREE_TYPE (a->type) == TREE_TYPE (b->type) @@ -2996,15 +2996,16 @@ /* Return the cached hash value. */ + static hashval_t type_hash_hash (const void *item) {  return ((const struct type_hash *) item)->hash; } + /* Look in the type hash table for a type isomorphic to TYPE. If one is found, return it. Otherwise return 0. */ - tree type_hash_lookup (unsigned int hashcode, tree type) { @@ -3017,7 +3018,7 @@  in.hash = hashcode; in.type = type; - h = htab_find_with_hash (type_hash_table, &in, hashcode); + h = (type_hash*)htab_find_with_hash (type_hash_table, &in, hashcode); if (h) return h->type; return NULL_TREE; @@ -3032,7 +3033,7 @@  struct type_hash *h; void **loc; - h = ggc_alloc (sizeof (struct type_hash)); + h = (type_hash*)ggc_alloc (sizeof (struct type_hash)); h->hash = hashcode; h->type = type; loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT); @@ -3535,20 +3536,20 @@ {  int i;   enum tree_code code; - char class; + char aclass; if (t == NULL_TREE) return iterative_hash_object (t, val); code = TREE_CODE (t); - class = TREE_CODE_CLASS (code); + aclass = TREE_CODE_CLASS (code); - if (class == 'd') + if (aclass == 'd') {      /* Decls we can just compare by pointer. */      val = iterative_hash_object (t, val); } - else if (class == 'c') + else if (aclass == 'c') {      /* Alas, constants aren't shared, so we can't rely on pointer identity. */ @@ -3573,7 +3574,7 @@      else abort ; } - else if (IS_EXPR_CODE_CLASS (class)) + else if (IS_EXPR_CODE_CLASS (aclass)) {      val = iterative_hash_object (code, val); @@ -4065,7 +4066,7 @@  /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */  tree type = TREE_TYPE (op); unsigned final_prec -   = TYPE_PRECISION (for_type != 0 ? for_type : type); +   = for_type != 0 ? TYPE_PRECISION (for_type) : TYPE_PRECISION (type); int uns = (for_type != 0 && for_type != type       && final_prec > TYPE_PRECISION (type) @@ -4598,7 +4599,7 @@ 	file = input_filename;       len = strlen (file); -      q = alloca (9 * 2 + len + 1); +      q = (char*)alloca (9 * 2 + len + 1);       memcpy (q, file, len + 1);       clean_symbol_name (q); @@ -4608,7 +4609,7 @@       p = q;     } -  buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type)); +  buf = (char*)alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));   /* Set up the name of the file-level functions we may need.      Use a global object (which is already required to be unique over @@ -4703,7 +4704,7 @@  int bit_size = wd_size * set_word_size; int bit_pos = 0; unsigned char *bytep = buffer; - char *bit_buffer = alloca (bit_size); + char *bit_buffer = (char*)alloca (bit_size); tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size); for (i = 0; i < wd_size; i++)
 * 1) define TYPE_HASH_INITIAL_SIZE 1000

diff -d -u ./tree.h /home/new_version/gcc-3.4.4-3/gcc/tree.h --- ./tree.h	2005-01-16 11:01:19.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/tree.h	2007-12-26 09:01:58.156250000 -0500 @@ -26,8 +26,23 @@ +//#include + /* Codes of tree nodes */ +class tree_decl; +class tree_int_cst; +class tree_real_cst; +class tree_string; +class tree_complex; +class tree_vector; +class tree_identifier; +class tree_list; +class tree_vec; +class tree_exp; +class tree_block; +class tree_type; + enum tree_code { @@ -37,8 +52,11 @@ 				  NUM_TREE_CODE. */ }; + + + /* Number of language-independent tree codes. */ @@ -126,39 +144,88 @@   See the accessor macros, defined below, for documentation of the fields. */ -struct tree_common GTY() + +/* +class type_hash { - tree chain; - tree type; + public: + type_hash (void *); + TRefunsigned_long hash; + TreeRef type; - ENUM_BITFIELD(tree_code) code : 8; + bool operator ==(type_hash &); +}; +*/ - unsigned side_effects_flag : 1; - unsigned constant_flag : 1; - unsigned addressable_flag : 1; - unsigned volatile_flag : 1; - unsigned readonly_flag : 1; - unsigned unsigned_flag : 1; - unsigned asm_written_flag: 1; - unsigned unused_0 : 1; +struct type_hash GTY() +{ + unsigned long hash; + TreeTypeRef type; +}; - unsigned used_flag : 1; - unsigned nothrow_flag : 1; - unsigned static_flag : 1; - unsigned public_flag : 1; - unsigned private_flag : 1; - unsigned protected_flag : 1; - unsigned deprecated_flag : 1; - unsigned unused_1 : 1; - unsigned lang_flag_0 : 1; - unsigned lang_flag_1 : 1; - unsigned lang_flag_2 : 1; - unsigned lang_flag_3 : 1; - unsigned lang_flag_4 : 1; - unsigned lang_flag_5 : 1; - unsigned lang_flag_6 : 1; - unsigned unused_2 : 1; +//const struct type_hash; +typedef TRef const_struct_type_hash; + +/* +class type_hashp : public TRef +{ + public: + type_hashp(void *); + type_hashp(const void *); +   type_hash * operator -> ; +}; +*/ +typedef BitRef BitRef9 ; + +class tree_common GTY() +{ + public: + TREECONSTRUCTOR2(tree_common) + + tree_code GetCode + { +    return code; + } + +  void SetCode(tree_code c) +  { +   code=c; + } + +public: + TreeRef chain; + TreeTypeRef type; + + TRef code; + + public: + BitRef side_effects_flag ; + BitRef constant_flag ; + BitRef addressable_flag ; + BitRef volatile_flag ; + BitRef readonly_flag ; + BitRef unsigned_flag ; + BitRef asm_written_flag; + //  BitRef unused_0 ; + + BitRef used_flag ; + BitRef nothrow_flag ; + BitRef static_flag ; + BitRef public_flag ; + BitRef private_flag ; + BitRef protected_flag ; + BitRef deprecated_flag ; + //  BitRef unused_1 ; + + BitRef lang_flag_0 ; + BitRef lang_flag_1 ; + BitRef lang_flag_2 ; + BitRef lang_flag_3 ; + BitRef lang_flag_4 ; + BitRef lang_flag_5 ; + BitRef lang_flag_6 ; + //  BitRef unused_2 : 1; }; /* The following table lists the uses of each of the above flags and @@ -275,8 +342,12 @@ /* The tree-code says what kind of node it is. Codes are defined in tree.def. */ -#define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code) -#define TREE_SET_CODE(NODE, VALUE) ((NODE)->common.code = (VALUE)) +//#define TREE_CODE(NODE) ((NODE)->GetCode) + +tree_code TREE_CODE(TreeRef NODE); //((NODE)->GetCode) +tree_code TREE_CODE(tree_node *NODE); //((NODE)->GetCode) + +#define TREE_SET_CODE(NODE, VALUE) ((NODE)->SetCode((VALUE))) /* When checking is enabled, errors will be generated if a tree node is accessed incorrectly. The macros abort with a fatal error. */ @@ -310,10 +381,10 @@    if (TREE_CODE (__t) != TREE_VEC)					\ tree_check_failed (__t, TREE_VEC,					\ 			 __FILE__, __LINE__, __FUNCTION__);		\ -   if (__i < 0 || __i >= __t->vec.length)				\ -     tree_vec_elt_check_failed (__i, __t->vec.length,			\ +    if (__i < 0 || __i >= TREE_VEC_CHECK(__t).length)			\ +      tree_vec_elt_check_failed (__i, TREE_VEC_CHECK(__t).length,			\ __FILE__, __LINE__, __FUNCTION__);	\ -   &__t->vec.a[__i]; })) +    &TREE_VEC_CHECK(__t).a[__i]; })) /* Special checks for TREE_OPERANDs.  */ @@ -322,7 +393,7 @@     if (__i < 0 || __i >= TREE_CODE_LENGTH (TREE_CODE (__t)))		\       tree_operand_check_failed (__i, TREE_CODE (__t),			\ __FILE__, __LINE__, __FUNCTION__);	\ -   &__t->exp.operands[__i]; })) +    &__t->operands[__i]; })) (*({const tree __t = (T);						\ @@ -332,7 +403,7 @@     if (__i < 0 || __i >= TREE_CODE_LENGTH (CODE))			\       tree_operand_check_failed (__i, (CODE),				\ __FILE__, __LINE__, __FUNCTION__);	\ -   &__t->exp.operands[__i]; })) +    &__t->operands[__i]; })) (*(rtx *)								\ @@ -343,7 +414,7 @@    if (__i < 0 || __i >= TREE_CODE_LENGTH ((CODE)))			\ tree_operand_check_failed (__i, (CODE),				\ 				 __FILE__, __LINE__, __FUNCTION__);	\ -   &__t->exp.operands[__i]; })) +   &__t->operands[__i]; })) extern void tree_check_failed (const tree, enum tree_code, 			      const char *, int, const char *) @@ -363,18 +434,20 @@ -#define EXPR_CHECK(T)			(T) -#define TREE_VEC_ELT_CHECK(T, I)	((T)->vec.a[I]) -#define TREE_OPERAND_CHECK(T, I)	((T)->exp.operands[I]) -#define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I]) -#define TREE_RTL_OPERAND_CHECK(T, CODE, I) (*(rtx *) &((T)->exp.operands[I])) +#define EXPR_CHECK(T)			((TreeExpRef)T) +#define TREE_VEC_ELT_CHECK(T, I)	(TREE_VEC_CHECK(T).a[I]) +#define TREE_OPERAND_CHECK(T, I)	(((TreeExpRef)T)->operands[I]) +#define TREE_OPERAND_CHECK_CODE(T, CODE, I) (((TreeExpRef)T)->operands[I]) +#define TREE_RTL_OPERAND_CHECK(T, CODE, I) (*(rtx *) &(((TreeExpRef)T)->operands[I])) + +#define DECL_CHECK(T)	 ((tree_decl*)(T)) -#define TYPE_CHECK(T)		TREE_CLASS_CHECK (T, 't') -#define DECL_CHECK(T)		TREE_CLASS_CHECK (T, 'd') +#define TYPE_CHECK(T)		((TreeTypeRef)T) +//TREE_CLASS_CHECK (T, 't') @@ -382,7 +455,10 @@   In POINTER_TYPE nodes, this is the type that the pointer points to. In ARRAY_TYPE nodes, this is the type of the elements. In VECTOR_TYPE nodes, this is the type of the elements. */ -#define TREE_TYPE(NODE) ((NODE)->common.type) +//#define TREE_TYPE(NODE) ((TreeTypeRef)((NODE)->type)) + +TreeTypeRef TREE_TYPE(TreeRef); +TreeTypeRef TREE_TYPE(tree_node *); /* Here is how primitive or already-canonicalized types' hash codes are made. */ @@ -397,11 +473,13 @@   Often lists of things are represented by TREE_LIST nodes that are chained together. */ -#define TREE_CHAIN(NODE) ((NODE)->common.chain) +#define TREE_CHAIN(NODE) (((TreeListRef)NODE)->chain) /* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs that don't change the machine mode. */ +TreeExprRef &STRIP_NOPS(const TreeExprRef &); +/*  while ((TREE_CODE (EXP) == NOP_EXPR				\ || TREE_CODE (EXP) == CONVERT_EXPR			\ @@ -410,9 +488,12 @@ 	 && (TYPE_MODE (TREE_TYPE (EXP))			\ 	    == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))))	\     (EXP) = TREE_OPERAND (EXP, 0) - +*/ /* Like STRIP_NOPS, but don't let the signedness change either.  */ + +TreeExprRef & STRIP_SIGN_NOPS(const TreeExprRef &);	+/*   while ((TREE_CODE (EXP) == NOP_EXPR				\ 	  || TREE_CODE (EXP) == CONVERT_EXPR			\ @@ -423,7 +504,7 @@ 	 && (TREE_UNSIGNED (TREE_TYPE (EXP))			\ == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ (EXP) = TREE_OPERAND (EXP, 0) - +*/ /* Like STRIP_NOPS, but don't alter the TREE_TYPE main variant either. */ @@ -517,56 +598,63 @@   object cannot go into register parameters, for example. In IDENTIFIER_NODEs, this means that some extern decl for this name had its address taken. That matters for inline functions. */ -#define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag) +#define TREE_ADDRESSABLE(NODE) ((NODE)->addressable_flag) /* In a VAR_DECL, nonzero means allocate static storage. In a FUNCTION_DECL, nonzero if function has been defined. In a CONSTRUCTOR, nonzero means allocate static storage. */ -#define TREE_STATIC(NODE) ((NODE)->common.static_flag) +#define TREE_STATIC(NODE) ((NODE)->static_flag) /* In a TARGET_EXPR, WITH_CLEANUP_EXPR, CLEANUP_STMT, or element of a   block's cleanup list, means that the pertinent cleanup should only be    executed if an exception is thrown, not on normal exit of its scope. */ -#define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag) +#define CLEANUP_EH_ONLY(NODE) ((NODE)->static_flag) /* In a CONVERT_EXPR, NOP_EXPR or COMPOUND_EXPR, this means the node was made implicitly and should not lead to an "unused value" warning. */ -#define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag) +#define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->static_flag) /* Nonzero for a TREE_LIST or TREE_VEC node means that the derivation chain is via a `virtual' declaration. */ -#define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag) +#define TREE_VIA_VIRTUAL(NODE) ((NODE)->static_flag) /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST this means there was an overflow in folding. This is distinct from TREE_OVERFLOW because ANSI C requires a diagnostic when overflows occur in constant expressions. */ -#define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag) +//#define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->static_flag) +BitRef TREE_CONSTANT_OVERFLOW(TreeRef NODE); +BitRef TREE_CONSTANT_OVERFLOW(tree_node * NODE); /* In an IDENTIFIER_NODE, this means that assemble_name was called with this string as an argument. */ - (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag) + (IDENTIFIER_NODE_CHECK (NODE)->static_flag) /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means there was an overflow in folding, and no warning has been issued for this subexpression. TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, but not vice versa. */ -#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag) +#define TREE_OVERFLOW(NODE) ((NODE)->public_flag) /* In a VAR_DECL or FUNCTION_DECL, nonzero means name is to be accessible from outside this module. In an IDENTIFIER_NODE, nonzero means an external declaration accessible from outside this module was previously seen for this name in an inner scope. */ -#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag) +#define TREE_PUBLIC(NODE) ((NODE)->public_flag) /* In any expression, nonzero means it has side effects or reevaluation of the whole expression could produce a different value. This is set if any subexpression is a function call, a side effect or a reference to a volatile variable. In a ..._DECL, this is set only if the declaration said `volatile'. */ -#define TREE_SIDE_EFFECTS(NODE) ((NODE)->common.side_effects_flag) +//#define TREE_SIDE_EFFECTS(NODE) ((NODE)->side_effects_flag) + +//BitRef TREE_SIDE_EFFECTS(tree_node *); +BitRef TREE_SIDE_EFFECTS(TreeRef); +BitRef TREE_SIDE_EFFECTS(tree_node *); + /* Nonzero means this expression is volatile in the C sense: its address should be of type `volatile WHATEVER *'. @@ -578,14 +666,14 @@   because eventually we may make that a different bit. If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */ -#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag) +#define TREE_THIS_VOLATILE(NODE) ((NODE)->volatile_flag) /* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node, nonzero means it may not be the lhs of an assignment. In a ..._TYPE node, means this type is const-qualified (but the macro TYPE_READONLY should be used instead of this macro   when the node is a type). */ -#define TREE_READONLY(NODE) ((NODE)->common.readonly_flag) +#define TREE_READONLY(NODE) ((NODE)->readonly_flag) /* Nonzero if NODE is a _DECL with TREE_READONLY set. */ @@ -594,11 +682,11 @@   Always appears in all ..._CST nodes. May also appear in an arithmetic expression, an ADDR_EXPR or a CONSTRUCTOR if the value is constant. */ -#define TREE_CONSTANT(NODE) ((NODE)->common.constant_flag) +#define TREE_CONSTANT(NODE) (((tree_common*)NODE)->constant_flag) /* In INTEGER_TYPE or ENUMERAL_TYPE nodes, means an unsigned type. In FIELD_DECL nodes, means an unsigned bit field. */ -#define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag) +#define TREE_UNSIGNED(NODE) (((tree_common*)NODE)->unsigned_flag) (flag_trapv && ! TREE_UNSIGNED (TYPE_CHECK (NODE))) @@ -610,25 +698,25 @@   Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE if the sdb debugging info for the type has been written. In a BLOCK node, nonzero if reorder_blocks has already seen this block. */ -#define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag) +#define TREE_ASM_WRITTEN(NODE) ((NODE)->asm_written_flag) /* Nonzero in a _DECL if the name is used in its scope. Nonzero in an expr node means inhibit warning if value is unused. In IDENTIFIER_NODEs, this means that some extern decl for this name was used. */ -#define TREE_USED(NODE) ((NODE)->common.used_flag) +#define TREE_USED(NODE) ((NODE)->used_flag) /* In a FUNCTION_DECL, nonzero means a call to the function cannot throw an exception. In a CALL_EXPR, nonzero means the call cannot throw. */ -#define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag) +#define TREE_NOTHROW(NODE) ((NODE)->nothrow_flag) /* In a CALL_EXPR, means that the address of the return slot is part of the argument list. */ -#define CALL_EXPR_HAS_RETURN_SLOT_ADDR(NODE) ((NODE)->common.private_flag) +#define CALL_EXPR_HAS_RETURN_SLOT_ADDR(NODE) ((NODE)->private_flag) /* In a CALL_EXPR, means that the call is the jump from a thunk to the thunked-to function. */ -#define CALL_FROM_THUNK_P(NODE) ((NODE)->common.protected_flag) +#define CALL_FROM_THUNK_P(NODE) ((NODE)->protected_flag) /* In a type, nonzero means that all objects of the type are guaranteed by the language or front-end to be properly aligned, so we can indicate that a MEM @@ -636,26 +724,26 @@   doesn't appear that it is. We see this, for example, in object-oriented languages where a tag field may show this is an object of a more-aligned variant of the more generic type. */ -#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag) +#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->nothrow_flag) /* Used in classes in C++. */ -#define TREE_PRIVATE(NODE) ((NODE)->common.private_flag) +#define TREE_PRIVATE(NODE) ((NODE)->private_flag) /* Used in classes in C++. In a BLOCK node, this is BLOCK_HANDLER_BLOCK. */ -#define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag) +#define TREE_PROTECTED(NODE) ((NODE)->protected_flag) /* Nonzero in an IDENTIFIER_NODE if the use of the name is defined as a   deprecated feature by __attribute__((deprecated)). */ -#define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag) +#define TREE_DEPRECATED(NODE) ((NODE)->deprecated_flag) /* These flags are available for each language front end to use internally. */ -#define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0) -#define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1) -#define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2) -#define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3) -#define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4) -#define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5) -#define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6) +#define TREE_LANG_FLAG_0(NODE) ((NODE)->lang_flag_0) +#define TREE_LANG_FLAG_1(NODE) ((NODE)->lang_flag_1) +#define TREE_LANG_FLAG_2(NODE) ((NODE)->lang_flag_2) +#define TREE_LANG_FLAG_3(NODE) ((NODE)->lang_flag_3) +#define TREE_LANG_FLAG_4(NODE) ((NODE)->lang_flag_4) +#define TREE_LANG_FLAG_5(NODE) ((NODE)->lang_flag_5) +#define TREE_LANG_FLAG_6(NODE) ((NODE)->lang_flag_6) � /* Define additional fields and accessors for nodes representing constants. */ @@ -663,9 +751,19 @@   If the data type is signed, the value is sign-extended to 2 words even though not all of them may really be in use. In an unsigned constant shorter than 2 words, the extra bits are 0. */ -#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst) -#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low) -#define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high) +//#define TREE_INT_CST(NODE) ((tree_int_cst *) NODE) + +TreeIntCstRef TREE_INT_CST(tree_node * NODE); + +TRefunsignedHOST_WIDE_INT & TREE_INT_CST_LOW(const TreeRef & NODE); // (TREE_INT_CST (NODE)->low) +TRefHOST_WIDE_INT & TREE_INT_CST_HIGH(const TreeRef & NODE); //(TREE_INT_CST (NODE)->high) +TRefunsignedHOST_WIDE_INT & TREE_INT_CST_LOW(const TreeIntCstRef & NODE); // (TREE_INT_CST (NODE)->low) +TRefunsignedHOST_WIDE_INT & TREE_INT_CST_LOW(TreeIntCstRef); // (TREE_INT_CST (NODE)->low) +TRefHOST_WIDE_INT & TREE_INT_CST_HIGH(const TreeIntCstRef & NODE); //(TREE_INT_CST (NODE)->high) +TRefHOST_WIDE_INT & TREE_INT_CST_HIGH(TreeIntCstRef ); //(TREE_INT_CST (NODE)->high) +TRefunsignedHOST_WIDE_INT & TREE_INT_CST_LOW(tree_node *); // (TREE_INT_CST (NODE)->low) +TRefHOST_WIDE_INT & TREE_INT_CST_HIGH(tree_node *); //(TREE_INT_CST (NODE)->high) +  (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B)	\ @@ -679,73 +777,107 @@ 	== (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))	\ && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) -struct tree_int_cst GTY() +class tree_int_cst : public tree_common GTY() { - struct tree_common common; + //  struct tree_common common; /* A sub-struct is necessary here because the function `const_hash' wants to scan both words as a unit and taking the address of the sub-struct yields the properly inclusive bounded pointer. */ - struct tree_int_cst_lowhi { -   unsigned HOST_WIDE_INT low; -   HOST_WIDE_INT high; - } int_cst; + public: + TREECONSTRUCTOR(tree_int_cst) + +   bool operator < (tree_int_cst &); + + //  struct tree_int_cst_lowhi { +   TRefunsignedHOST_WIDE_INT low; +   TRefHOST_WIDE_INT high; +   //  } int_cst; }; /* In a REAL_CST node. struct real_value is an opaque entity, with manipulators defined in real.h. We don't want tree.h depending on    real.h and transitively on tm.h.  */ -struct real_value; +class real_value; -#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr) +#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst_ptr) -struct tree_real_cst GTY() +class RealValue +//: public TRef { - struct tree_common common; - struct real_value * real_cst_ptr; + public: + TREECONSTRUCTOR(RealValue) +   RealValue(real_value*); + RealValue & operator * ; + operator void * ; + +}; +#define REAL_VALUE_TYPE RealValue +#define REAL_VALUE_TYPEP RealValue +class tree_real_cst : public tree_common GTY() +{ + //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_real_cst) + +  RealValue  real_cst_ptr; }; /* In a STRING_CST */ -#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length) -#define TREE_STRING_POINTER(NODE) (STRING_CST_CHECK (NODE)->string.pointer) +#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->length) +const char * TREE_STRING_POINTER(tree NODE); //(STRING_CST_CHECK (NODE)->pointer) -struct tree_string GTY() + +class tree_string : public tree_common GTY() { - struct tree_common common; - int length; - const char *pointer; + //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_string) +   +  tree_string(const char *); + tree_string & operator = (const char *); + TRef length; + mystring pointer; }; +//#define TRef(X, Y) + /* In a COMPLEX_CST node. */ -#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real) -#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag) +#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->real) +#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->imag) -struct tree_complex GTY() +class tree_complex : public tree_common GTY() { - struct tree_common common; - tree real; - tree imag; + public: + TREECONSTRUCTOR(tree_complex) + //  struct tree_common common; + TreeRef real; + TreeRef imag; }; /* In a VECTOR_CST node. */ -#define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements) +#define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->elements) -struct tree_vector GTY() +class tree_vector : public tree_common GTY() { - struct tree_common common; - tree elements; + //struct tree_common common; + public: + TREECONSTRUCTOR(tree_vector) + TreeRef elements; }; � /* Define fields and accessors for some special-purpose tree nodes. */ -#define IDENTIFIER_LENGTH(NODE) \ - (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len) -#define IDENTIFIER_POINTER(NODE) \ - ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str) +size_t IDENTIFIER_LENGTH(tree NODE); +//#define IDENTIFIER_LENGTH(NODE) +// (IDENTIFIER_NODE_CHECK (NODE)->id.len) +const char * IDENTIFIER_POINTER(tree NODE); + //  ((const char *) IDENTIFIER_NODE_CHECK (NODE)->id.str) + - (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value) + (IDENTIFIER_NODE_CHECK (NODE)->id.hash_value) /* Translate a hash table identifier pointer to a tree_identifier pointer, and vice versa. */ @@ -754,35 +886,44 @@  ((tree) ((char *) (NODE) - sizeof (struct tree_common))) -struct tree_identifier GTY() +class tree_identifier : public tree_common GTY() { - struct tree_common common; + public: + TREECONSTRUCTOR(tree_identifier) + //  struct tree_common common; struct ht_identifier id; }; /* In a TREE_LIST node. */ -#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose) -#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value) +TreeRef TREE_PURPOSE(tree NODE); // ((TreeListRef)NODE)->purpose) +TreeRef TREE_VALUE(tree NODE); //(((TreeListRef)NODE)->value) -struct tree_list GTY() +class tree_list : public tree_common GTY() { - struct tree_common common; -  tree purpose; -  tree value; + public: +  TREECONSTRUCTOR(tree_list) +  //  struct tree_common common; +  TreeRef purpose; +  TreeRef value; + + }; /* In a TREE_VEC node.  */ -#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length) +int TREE_VEC_LENGTH(TreeVecRef NODE); // (TREE_VEC_CHECK (NODE)->length) + -  ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length])) +  ((void) TREE_VEC_CHECK (NODE), &(  TREE_VEC_CHECK(NODE)->a[TREE_VEC_CHECK(NODE)->length])) -struct tree_vec GTY() +class tree_vec : public tree_common GTY() { -  struct tree_common common; -  int length; -  tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; +  //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_vec) + TRef length; + TreeRef GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; }; /* Define fields and accessors for some nodes that represent expressions. */ @@ -811,8 +952,10 @@ /* In ordinary expression nodes. */ -#define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I) -#define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity) +TreeRef TREE_OPERAND(TreeRef NODE, int I) ; +TreeRef TREE_OPERAND(tree_node* NODE, int I) ; +//TREE_OPERAND_CHECK (NODE, I) +#define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->complexity) /* In a LABELED_BLOCK_EXPR node. */ @@ -830,7 +973,7 @@ /* In an EXPR_WITH_FILE_LOCATION node. */ - (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->common.public_flag) + (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->public_flag) TREE_OPERAND_CHECK_CODE (NODE, EXPR_WITH_FILE_LOCATION, 0) @@ -838,7 +981,7 @@  IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE (NODE)) /* ??? Java uses this in all expressions. */ -#define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity) +#define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->complexity) @@ -849,34 +992,34 @@ -struct tree_exp GTY() +class tree_exp : public tree_common GTY() { - struct tree_common common; - int complexity; - tree GTY ((special ("tree_exp"), -	    desc ("TREE_CODE ((tree) &%0)"))) -   operands[1]; + //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_exp) + TRefint complexity; + TreeRef  operands[1]; }; � /* In a BLOCK node. */ -#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars) -#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks) -#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext) +#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->vars) +#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->subblocks) +#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->supercontext) /* Note: when changing this, make sure to find the places that use chainon or nreverse. */ -#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) -#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) +#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->abstract_origin) +#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->abstract_flag) /* Nonzero means that this block is prepared to handle exceptions listed in the BLOCK_VARS slot. */ - (BLOCK_CHECK (NODE)->block.handler_block_flag) + (BLOCK_CHECK (NODE)->handler_block_flag) /* An index number for this block. These values are not guaranteed to   be unique across functions -- whether or not they are depends on    the debugging output format in use. */ -#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num) +#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block_num) /* If block reordering splits a lexical block into discontiguous address ranges, we'll make a copy of the original block. @@ -900,23 +1043,24 @@   be null. The list of fragments will be chained through BLOCK_FRAGMENT_CHAIN from the origin. */ -#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin) -#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain) +#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->fragment_origin) +#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->fragment_chain) -struct tree_block GTY() +class tree_block : public tree_common GTY() { - struct tree_common common; - - unsigned handler_block_flag : 1; - unsigned abstract_flag : 1; - unsigned block_num : 30; + //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_block) + TRefunsigned handler_block_flag; + TRefunsigned abstract_flag; + TRefunsigned block_num; - tree vars; - tree subblocks; - tree supercontext; - tree abstract_origin; - tree fragment_origin; - tree fragment_chain; + TreeRef vars; + TreeRef subblocks; + TreeRef supercontext; + TreeRef abstract_origin; + TreeRef fragment_origin; + TreeRef fragment_chain; }; � /* Define fields and accessors for nodes representing data types. */ @@ -924,64 +1068,64 @@ /* See tree.def for documentation of the use of these fields. Look at the documentation of the various ..._TYPE tree codes. */ -#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid) -#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size) -#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) -#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode) -#define TYPE_VALUES(NODE) (TYPE_CHECK (NODE)->type.values) -#define TYPE_DOMAIN(NODE) (TYPE_CHECK (NODE)->type.values) -#define TYPE_FIELDS(NODE) (TYPE_CHECK (NODE)->type.values) -#define TYPE_METHODS(NODE) (TYPE_CHECK (NODE)->type.maxval) -#define TYPE_VFIELD(NODE) (TYPE_CHECK (NODE)->type.minval) -#define TYPE_ARG_TYPES(NODE) (TYPE_CHECK (NODE)->type.values) -#define TYPE_METHOD_BASETYPE(NODE) (TYPE_CHECK (NODE)->type.maxval) -#define TYPE_OFFSET_BASETYPE(NODE) (TYPE_CHECK (NODE)->type.maxval) -#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to) -#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to) -#define TYPE_MIN_VALUE(NODE) (TYPE_CHECK (NODE)->type.minval) -#define TYPE_MAX_VALUE(NODE) (TYPE_CHECK (NODE)->type.maxval) -#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision) -#define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address) -#define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer) -#define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die) -#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name) -#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant) -#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) -#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) -#define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific) +#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->uid) +#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->size) +#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->size_unit) +#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->mode) +#define TYPE_VALUES(NODE) (TYPE_CHECK (NODE)->values) +#define TYPE_DOMAIN(NODE) (TYPE_CHECK (NODE)->values) +#define TYPE_FIELDS(NODE) (TYPE_CHECK (NODE)->values) +#define TYPE_METHODS(NODE) (TYPE_CHECK (NODE)->maxval) +#define TYPE_VFIELD(NODE) (TYPE_CHECK (NODE)->minval) +#define TYPE_ARG_TYPES(NODE) (TYPE_CHECK (NODE)->values) +#define TYPE_METHOD_BASETYPE(NODE) (TYPE_CHECK (NODE)->maxval) +#define TYPE_OFFSET_BASETYPE(NODE) (TYPE_CHECK (NODE)->maxval) +#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->pointer_to) +#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->reference_to) +#define TYPE_MIN_VALUE(NODE) (TYPE_CHECK (NODE)->minval) +#define TYPE_MAX_VALUE(NODE) (TYPE_CHECK (NODE)->maxval) +#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->precision) +#define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->symtab.address) +#define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->symtab.pointer) +#define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->symtab.die) +#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->name) +#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->next_variant) +#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->main_variant) +#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->context) +#define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->lang_specific) /* For a VECTOR_TYPE node, this describes a different type which is emitted in the debugging output. We use this to describe a vector as a   structure containing an array. */ -#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->type.values) +#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->values) /* For aggregate types, information about this type, as a base type for itself. Used in a language-dependent way for types that are neither a RECORD_TYPE, QUAL_UNION_TYPE, nor a UNION_TYPE. */ -#define TYPE_BINFO(NODE) (TYPE_CHECK (NODE)->type.binfo) +TreeRef TYPE_BINFO(tree NODE); // (TYPE_CHECK (NODE)->binfo) /* The (language-specific) typed-based alias set for this type. Objects whose TYPE_ALIAS_SETs are different cannot alias each other. If the TYPE_ALIAS_SET is -1, no alias set has yet been assigned to this type. If the TYPE_ALIAS_SET is 0, objects of this type can alias objects of any type. */ -#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type.alias_set) +#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->alias_set) /* Nonzero iff the typed-based alias set for this type has been calculated. */ -#define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1) +#define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->alias_set != -1) /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply to this type. */ -#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type.attributes) +#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->attributes) /* The alignment necessary for objects of this type. The value is an int, measured in bits. */ -#define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align) +#define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->align) /* 1 if the alignment for this type was requested by "aligned" attribute, 0 if it is the default for this type. */ -#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align) +#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->user_align) /* The alignment for NODE, in bytes. */ @@ -998,7 +1142,7 @@ /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type has BLKmode only because it lacks the alignment requirement for its size. */ -#define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag) +#define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->no_force_blk_flag) /* In an INTEGER_TYPE, it means the type represents a size. We use this both for validity checking and to permit optimizations that @@ -1008,23 +1152,26 @@   expression returned by `sizeof'; `size_t' has no special properties. Expressions whose type have TYPE_IS_SIZETYPE set are always actual sizes. */ -#define TYPE_IS_SIZETYPE(NODE) \ - (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag) + +BitRef TYPE_IS_SIZETYPE(tree NODE ) ; +//{ +// (INTEGER_TYPE_CHECK (NODE)->no_force_blk_flag); +//} /* In a FUNCTION_TYPE, indicates that the function returns with the stack pointer depressed. */ - (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag) + (FUNCTION_TYPE_CHECK (NODE)->no_force_blk_flag) /* Nonzero in a type considered volatile as a whole. */ -#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag) +#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->volatile_flag) /* Means this type is const-qualified. */ -#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag) +#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->readonly_flag) /* If nonzero, this type is `restrict'-qualified, in the C sense of   the term. */ -#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag) +#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->restrict_flag) /* There is a TYPE_QUAL value for each type qualifier. They can be   combined by bitwise-or to form the complete set of qualifiers for a @@ -1042,18 +1189,18 @@ | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)) /* These flags are available for each language front end to use internally. */ -#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0) -#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1) -#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type.lang_flag_2) -#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type.lang_flag_3) -#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type.lang_flag_4) -#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5) -#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type.lang_flag_6) +#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->lang_flag_0) +#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->lang_flag_1) +#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->lang_flag_2) +#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->lang_flag_3) +#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->lang_flag_4) +#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->lang_flag_5) +#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->lang_flag_6) /* If set in an ARRAY_TYPE, indicates a string type (for languages   that distinguish string from array of char). If set in a SET_TYPE, indicates a bitstring type. */ -#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag) +#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->string_flag) /* If non-NULL, this is an upper bound of the size (in bytes) of an   object of the given ARRAY_TYPE. This allows temporaries to be @@ -1063,78 +1210,97 @@ /* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */ - GET_MODE_NUNITS (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.mode) + GET_MODE_NUNITS ((VECTOR_TYPE_CHECK (VECTOR_TYPE)->mode)) /* Indicates that objects of this type must be initialized by calling a   function when they are created. */ - (TYPE_CHECK (NODE)->type.needs_constructing_flag) + (TYPE_CHECK (NODE)->needs_constructing_flag) /* Indicates that objects of this type (a UNION_TYPE), should be passed the same way that the first union alternative would be passed. */ - (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag) + (UNION_TYPE_CHECK (NODE)->transparent_union_flag) /* For an ARRAY_TYPE, indicates that it is not permitted to   take the address of a component of the type. */ - (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag) + (ARRAY_TYPE_CHECK (NODE)->transparent_union_flag) /* Indicated that objects of this type should be laid out in as   compact a way as possible. */ -#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag) +#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->packed_flag) struct die_struct; -struct tree_type GTY() +class tree_type_symtab { + public: + int GTY ((tag ("0"))) address; + char * GTY ((tag ("1"))) pointer; + struct die_struct * GTY ((tag ("2"))) die; +}; +// GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0") +	//descbits ("2"))) symtab; + +class tree_type : public tree_common GTY() { - struct tree_common common; - tree values; - tree size; - tree size_unit; - tree attributes; - unsigned int uid; + //  struct tree_common common; + public: + TREECONSTRUCTOR(tree_type) +   +    tree_type(TreeRef &); - unsigned int precision : 9; - ENUM_BITFIELD(machine_mode) mode : 7; - unsigned string_flag : 1; - unsigned no_force_blk_flag : 1; - unsigned needs_constructing_flag : 1; - unsigned transparent_union_flag : 1; - unsigned packed_flag : 1; - unsigned restrict_flag : 1; - unsigned spare : 2; + tree_type( TreeRef *); - unsigned lang_flag_0 : 1; - unsigned lang_flag_1 : 1; - unsigned lang_flag_2 : 1; - unsigned lang_flag_3 : 1; - unsigned lang_flag_4 : 1; - unsigned lang_flag_5 : 1; - unsigned lang_flag_6 : 1; - unsigned user_align : 1; - unsigned int align; - tree pointer_to; - tree reference_to; - union tree_type_symtab { -   int GTY ((tag ("0"))) address; -   char * GTY ((tag ("1"))) pointer; -   struct die_struct * GTY ((tag ("2"))) die; - } GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0"), -	 descbits ("2"))) symtab; - tree name; - tree minval; - tree maxval; - tree next_variant; - tree main_variant; - tree binfo; - tree context; - HOST_WIDE_INT alias_set; + TreeRef values; + TreeRef size; + TreeRef size_unit; + TreeRef attributes; + TRefunsignedint uid; + BitRef9  precision; + TRefmachine_mode mode; + BitRef string_flag ; + BitRef no_force_blk_flag ; + BitRef needs_constructing_flag ; + BitRef transparent_union_flag ; + BitRef packed_flag ; + BitRef restrict_flag ; + //unsigned spare : 2; + public: + BitRef lang_flag_0; + BitRef lang_flag_1; + BitRef lang_flag_2; + BitRef lang_flag_3; + BitRef lang_flag_4; + BitRef lang_flag_5; + BitRef lang_flag_6; + BitRef user_align; + public: + TRefunsignedint align; + TreeTypeRef pointer_to; + TreeTypeRef reference_to; + + tree_type_symtab symtab; + + private: + + public: + TreeRef name; + TreeRef minval; + TreeRef maxval; + TreeTypeRef next_variant; + TreeTypeRef main_variant; + TreeRef binfo; + TreeRef context; + + TRefHOST_WIDE_INT alias_set; /* Points to a structure whose details depend on the language in use. */  struct lang_type *lang_specific; }; + +//bool operator ==(tree_type *,tree_type *); � /* Define accessor macros for information about type inheritance and basetypes. @@ -1236,9 +1402,14 @@ /* Nonzero if DECL represents a decl. */ + +#define NODE_DECL(NODE) NODE +//(((tree_decl*)NODE)) + + /* This is the name of the object as written by the user. It is an IDENTIFIER_NODE. */ -#define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name) +#define DECL_NAME(NODE) (DECL_CHECK (NODE)->name) /* The name of the object as the assembler will see it (but before any   translations made by ASM_OUTPUT_LABELREF). Often this is the same @@ -1249,11 +1420,11 @@   the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set yet. */ - (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE) + (DECL_CHECK(NODE)->assembler_name != NULL_TREE) /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ - (DECL_CHECK (NODE)->decl.assembler_name = (NAME)) + (DECL_CHECK(NODE)->assembler_name = (NAME)) /* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's   DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause @@ -1272,7 +1443,7 @@ /* Records the section name in a section attribute. Used to pass the name from decl_attributes to make_function_rtl and make_decl_rtl. */ -#define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name) +#define DECL_SECTION_NAME(NODE) (DECL_CHECK(NODE)->section_name) /* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or     QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, @@ -1281,60 +1452,60 @@    the RECORD_TYPE or UNION_TYPE for the containing type, or     NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file     scope". */ -#define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context) -#define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context) +#define DECL_CONTEXT(NODE) (DECL_CHECK(NODE)->context) +#define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK(NODE)->context) /* In a DECL this is the field where attributes are stored. */ -#define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.attributes) +#define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->attributes) /* In a FIELD_DECL, this is the field position, counting in bytes, of the byte containing the bit closest to the beginning of the structure. */ -#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments) +#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK(NODE)->arguments) /* In a FIELD_DECL, this is the offset, in bits, of the first bit of the field from DECL_FIELD_OFFSET. */ -#define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.u2.t) +#define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK(NODE)->u2.t) /* In a FIELD_DECL, this indicates whether the field was a bit-field and if so, the type that was originally specified for it. TREE_TYPE may have been modified (in finish_struct). */ -#define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result) +#define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->result) /* In FUNCTION_DECL, a chain of ..._DECL nodes. VAR_DECL and PARM_DECL reserve the arguments slot for language-specific uses. */ -#define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments) +#define DECL_ARGUMENTS(NODE) (DECL_CHECK(NODE)->arguments) /* This field is used to reference anything in decl.result and is meant only for use by the garbage collector. */ -#define DECL_RESULT_FLD(NODE) (DECL_CHECK (NODE)->decl.result) +#define DECL_RESULT_FLD(NODE) (DECL_CHECK(NODE)->result) /* In FUNCTION_DECL, holds the decl for the return value. */ -#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.result) +#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK(NODE)->result) /* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */ -#define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK (NODE)->decl.result) +#define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK(NODE)->result) /* In PARM_DECL, holds the type as written (perhaps a function or array). */ -#define DECL_ARG_TYPE_AS_WRITTEN(NODE) (PARM_DECL_CHECK (NODE)->decl.result) +#define DECL_ARG_TYPE_AS_WRITTEN(NODE) (PARM_DECL_CHECK(NODE)->result) /* For a FUNCTION_DECL, holds the tree of BINDINGs. For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK. For a VAR_DECL, holds the initial value. For a PARM_DECL, not used--default values for parameters are encoded in the type of the function, not in the PARM_DECL slot. */ -#define DECL_INITIAL(NODE) (DECL_CHECK (NODE)->decl.initial) +#define DECL_INITIAL(NODE) (DECL_CHECK (NODE)->initial) /* For a PARM_DECL, records the data type used to pass the argument, which may be different from the type seen in the program. */ -#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl.initial) +#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->initial) /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which if nonzero, indicates that the field occupies the type. */ -#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->decl.initial) +#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK(NODE)->initial) /* These two fields describe where in the source code the declaration was. If the declaration appears in several places (as for a C   function that is declared first and then defined later), this information should refer to the definition. */ -#define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK (NODE)->decl.locus) +#define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK(NODE)->locus) /* Holds the size of the datum, in bits, as a tree expression. Need not be constant. */ -#define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size) +#define DECL_SIZE(NODE) (DECL_CHECK(NODE)->size) /* Likewise for the size in bytes. */ -#define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit) +#define DECL_SIZE_UNIT(NODE) (DECL_CHECK(NODE)->size_unit) /* Holds the alignment required for the datum, in bits. */ -#define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align) +#define DECL_ALIGN(NODE) (DECL_CHECK(NODE)->u1.a.align) /* The alignment of NODE, in bytes. */ /* For FIELD_DECLs, off_align holds the number of low-order bits of @@ -1342,28 +1513,28 @@ DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET has. */ - (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align) + (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK(NODE)->u1.a.off_align) /* Specify that DECL_ALIGN(NODE) is a multiple of X. */ - (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align	= exact_log2 ((X) & -(X))) + ((FIELD_DECL_CHECK(NODE)->u1.a.off_align)	= exact_log2 ((X) & -(X))) /* 1 if the alignment for this type was requested by "aligned" attribute, 0 if it is the default for this type. */ -#define DECL_USER_ALIGN(NODE) (DECL_CHECK (NODE)->decl.user_align) +#define DECL_USER_ALIGN(NODE) (DECL_CHECK(NODE)->user_align) /* Holds the machine mode corresponding to the declaration of a variable or   field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a   FIELD_DECL. */ -#define DECL_MODE(NODE) (DECL_CHECK (NODE)->decl.mode) +#define DECL_MODE(NODE) (DECL_CHECK(NODE)->mode) /* Holds the RTL expression for the value of a variable or function. This value can be evaluated lazily for functions, variables with static storage duration, and labels. */ - (DECL_CHECK (NODE)->decl.rtl				\ -   ? (NODE)->decl.rtl					\ -   : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl)) + (DECL_CHECK(NODE.rtl)				\ +   ? NODE.rtl					\ +   : (make_decl_rtl (NODE, NULL), NODE.rtl)) /* Set the DECL_RTL for NODE to RTL. */ /* Returns nonzero if the DECL_RTL for NODE has already been set. */ -#define DECL_RTL_SET_P(NODE) (DECL_CHECK (NODE)->decl.rtl != NULL) +#define DECL_RTL_SET_P(NODE) (DECL_CHECK(NODE)->rtl != NULL) /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for NODE1, it will not be set for NODE2; this is a lazy copy. */ @@ -1373,14 +1544,14 @@ /* For PARM_DECL, holds an RTL for the stack slot or register where the data was actually passed. */ -#define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r) +#define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK(NODE)->u2.r) /* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */ -#define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f) +#define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK(NODE)->u2.f) /* For FUNCTION_DECL, if it is built-in, this identifies which built-in operation it is. */ -#define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f) +#define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK(NODE)->u1.f) /* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways. Before the struct containing the FUNCTION_DECL is laid out, @@ -1389,22 +1560,22 @@   function. When the class is laid out, this pointer is changed to an INTEGER_CST node which is suitable for use as an index into the virtual function table. */ -#define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex) +#define DECL_VINDEX(NODE) (DECL_CHECK(NODE)->vindex) /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in   which this FIELD_DECL is defined. This information is needed when writing debugging information about vfield and vbase decls for C++. */ -#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.vindex) +#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK(NODE)->vindex) /* Every ..._DECL node gets a unique number. */ -#define DECL_UID(NODE) (DECL_CHECK (NODE)->decl.uid) +#define DECL_UID(NODE) (DECL_CHECK(NODE)->uid) /* For any sort of a ..._DECL node, this points to the original (abstract) decl node which this decl is an instance of, or else it is NULL indicating that this decl is not an instance of some other decl. For example, in a nested declaration of an inline function, this points back to the definition. */ -#define DECL_ABSTRACT_ORIGIN(NODE) (DECL_CHECK (NODE)->decl.abstract_origin) +#define DECL_ABSTRACT_ORIGIN(NODE) (DECL_CHECK(NODE)->abstract_origin) /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */ @@ -1420,7 +1591,7 @@ /* Nonzero if a _DECL means that the name of this decl should be ignored for symbolic debug purposes. */ -#define DECL_IGNORED_P(NODE) (DECL_CHECK (NODE)->decl.ignored_flag) +#define DECL_IGNORED_P(NODE) (DECL_CHECK(NODE)->ignored_flag) /* Nonzero for a given ..._DECL node means that this node represents an   "abstract instance" of the given declaration (e.g. in the original @@ -1428,25 +1599,25 @@    information, we mustn't try to generate any address information for nodes    marked as "abstract instances" because we don't actually generate    any code or allocate any data space for such instances.  */ -#define DECL_ABSTRACT(NODE) (DECL_CHECK (NODE)->decl.abstract_flag) +#define DECL_ABSTRACT(NODE) (DECL_CHECK(NODE)->abstract_flag) /* Nonzero if a _DECL means that no warnings should be generated just    because this decl is unused.  */ -  (DECL_CHECK (NODE)->decl.in_system_header_flag) +  (DECL_CHECK(NODE)->in_system_header_flag) /* Nonzero for a given ..._DECL node means that this node should be    put in .common, if possible.  If a DECL_INITIAL is given, and it -   is not error_mark_node, then the decl cannot be put in .common. */ -#define DECL_COMMON(NODE) (DECL_CHECK (NODE)->decl.common_flag) +  is not error_mark_node, then the decl cannot be put in. */ +#define DECL_COMMON(NODE) (DECL_CHECK(NODE)->common_flag) /* Language-specific decl information. */ -#define DECL_LANG_SPECIFIC(NODE) (DECL_CHECK (NODE)->decl.lang_specific) +#define DECL_LANG_SPECIFIC(NODE) (DECL_CHECK(NODE)->lang_specific) /* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference: do not allocate storage, and refer to a definition elsewhere. */ -#define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag) +#define DECL_EXTERNAL(NODE) (DECL_CHECK(NODE)->external_flag) /* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority initializations. */ @@ -1459,22 +1630,22 @@   Instead it will generate cross reference ('x') of names. This uses the same flag as DECL_EXTERNAL. */ - (TYPE_DECL_CHECK (NODE)->decl.external_flag) + (TYPE_DECL_CHECK(NODE)->external_flag) /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ -#define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag) +#define DECL_REGISTER(NODE) (DECL_CHECK(NODE)->regdecl_flag) /* In LABEL_DECL nodes, nonzero means that an error message about jumping into such a binding contour has been printed for this label. */ -#define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag) +#define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK(NODE)->regdecl_flag) /* In a FIELD_DECL, indicates this field should be bit-packed. */ -#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag) +#define DECL_PACKED(NODE) (FIELD_DECL_CHECK(NODE)->regdecl_flag) /* In a FUNCTION_DECL with a nonzero DECL_CONTEXT, indicates that a   static chain is not needed. */ - (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag) + (FUNCTION_DECL_CHECK(NODE)->regdecl_flag) /* Nonzero in a ..._DECL means this variable is ref'd from a nested function. For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. @@ -1483,99 +1654,99 @@   Also set in some languages for variables, etc., outside the normal lexical scope, such as class instance variables. */ -#define DECL_NONLOCAL(NODE) (DECL_CHECK (NODE)->decl.nonlocal_flag) +#define DECL_NONLOCAL(NODE) (DECL_CHECK(NODE)->nonlocal_flag) /* Nonzero in a FUNCTION_DECL means this function can be substituted where it is called. */ -#define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag) +#define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK(NODE)->inline_flag) /* Nonzero in a FUNCTION_DECL means that this function was declared inline, such as via the `inline' keyword in C/C++. This flag controls the linkage semantics of 'inline'; whether or not the function is inlined is   controlled by DECL_INLINE. */ - (FUNCTION_DECL_CHECK (NODE)->decl.declared_inline_flag) + (FUNCTION_DECL_CHECK(NODE)->declared_inline_flag) /* Value of the decls's visibility attribute */ -#define DECL_VISIBILITY(NODE) (DECL_CHECK (NODE)->decl.visibility) +#define DECL_VISIBILITY(NODE) (DECL_CHECK(NODE)->visibility) /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ -#define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable) +#define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK(NODE)->uninlinable) /* In a VAR_DECL, nonzero if the data should be allocated from thread-local storage. */ -#define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK (NODE)->decl.thread_local_flag) +#define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK(NODE)->thread_local_flag) /* In a FUNCTION_DECL, the saved representation of the body of the entire function. Usually a COMPOUND_STMT, but in C++ this may also be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK. */ -#define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree) +#define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK(NODE)->saved_tree) /* List of FUNCTION_DECLs inlined into this function's body. */ -#define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns) +#define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK(NODE)->inlined_fns) /* Nonzero in a FUNCTION_DECL means this function should be treated as if it were a malloc, meaning it returns a pointer that is   not an alias. */ -#define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.malloc_flag) +#define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK(NODE)->malloc_flag) /* Nonzero in a FUNCTION_DECL means this function should be treated as "pure" function (like const function, but may read global memory). */ -#define DECL_IS_PURE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.pure_flag) +#define DECL_IS_PURE(NODE) (FUNCTION_DECL_CHECK(NODE)->pure_flag) /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed specially. */ -#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl.bit_field_flag) +#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK(NODE)->bit_field_flag) /* In a LABEL_DECL, nonzero means label was defined inside a binding contour that restored a stack level and which is now exited. */ -#define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK (NODE)->decl.bit_field_flag) +#define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK(NODE)->bit_field_flag) /* Unused in FUNCTION_DECL. */ /* In a VAR_DECL that's static, nonzero if the space is in the text section. */ -#define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK (NODE)->decl.bit_field_flag) +#define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK(NODE)->bit_field_flag) /* In a FUNCTION_DECL, nonzero means a built in function. */ /* For a builtin function, identify which part of the compiler defined it. */ -  (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class) + (FUNCTION_DECL_CHECK(NODE)->built_in_class) /* Used in VAR_DECLs to indicate that the variable is a vtable. Used in FIELD_DECLs for vtable pointers. Used in FUNCTION_DECLs to indicate that the function is virtual. */ -#define DECL_VIRTUAL_P(NODE) (DECL_CHECK (NODE)->decl.virtual_flag) +#define DECL_VIRTUAL_P(NODE) (DECL_CHECK(NODE)->virtual_flag) /* Used to indicate that the linkage status of this DECL is not yet known, so it should not be output now. */ -#define DECL_DEFER_OUTPUT(NODE) (DECL_CHECK (NODE)->decl.defer_output) +#define DECL_DEFER_OUTPUT(NODE) (DECL_CHECK(NODE)->defer_output) /* Used in PARM_DECLs whose type are unions to indicate that the argument should be passed in the same way that the first union alternative would be passed. */ - (PARM_DECL_CHECK (NODE)->decl.transparent_union) + (PARM_DECL_CHECK(NODE)->transparent_union) /* Used in FUNCTION_DECLs to indicate that they should be run automatically at the beginning or end of execution. */ - (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag) + (FUNCTION_DECL_CHECK(NODE)->static_ctor_flag) -(FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag) + (FUNCTION_DECL_CHECK(NODE)->static_dtor_flag) /* Used to indicate that this DECL represents a compiler-generated entity. */ -#define DECL_ARTIFICIAL(NODE) (DECL_CHECK (NODE)->decl.artificial_flag) +#define DECL_ARTIFICIAL(NODE) (DECL_CHECK(NODE)->artificial_flag) /* Used to indicate that this DECL has weak linkage. */ -#define DECL_WEAK(NODE) (DECL_CHECK (NODE)->decl.weak_flag) +#define DECL_WEAK(NODE) (DECL_CHECK(NODE)->weak_flag) /* Used in TREE_PUBLIC decls to indicate that copies of this DECL in   multiple translation units should be merged. */ -#define DECL_ONE_ONLY(NODE) (DECL_CHECK (NODE)->decl.transparent_union) +#define DECL_ONE_ONLY(NODE) (DECL_CHECK(NODE)->transparent_union) /* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need not be put out unless it is needed in this translation unit. @@ -1586,42 +1757,42 @@   back-end; it is up to front-ends which set this flag to ensure that there will never be any harm, other than bloat, in putting out something which is DECL_COMDAT. */ -#define DECL_COMDAT(NODE) (DECL_CHECK (NODE)->decl.comdat_flag) +#define DECL_COMDAT(NODE) (DECL_CHECK(NODE)->comdat_flag) /* Used in FUNCTION_DECLs to indicate that function entry and exit should be instrumented with calls to support routines. */ - (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit) + (FUNCTION_DECL_CHECK(NODE)->no_instrument_function_entry_exit) /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be   disabled in this function. */ - (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack) + (FUNCTION_DECL_CHECK(NODE)->no_limit_stack) /* Additional flags for language-specific uses. */ -#define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0) -#define DECL_LANG_FLAG_1(NODE) (DECL_CHECK (NODE)->decl.lang_flag_1) -#define DECL_LANG_FLAG_2(NODE) (DECL_CHECK (NODE)->decl.lang_flag_2) -#define DECL_LANG_FLAG_3(NODE) (DECL_CHECK (NODE)->decl.lang_flag_3) -#define DECL_LANG_FLAG_4(NODE) (DECL_CHECK (NODE)->decl.lang_flag_4) -#define DECL_LANG_FLAG_5(NODE) (DECL_CHECK (NODE)->decl.lang_flag_5) -#define DECL_LANG_FLAG_6(NODE) (DECL_CHECK (NODE)->decl.lang_flag_6) -#define DECL_LANG_FLAG_7(NODE) (DECL_CHECK (NODE)->decl.lang_flag_7) +#define DECL_LANG_FLAG_0(NODE) (DECL_CHECK(NODE)->lang_flag_0) +#define DECL_LANG_FLAG_1(NODE) (DECL_CHECK(NODE)->lang_flag_1) +#define DECL_LANG_FLAG_2(NODE) (DECL_CHECK(NODE)->lang_flag_2) +#define DECL_LANG_FLAG_3(NODE) (DECL_CHECK(NODE)->lang_flag_3) +#define DECL_LANG_FLAG_4(NODE) (DECL_CHECK(NODE)->lang_flag_4) +#define DECL_LANG_FLAG_5(NODE) (DECL_CHECK(NODE)->lang_flag_5) +#define DECL_LANG_FLAG_6(NODE) (DECL_CHECK(NODE)->lang_flag_6) +#define DECL_LANG_FLAG_7(NODE) (DECL_CHECK(NODE)->lang_flag_7) /* Used to indicate that the pointer to this DECL cannot be treated as   an address constant. */ -#define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p) +#define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK(NODE)->non_addr_const_p) /* Used in a FIELD_DECL to indicate that we cannot form the address of   this component. */ - (FIELD_DECL_CHECK (NODE)->decl.non_addressable) + (FIELD_DECL_CHECK(NODE)->non_addressable) /* Used to indicate an alias set for the memory pointed to by this particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have pointer (or reference) type. */ - (DECL_CHECK (NODE)->decl.pointer_alias_set) + (DECL_CHECK(NODE)->pointer_alias_set) /* Nonzero if an alias set has been assigned to this declaration. */ @@ -1642,112 +1813,142 @@  VISIBILITY_PROTECTED }; -struct function; - -struct tree_decl GTY() -{ - struct tree_common common; - location_t locus; - unsigned int uid; - tree size; - ENUM_BITFIELD(machine_mode) mode : 8; - unsigned external_flag : 1; - unsigned nonlocal_flag : 1; - unsigned regdecl_flag : 1; - unsigned inline_flag : 1; - unsigned bit_field_flag : 1; - unsigned virtual_flag : 1; - unsigned ignored_flag : 1; - unsigned abstract_flag : 1; - - unsigned in_system_header_flag : 1; - unsigned common_flag : 1; - unsigned defer_output : 1; - unsigned transparent_union : 1; - unsigned static_ctor_flag : 1; - unsigned static_dtor_flag : 1; - unsigned artificial_flag : 1; - unsigned weak_flag : 1; - - unsigned non_addr_const_p : 1; - unsigned no_instrument_function_entry_exit : 1; - unsigned comdat_flag : 1; - unsigned malloc_flag : 1; - unsigned no_limit_stack : 1; - ENUM_BITFIELD(built_in_class) built_in_class : 2; - unsigned pure_flag : 1; - - unsigned non_addressable : 1; - unsigned user_align : 1; - unsigned uninlinable : 1; - unsigned thread_local_flag : 1; - unsigned declared_inline_flag : 1; - ENUM_BITFIELD(symbol_visibility) visibility : 2; - unsigned unused : 1; - /* one unused bit. */ +struct function; - unsigned lang_flag_0 : 1; - unsigned lang_flag_1 : 1; - unsigned lang_flag_2 : 1; - unsigned lang_flag_3 : 1; - unsigned lang_flag_4 : 1; - unsigned lang_flag_5 : 1; - unsigned lang_flag_6 : 1; - unsigned lang_flag_7 : 1; +class tree_decl_u1_a { +     //      unsigned int _align : 24; +     //      unsigned int _off_align : 8; +   public: +     TRefunsignedint align; +     TRefunsignedint off_align; +   }; -  union tree_decl_u1 { +class tree_decl_u1 { + public: /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is       DECL_FUNCTION_CODE. */    enum built_in_function f;     /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is used by language-dependent code. */ -   HOST_WIDE_INT i; +    TRefHOST_WIDE_INT i;     /* DECL_ALIGN and DECL_OFFSET_ALIGN. (These are not used for       FUNCTION_DECLs). */ -   struct tree_decl_u1_a { -     unsigned int align : 24; -     unsigned int off_align : 8; -   } a; -  } GTY ((skip (""))) u1; - tree size_unit; - tree name; - tree context; - tree arguments;	/* Also used for DECL_FIELD_OFFSET */ - tree result;	/* Also used for DECL_BIT_FIELD_TYPE */ - tree initial;	/* Also used for DECL_QUALIFIER */ - tree abstract_origin; - tree assembler_name; - tree section_name; - tree attributes; - rtx rtl;	/* RTL representation for object. */ +       tree_decl_u1_a a; + + };// GTY ((skip (""))) u1; + + + +class tree_decl_u2 { + public: + TRef  f; +  TRef r; +  TreeTypeRef  t; +  TRefint  i; +}; + + + + +// GTY ((desc ("TREE_CODE((tree) &(%0))"))) u2; + + +class tree_decl : public tree_common GTY() +{ +public: + TREECONSTRUCTOR(tree_decl) + //  struct tree_common common; + location_t locus; + TRefunsignedint uid; + TreeRef size; + TRefmachine_mode mode; + + BitRef external_flag ; + BitRef nonlocal_flag ; + BitRef regdecl_flag ; + BitRef inline_flag ; + BitRef bit_field_flag ; + BitRef virtual_flag ; + BitRef ignored_flag ; + BitRef abstract_flag ; + + BitRef in_system_header_flag ; + BitRef common_flag ; + BitRef defer_output ; + BitRef transparent_union ; + BitRef static_ctor_flag ; + BitRef static_dtor_flag ; + BitRef artificial_flag ; + BitRef weak_flag ; + + BitRef non_addr_const_p ; + BitRef no_instrument_function_entry_exit ; + BitRef comdat_flag ; + BitRef malloc_flag ; + BitRef no_limit_stack ; + TRef built_in_class ; + BitRef pure_flag; + BitRef non_addressable; + BitRef user_align; + BitRef uninlinable; + BitRef thread_local_flag ; + BitRef declared_inline_flag ; + TRef visibility ; + BitRef unused ; + /* one unused bit. */ + + BitRef lang_flag_0 ; + BitRef lang_flag_1 ; + BitRef lang_flag_2 ; + BitRef lang_flag_3 ; + BitRef lang_flag_4 ; + BitRef lang_flag_5 ; + BitRef lang_flag_6 ; + BitRef lang_flag_7 ; + + + public: + + tree_decl_u2 u2; + + tree_decl_u1 u1; + + TreeRef size_unit; + TreeRef name; + TreeRef context; + TreeRef arguments;	/* Also used for DECL_FIELD_OFFSET */ + TreeRef result;	/* Also used for DECL_BIT_FIELD_TYPE */ + TreeRef initial;	/* Also used for DECL_QUALIFIER */ + TreeRef abstract_origin; + TreeRef assembler_name; + TreeRef section_name; + TreeRef attributes; + + TRef rtl;	/* RTL representation for object. */  /* In FUNCTION_DECL, if it is inline, holds the saved insn chain. In FIELD_DECL, is DECL_FIELD_BIT_OFFSET. In PARM_DECL, holds an RTL for the stack slot of register where the data was actually passed. Used by Chill and Java in LABEL_DECL and by C++ and Java in VAR_DECL. */ - union tree_decl_u2 { -   struct function * GTY ((tag ("FUNCTION_DECL"))) f; -    rtx GTY ((tag ("PARM_DECL"))) r; -    tree GTY ((tag ("FIELD_DECL"))) t; -    int GTY ((tag ("VAR_DECL"))) i; -  } GTY ((desc ("TREE_CODE((tree) &(%0))"))) u2; + public: /* In a FUNCTION_DECL, this is DECL_SAVED_TREE. */ - tree saved_tree; + TreeRef saved_tree; /* In a FUNCTION_DECL, these are function data which is to be kept as long as FUNCTION_DECL is kept. */ - tree inlined_fns; + TreeRef inlined_fns; - tree vindex; - HOST_WIDE_INT pointer_alias_set; + TreeRef vindex; + + TRefHOST_WIDE_INT pointer_alias_set; /* Points to a structure whose details depend on the language in use. */ - struct lang_decl *lang_specific; + TRef lang_specific; }; -� + enum tree_node_structure_enum { TS_COMMON, TS_INT_CST, @@ -1769,23 +1970,27 @@   It may be any of the structures declared above for various types of node. */ -union tree_node GTY ((ptr_alias (union lang_tree_node), + + +/* + tree_node GTY ((ptr_alias (union lang_tree_node), desc ("tree_node_structure (&%h)"))) { - struct tree_common GTY ((tag ("TS_COMMON"))) common; - struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; - struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst; - struct tree_vector GTY ((tag ("TS_VECTOR"))) vector; - struct tree_string GTY ((tag ("TS_STRING"))) string; - struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex; - struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier; - struct tree_decl GTY ((tag ("TS_DECL"))) decl; - struct tree_type GTY ((tag ("TS_TYPE"))) type; - struct tree_list GTY ((tag ("TS_LIST"))) list; - struct tree_vec GTY ((tag ("TS_VEC"))) vec; - struct tree_exp GTY ((tag ("TS_EXP"))) exp; - struct tree_block GTY ((tag ("TS_BLOCK"))) block; +  tree_common GTY ((tag ("TS_COMMON"))) common; +  tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; +  tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst; +  tree_vector GTY ((tag ("TS_VECTOR"))) vector; +  tree_string GTY ((tag ("TS_STRING"))) string; +  tree_complex GTY ((tag ("TS_COMPLEX"))) complex; +  tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier; +  tree_decl GTY ((tag ("TS_DECL"))) decl; +  tree_type GTY ((tag ("TS_TYPE"))) type; +  tree_list GTY ((tag ("TS_LIST"))) list; +  tree_vec GTY ((tag ("TS_VEC"))) vec; +  tree_exp GTY ((tag ("TS_EXP"))) exp; +  tree_block GTY ((tag ("TS_BLOCK"))) block; }; +*/ � /* Standard named or nameless data types of the C compiler. */
 * 1) include "version.h"
 * 2) include "input.h"
 * 1) define DEFTREECODE(SYM, STRING, TYPE, NARGS)  SYM,
 * 1) undef DEFTREECODE
 * 1) define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
 * 1) define TREE_OPERAND_CHECK(T, I) __extension__				\
 * 1) define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__		\
 * 1) define TREE_RTL_OPERAND_CHECK(T, CODE, I) __extension__		\
 * 1) define TREE_CHECK(T, CODE)		(T)
 * 2) define TREE_CLASS_CHECK(T, CODE)	(T)
 * 1) endif
 * 1) include "tree-check.h"
 * 1) define CST_CHECK(T)		TREE_CLASS_CHECK (T, 'c')
 * 2) define STMT_CHECK(T)		TREE_CLASS_CHECK (T, 's')
 * 1) define STRIP_NOPS(EXP)						\
 * 1) define STRIP_SIGN_NOPS(EXP) \
 * 1) define STRIP_MAIN_TYPE_NOPS(EXP)					\
 * 1) define TREE_SYMBOL_REFERENCED(NODE) \
 * 1) define TREE_READONLY_DECL_P(NODE) (TREE_READONLY (NODE) && DECL_P (NODE))
 * 1) define TYPE_TRAP_SIGNED(NODE) \
 * 1) define INT_CST_LT(A, B)				\
 * 1) define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
 * 1) include "hashtable.h"
 * 1) define IDENTIFIER_HASH_VALUE(NODE) \
 * 1) define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
 * 1) define TREE_VEC_END(NODE) \
 * 1) define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
 * 1) define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND_CHECK_CODE (NODE, CONSTRUCTOR, 0)
 * 1) define LABELED_BLOCK_LABEL(NODE) \
 * 1) define EXPR_WFL_EMIT_LINE_NOTE(NODE) \
 * 1) define EXPR_WFL_NODE(NODE) \
 * 1) define EXPR_WFL_FILENAME_NODE(NODE) \
 * 1) define EXPR_WFL_FILENAME(NODE) \
 * 1) define EXPR_WFL_LINENO(NODE) (EXPR_WFL_LINECOL (NODE) >> 12)
 * 2) define EXPR_WFL_COLNO(NODE) (EXPR_WFL_LINECOL (NODE) & 0xfff)
 * 3) define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
 * 1) define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
 * 2) define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
 * 1) define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
 * 1) define BLOCK_HANDLER_BLOCK(NODE) \
 * 1) define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
 * 1) define TYPE_RETURNS_STACK_DEPRESSED(NODE) \
 * 1) define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
 * 1) define TYPE_NEEDS_CONSTRUCTING(NODE) \
 * 1) define TYPE_TRANSPARENT_UNION(NODE) \
 * 1) define TYPE_NONALIASED_COMPONENT(NODE) \
 * 1) define DECL_P(DECL)	(TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd')
 * 1) define DECL_ASSEMBLER_NAME_SET_P(NODE) \
 * 1) define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
 * 1) define DECL_SOURCE_FILE(NODE) (DECL_SOURCE_LOCATION (NODE).file)
 * 2) define DECL_SOURCE_LINE(NODE) (DECL_SOURCE_LOCATION (NODE).line)
 * 1) define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
 * 1) define DECL_OFFSET_ALIGN(NODE) \
 * 1) define SET_DECL_OFFSET_ALIGN(NODE, X) \
 * 1) define DECL_RTL(NODE)					\
 * 1) define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
 * 1) define COPY_DECL_RTL(NODE1, NODE2) \
 * 1) define DECL_IN_SYSTEM_HEADER(NODE) \
 * 1) define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
 * 1) define DECL_NO_STATIC_CHAIN(NODE) \
 * 1) define DECL_DECLARED_INLINE_P(NODE) \
 * 1) define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
 * 1) define DECL_BUILT_IN_CLASS(NODE) \
 * 1) define DECL_TRANSPARENT_UNION(NODE) \
 * 1) define DECL_STATIC_CONSTRUCTOR(NODE) \
 * 1) define DECL_STATIC_DESTRUCTOR(NODE) \
 * 1) define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
 * 1) define DECL_NO_LIMIT_STACK(NODE) \
 * 1) define DECL_NONADDRESSABLE_P(NODE) \
 * 1) define DECL_POINTER_ALIAS_SET(NODE) \
 * 1) define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \

Common subdirectories: ./treelang and /home/new_version/gcc-3.4.4-3/gcc/treelang diff -d -u ./varray.h /home/new_version/gcc-3.4.4-3/gcc/varray.h --- ./varray.h	2004-01-30 05:55:33.000000000 -0500 +++ /home/new_version/gcc-3.4.4-3/gcc/varray.h	2007-12-27 06:34:20.687500000 -0500 @@ -50,7 +50,7 @@     pseudos that contain pointers into the replacement area allocated for this inline instance. These pseudos are then marked as being equivalent to the appropriate address and substituted if valid. */ - rtx rtx; + rtx m_rtx; /* Record the valid age for each entry. The entry is invalid if its age is less than const_age. */ @@ -85,7 +85,10 @@ }; /* Union of various array types that are used. */ -typedef union varray_data_tag GTY () { +class varray_data { + public: + varray_data; +  char			  GTY ((length ("%0.num_elements"), tag ("VARRAY_DATA_C")))		c[1]; unsigned char		 GTY ((length ("%0.num_elements"), @@ -111,11 +114,11 @@  char			 *GTY ((length ("%0.num_elements"), tag ("VARRAY_DATA_CPTR")))	cptr[1]; rtx			 GTY ((length ("%0.num_elements"), -				tag ("VARRAY_DATA_RTX")))	rtx[1]; +				tag ("VARRAY_DATA_RTX")))	m_rtx[1]; rtvec			 GTY ((length ("%0.num_elements"), -				tag ("VARRAY_DATA_RTVEC")))	rtvec[1]; +				tag ("VARRAY_DATA_RTVEC")))	m_rtvec[1]; tree			 GTY ((length ("%0.num_elements"), -				tag ("VARRAY_DATA_TREE")))	tree[1]; +				tag ("VARRAY_DATA_TREE")))	m_tree[1]; struct bitmap_head_def *GTY ((length ("%0.num_elements"), tag ("VARRAY_DATA_BITMAP")))	bitmap[1]; struct reg_info_def	 *GTY ((length ("%0.num_elements"), skip (""), @@ -126,7 +129,7 @@ 				tag ("VARRAY_DATA_BB")))	bb[1]; struct elt_list	 *GTY ((length ("%0.num_elements"), tag ("VARRAY_DATA_TE")))	te[1]; -} varray_data; +}; /* Virtual array of pointers header. */ struct varray_head_tag GTY() {