1 diff -cr gcc-orig/cgraph.c gcc/cgraph.c
2 *** gcc-orig/cgraph.c Mon Oct 31 16:07:29 2005
3 --- gcc/cgraph.c Tue Jan 23 19:39:14 2007
7 cgraph_node (tree decl)
9 struct cgraph_node key, *node, **slot;
12 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
16 node = cgraph_create_node ();
19 ! if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
21 ! node->origin = cgraph_node (DECL_CONTEXT (decl));
22 ! node->next_nested = node->origin->nested;
23 ! node->origin->nested = node;
24 ! node->master_clone = node;
29 node = cgraph_create_node ();
32 ! if (!DECL_NO_STATIC_CHAIN (decl))
34 ! context = decl_function_context (decl);
37 ! node->origin = cgraph_node (context);
38 ! node->next_nested = node->origin->nested;
39 ! node->origin->nested = node;
40 ! node->master_clone = node;
45 diff -cr gcc-orig/config/arm.c gcc/config/arm.c
46 *** gcc-orig/config/arm/arm.c Mon Oct 16 21:04:38 2006
47 --- gcc/config/arm/arm.c Sun Sep 30 21:58:58 2007
51 /* Move from sp to reg. */
52 asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0));
54 + else if (GET_CODE (e1) == PLUS
55 + && GET_CODE (XEXP (e1, 0)) == REG
56 + && REGNO (XEXP (e1, 0)) == SP_REGNUM
57 + && GET_CODE (XEXP (e1, 1)) == CONST_INT)
59 + /* Set reg to offset from sp. */
60 + asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
61 + REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
66 diff -cr gcc-orig/config/darwin.h gcc/config/darwin.h
67 *** gcc-orig/config/darwin.h Mon Nov 14 23:55:12 2005
68 --- gcc/config/darwin.h Tue Jan 23 19:39:14 2007
72 #define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC)
73 #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
74 ! #define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P)
75 ! #define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P)
77 #undef TARGET_ENCODE_SECTION_INFO
78 #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
81 #define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC)
82 #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
83 ! #define MACHOPIC_JUST_INDIRECT (MACHO_DYNAMIC_NO_PIC_P)
84 ! #define MACHOPIC_PURE (flag_pic && ! MACHO_DYNAMIC_NO_PIC_P)
86 #undef TARGET_ENCODE_SECTION_INFO
87 #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
88 Only in gcc/config: darwin.h.orig
89 diff -cr gcc-orig/config/i386/i386.c gcc/config/i386/i386.c
90 *** gcc-orig/config/i386/i386.c Tue May 16 21:11:59 2006
91 --- gcc/config/i386/i386.c Tue Jan 23 19:39:14 2007
95 frame->red_zone_size = 0;
96 frame->to_allocate -= frame->red_zone_size;
97 frame->stack_pointer_offset -= frame->red_zone_size;
100 + /* As above, skip return address */
101 + frame->stack_pointer_offset = UNITS_PER_WORD;
104 fprintf (stderr, "nregs: %i\n", frame->nregs);
105 fprintf (stderr, "size: %i\n", size);
108 output_set_got (tmp);
111 ! output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
112 output_asm_insn ("jmp\t{*}%1", xops);
116 output_set_got (tmp);
119 ! output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
120 output_asm_insn ("jmp\t{*}%1", xops);
123 diff -cr gcc-orig/config/rs6000/rs6000.c gcc/config/rs6000/rs6000.c
124 *** gcc-orig/config/rs6000/rs6000.c Thu Apr 13 01:46:01 2006
125 --- gcc/config/rs6000/rs6000.c Tue Jan 23 19:39:14 2007
129 C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
130 Java is 13. Objective-C is 14. */
131 ! if (! strcmp (language_string, "GNU C"))
133 else if (! strcmp (language_string, "GNU F77")
134 || ! strcmp (language_string, "GNU F95"))
137 C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
138 Java is 13. Objective-C is 14. */
139 ! if (! strcmp (language_string, "GNU C") ||
140 ! ! strcmp (language_string, "GNU D"))
142 else if (! strcmp (language_string, "GNU F77")
143 || ! strcmp (language_string, "GNU F95"))
145 diff -cr gcc-orig/dwarf2.h gcc/dwarf2.h
146 *** gcc-orig/dwarf2.h Fri Jun 24 22:02:01 2005
147 --- gcc/dwarf2.h Tue Jan 23 19:39:14 2007
151 DW_LANG_C99 = 0x000c,
152 DW_LANG_Ada95 = 0x000d,
153 DW_LANG_Fortran95 = 0x000e,
154 + DW_LANG_D = 0x0013,
156 DW_LANG_Mips_Assembler = 0x8001,
158 diff -cr gcc-orig/dwarf2out.c gcc/dwarf2out.c
159 *** gcc-orig/dwarf2out.c Mon Apr 10 09:21:13 2006
160 --- gcc/dwarf2out.c Tue Jan 23 19:39:14 2007
163 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
165 return (lang == DW_LANG_C || lang == DW_LANG_C89
166 ! || lang == DW_LANG_C_plus_plus);
169 /* Return TRUE if the language is C++. */
171 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
173 return (lang == DW_LANG_C || lang == DW_LANG_C89
174 ! || lang == DW_LANG_C_plus_plus
175 ! || lang == DW_LANG_D);
178 /* Return TRUE if the language is C++. */
182 language = DW_LANG_Pascal83;
183 else if (strcmp (language_string, "GNU Java") == 0)
184 language = DW_LANG_Java;
185 + else if (strcmp (language_string, "GNU D") == 0)
186 + language = DW_LANG_D;
188 language = DW_LANG_C89;
193 /* For local statics lookup proper context die. */
194 if (TREE_STATIC (decl) && decl_function_context (decl))
195 ! context_die = lookup_decl_die (DECL_CONTEXT (decl));
197 /* If we are in terse mode, don't generate any DIEs to represent any
198 variable declarations or definitions. */
201 /* For local statics lookup proper context die. */
202 if (TREE_STATIC (decl) && decl_function_context (decl))
203 ! context_die = lookup_decl_die (decl_function_context (decl));
205 /* If we are in terse mode, don't generate any DIEs to represent any
206 variable declarations or definitions. */
207 diff -cr gcc-orig/expr.c gcc/expr.c
208 *** gcc-orig/expr.c Wed May 17 12:03:25 2006
209 --- gcc/expr.c Tue Jan 23 19:39:14 2007
213 /* Lowered by gimplify.c. */
216 + case STATIC_CHAIN_EXPR:
217 + case STATIC_CHAIN_DECL:
218 + /* Lowered by tree-nested.c */
219 + gcc_unreachable ();
222 return get_exception_pointer (cfun);
224 diff -cr gcc-orig/function.c gcc/function.c
225 *** gcc-orig/function.c Wed Jan 4 04:13:56 2006
226 --- gcc/function.c Tue Jan 23 19:39:14 2007
229 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
230 data.passed_type, data.named_arg);
232 ! assign_parm_adjust_stack_rtl (&data);
234 if (assign_parm_setup_block_p (&data))
235 assign_parm_setup_block (&all, parm, &data);
237 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
238 data.passed_type, data.named_arg);
241 ! assign_parm_adjust_stack_rtl (&data);
243 if (assign_parm_setup_block_p (&data))
244 assign_parm_setup_block (&all, parm, &data);
248 /* Output all parameter conversion instructions (possibly including calls)
249 now that all parameters have been copied out of hard registers. */
250 ! emit_insn (all.conversion_insns);
252 /* If we are receiving a struct value address as the first argument, set up
253 the RTL for the function result. As this might require code to convert
256 /* Output all parameter conversion instructions (possibly including calls)
257 now that all parameters have been copied out of hard registers. */
259 ! emit_insn (all.conversion_insns);
261 /* If we are receiving a struct value address as the first argument, set up
262 the RTL for the function result. As this might require code to convert
266 struct assign_parm_data_all all;
267 tree fnargs, parm, stmts = NULL;
272 assign_parms_initialize_all (&all);
273 fnargs = assign_parms_augmented_arg_list (&all);
277 tree parm = cfun->static_chain_decl;
278 rtx local = gen_reg_rtx (Pmode);
280 - set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
281 SET_DECL_RTL (parm, local);
282 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
284 ! emit_move_insn (local, static_chain_incoming_rtx);
287 /* If the function receives a non-local goto, then store the
289 tree parm = cfun->static_chain_decl;
290 rtx local = gen_reg_rtx (Pmode);
292 SET_DECL_RTL (parm, local);
293 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
295 ! if (! cfun->custom_static_chain)
297 ! set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
298 ! emit_move_insn (local, static_chain_incoming_rtx);
300 ! /* else, the static chain will be set in the main body */
303 /* If the function receives a non-local goto, then store the
316 diff -cr gcc-orig/function.h gcc/function.h
317 *** gcc-orig/function.h Fri Aug 19 17:16:20 2005
318 --- gcc/function.h Tue Jan 23 19:39:14 2007
322 /* Number of units of floating point registers that need saving in stdarg
324 unsigned int va_list_fpr_size : 8;
326 + /* Nonzero if static chain is initialized by something other than
327 + static_chain_incoming_rtx. */
328 + unsigned int custom_static_chain : 1;
330 + /* Nonzero if no code should be generated for prologues, copying
331 + parameters, etc. */
332 + unsigned int naked : 1;
335 /* If va_list_[gf]pr_size is set to this, it means we don't know how
336 diff -cr gcc-orig/gcc.c gcc/gcc.c
337 *** gcc-orig/gcc.c Wed May 17 14:38:58 2006
338 --- gcc/gcc.c Thu Mar 1 10:42:36 2007
342 /* Flag set by cppspec.c to 1. */
345 + /* Flag set by drivers needing Pthreads. */
348 /* Flag saying to pass the greatest exit code returned by a sub-process
349 to the calling program. */
350 static int pass_exit_codes;
354 assembler has done its job.
355 %D Dump out a -L option for each directory in startfile_prefixes.
356 If multilib_dir is set, extra entries are generated with it affixed.
357 + %N Output the currently selected multilib directory name.
358 %l process LINK_SPEC as a spec.
359 %L process LIB_SPEC as a spec.
360 %G process LIBGCC_SPEC as a spec.
367 + #define GCC_SPEC_FORMAT_4 1
369 /* Record the mapping from file suffixes for compilation specs. */
381 if (save_temps_flag && use_pipes)
383 /* -save-temps overrides -pipe, so that temp files are produced */
392 + switches[n_switches].part1 = "pthread";
393 + switches[n_switches].args = 0;
394 + switches[n_switches].live_cond = SWITCH_OK;
395 + /* Do not print an error if there is not expansion for -pthread. */
396 + switches[n_switches].validated = 1;
397 + switches[n_switches].ordering = 0;
402 switches[n_switches].part1 = 0;
403 infiles[n_infiles].name = 0;
415 + obstack_grow (&obstack, "-fmultilib-dir=",
416 + strlen ("-fmultilib-dir="));
417 + obstack_grow (&obstack, multilib_dir,
418 + strlen (multilib_dir));
422 /* Here we define characters other than letters and digits. */
425 diff -cr gcc-orig/gcc.c gcc/gcc.h
426 *** gcc-orig/gcc.h Fri Jun 24 22:02:01 2005
427 --- gcc/gcc.h Sun Mar 4 13:44:05 2007
430 || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
431 || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
432 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
433 ! || (CHAR) == 'B' || (CHAR) == 'b')
435 /* This defines which multi-letter switches take arguments. */
438 || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
439 || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
440 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
441 ! || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'J')
443 /* This defines which multi-letter switches take arguments. */
445 diff -cr gcc-orig/gimplify.c gcc/gimplify.c
446 *** gcc-orig/gimplify.c Wed Apr 5 09:41:27 2006
447 --- gcc/gimplify.c Tue Jan 23 19:39:14 2007
454 + case STATIC_CHAIN_EXPR:
455 + /* The argument is used as information only. No need to gimplify */
456 + case STATIC_CHAIN_DECL:
463 diff -cr gcc-orig/predict.c gcc/predict.c
464 *** gcc-orig/predict.c Thu Jul 19 20:05:21 2007
465 --- gcc/predict.c Thu Jul 19 20:06:06 2007
469 care for error returns and other cases are often used for
470 fast paths trought function. */
471 if (e->dest == EXIT_BLOCK_PTR
472 + && last_stmt (bb) == NULL_TREE
473 && TREE_CODE (last_stmt (bb)) == RETURN_EXPR
474 && !single_pred_p (bb))
476 diff -cr gcc-orig/real.c gcc/real.c
477 *** gcc-orig/real.c Mon Sep 19 13:01:40 2005
478 --- gcc/real.c Tue Jan 23 19:39:14 2007
482 np2 = SIGNIFICAND_BITS - fmt->p * fmt->log2_b;
483 memset (r->sig, -1, SIGSZ * sizeof (unsigned long));
484 clear_significand_below (r, np2);
485 + if (REAL_MODE_FORMAT_COMPOSITE_P (mode))
486 + clear_significand_bit (r, SIGNIFICAND_BITS - fmt->pnan - 1);
489 /* Fills R with 2**N. */
490 diff -cr gcc-orig/tree-dump.c gcc/tree-dump.c
491 *** gcc-orig/tree-dump.c Sat Aug 20 12:03:58 2005
492 --- gcc/tree-dump.c Tue Jan 23 19:39:14 2007
496 dump_child ("args", TREE_OPERAND (t, 1));
499 + case STATIC_CHAIN_EXPR:
500 + dump_child ("func", TREE_OPERAND (t, 0));
505 unsigned HOST_WIDE_INT cnt;
506 diff -cr gcc-orig/tree-gimple.c gcc/tree-gimple.c
507 *** gcc-orig/tree-gimple.c Sun Nov 20 14:05:43 2005
508 --- gcc/tree-gimple.c Tue Jan 23 19:39:14 2007
515 + case STATIC_CHAIN_EXPR: /* not sure if this is right...*/
516 + case STATIC_CHAIN_DECL:
522 || TREE_CODE (t) == WITH_SIZE_EXPR
523 /* These are complex lvalues, but don't have addresses, so they
525 ! || TREE_CODE (t) == BIT_FIELD_REF);
528 /* Return true if T is a GIMPLE condition. */
530 || TREE_CODE (t) == WITH_SIZE_EXPR
531 /* These are complex lvalues, but don't have addresses, so they
533 ! || TREE_CODE (t) == BIT_FIELD_REF
534 ! /* This is an lvalue because it will be replaced with the real
535 ! static chain decl. */
536 ! || TREE_CODE (t) == STATIC_CHAIN_DECL);
539 /* Return true if T is a GIMPLE condition. */
540 diff -cr gcc-orig/tree-inline.c gcc/tree-inline.c
541 *** gcc-orig/tree-inline.c Fri Apr 28 07:43:43 2006
542 --- gcc/tree-inline.c Tue Jan 23 19:39:14 2007
545 knows not to copy VAR_DECLs, etc., so this is safe. */
548 /* Here we handle trees that are not completely rewritten.
549 First we detect some inlining-induced bogosities for
551 ! if (TREE_CODE (*tp) == MODIFY_EXPR
552 && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
553 && (lang_hooks.tree_inlining.auto_var_in_fn_p
554 (TREE_OPERAND (*tp, 0), fn)))
556 knows not to copy VAR_DECLs, etc., so this is safe. */
559 + if (! id->cloning_p && ! id->saving_p &&
560 + TREE_CODE (*tp) == MODIFY_EXPR &&
561 + TREE_OPERAND (*tp, 0) ==
562 + DECL_STRUCT_FUNCTION (fn)->static_chain_decl)
564 + /* Don't use special methods to initialize the static chain
565 + if expanding inline. If this code could somehow be
566 + expanded in expand_start_function, it would not be
567 + necessary to deal with it here. */
568 + *tp = build_empty_stmt ();
570 /* Here we handle trees that are not completely rewritten.
571 First we detect some inlining-induced bogosities for
573 ! else if (TREE_CODE (*tp) == MODIFY_EXPR
574 && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
575 && (lang_hooks.tree_inlining.auto_var_in_fn_p
576 (TREE_OPERAND (*tp, 0), fn)))
577 diff -cr gcc-orig/tree-nested.c gcc/tree-nested.c
578 *** gcc-orig/tree-nested.c Mon Oct 3 16:57:45 2005
579 --- gcc/tree-nested.c Tue Jan 23 19:39:14 2007
586 + enum tree_code code;
588 type = get_frame_type (info->outer);
589 type = build_pointer_type (type);
592 Note also that it's represented as a parameter. This is more
593 close to the truth, since the initial value does come from
595 ! decl = build_decl (PARM_DECL, create_tmp_var_name ("CHAIN"), type);
596 DECL_ARTIFICIAL (decl) = 1;
597 DECL_IGNORED_P (decl) = 1;
598 TREE_USED (decl) = 1;
599 DECL_CONTEXT (decl) = info->context;
600 ! DECL_ARG_TYPE (decl) = type;
602 /* Tell tree-inline.c that we never write to this variable, so
603 it can copy-prop the replacement value immediately. */
605 Note also that it's represented as a parameter. This is more
606 close to the truth, since the initial value does come from
608 ! /* If the function has a custom static chain, a VAR_DECL is more
610 ! code = DECL_STRUCT_FUNCTION (info->context)->custom_static_chain ?
611 ! VAR_DECL : PARM_DECL;
612 ! decl = build_decl (code, create_tmp_var_name ("CHAIN"), type);
613 DECL_ARTIFICIAL (decl) = 1;
614 DECL_IGNORED_P (decl) = 1;
615 TREE_USED (decl) = 1;
616 DECL_CONTEXT (decl) = info->context;
617 ! if (TREE_CODE (decl) == PARM_DECL)
618 ! DECL_ARG_TYPE (decl) = type;
620 /* Tell tree-inline.c that we never write to this variable, so
621 it can copy-prop the replacement value immediately. */
626 if (info->context == target_context)
628 + /* might be doing something wrong to need the following line.. */
629 + get_frame_type (info);
630 x = build_addr (info->frame_decl, target_context);
636 if (DECL_NO_STATIC_CHAIN (decl))
639 + /* Don't use a trampoline for a static reference. */
640 + if (TREE_STATIC (t))
643 /* Lookup the immediate parent of the callee, as that's where
644 we need to insert the trampoline. */
645 for (i = info; i->context != target_context; i = i->outer)
649 = get_static_chain (info, target_context, &wi->tsi);
652 + case STATIC_CHAIN_EXPR:
653 + *tp = get_static_chain (info, TREE_OPERAND (t, 0), &wi->tsi);
656 + case STATIC_CHAIN_DECL:
657 + *tp = get_chain_decl (info);
665 tree x = build (COMPONENT_REF, TREE_TYPE (root->chain_field),
666 root->frame_decl, root->chain_field, NULL_TREE);
667 x = build (MODIFY_EXPR, TREE_TYPE (x), x, get_chain_decl (root));
668 ! append_to_statement_list (x, &stmt_list);
671 /* If trampolines were created, then we need to initialize them. */
673 tree x = build (COMPONENT_REF, TREE_TYPE (root->chain_field),
674 root->frame_decl, root->chain_field, NULL_TREE);
675 x = build (MODIFY_EXPR, TREE_TYPE (x), x, get_chain_decl (root));
676 ! /* If the function has a custom static chain, chain_field must
677 ! be set after the static chain. */
678 ! if (DECL_STRUCT_FUNCTION (root->context)->custom_static_chain)
680 ! /* Should use walk_function instead. */
681 ! tree_stmt_iterator i =
682 ! tsi_start ( BIND_EXPR_BODY (DECL_SAVED_TREE (context)));
683 ! while (!tsi_end_p (i))
685 ! tree t = tsi_stmt (i);
686 ! if (TREE_CODE (t) == MODIFY_EXPR &&
687 ! TREE_OPERAND (t, 0) == root->chain_decl)
689 ! tsi_link_after(& i, x, TSI_SAME_STMT);
695 ! gcc_assert(x == NULL_TREE);
698 ! append_to_statement_list (x, &stmt_list);
701 /* If trampolines were created, then we need to initialize them. */
702 diff -cr gcc-orig/tree-pretty-print.c gcc/tree-pretty-print.c
703 *** gcc-orig/tree-pretty-print.c Sun Jul 31 16:55:41 2005
704 --- gcc/tree-pretty-print.c Tue Jan 23 19:39:14 2007
708 pp_string (buffer, " [tail call]");
711 + case STATIC_CHAIN_EXPR:
712 + pp_string (buffer, "<<static chain of ");
713 + dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
714 + pp_string (buffer, ">>");
717 + case STATIC_CHAIN_DECL:
718 + pp_string (buffer, "<<static chain decl>>");
721 case WITH_CLEANUP_EXPR:
724 diff -cr gcc-orig/tree-sra.c gcc/tree-sra.c
725 *** gcc-orig/tree-sra.c Sun Nov 20 19:55:57 2005
726 --- gcc/tree-sra.c Sun Jul 22 11:32:36 2007
732 bool saw_one_field = false;
733 + tree last_offset = size_zero_node;
736 for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
737 if (TREE_CODE (t) == FIELD_DECL)
741 && (tree_low_cst (DECL_SIZE (t), 1)
742 != TYPE_PRECISION (TREE_TYPE (t))))
744 + /* Reject aliased fields created by GDC for anonymous unions. */
745 + cmp = fold_binary_to_constant (LE_EXPR, boolean_type_node,
746 + DECL_FIELD_OFFSET (t), last_offset);
747 + if (cmp == NULL_TREE || tree_expr_nonzero_p (cmp))
750 saw_one_field = true;
752 diff -cr gcc-orig/tree.def gcc/tree.def
753 *** gcc-orig/tree.def Fri Feb 10 12:32:10 2006
754 --- gcc/tree.def Tue Jan 23 19:39:14 2007
758 Operand 2 is the static chain argument, or NULL. */
759 DEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3)
761 + /* Operand 0 is the FUNC_DECL of the outer function for
762 + which the static chain is to be computed. */
763 + DEFTREECODE (STATIC_CHAIN_EXPR, "static_chain_expr", tcc_expression, 1)
765 + /* Represents a function's static chain. It can be used as an lvalue. */
766 + DEFTREECODE (STATIC_CHAIN_DECL, "static_chain_decl", tcc_expression, 0)
768 /* Specify a value to compute along with its corresponding cleanup.
769 Operand 0 is the cleanup expression.
770 The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
771 diff -cr gcc-orig/varray.h gcc/varray.h
772 *** gcc-orig/varray.h Fri Jun 24 22:02:01 2005
773 --- gcc/varray.h Tue Jan 23 19:39:14 2007
780 + #ifndef __cplusplus
781 + # define VARRAY_STRANGE_1 rtx
782 + # define VARRAY_STRANGE_2 rtvec
783 + # define VARRAY_STRANGE_3 tree
785 + # define VARRAY_STRANGE_1 rtx_
786 + # define VARRAY_STRANGE_2 rtvec_
787 + # define VARRAY_STRANGE_3 tree_
791 /* Union of various array types that are used. */
792 typedef union varray_data_tag GTY (()) {
793 char GTY ((length ("%0.num_elements"),
796 char *GTY ((length ("%0.num_elements"),
797 tag ("VARRAY_DATA_CPTR"))) cptr[1];
798 rtx GTY ((length ("%0.num_elements"),
799 ! tag ("VARRAY_DATA_RTX"))) rtx[1];
800 rtvec GTY ((length ("%0.num_elements"),
801 ! tag ("VARRAY_DATA_RTVEC"))) rtvec[1];
802 tree GTY ((length ("%0.num_elements"),
803 ! tag ("VARRAY_DATA_TREE"))) tree[1];
804 struct bitmap_head_def *GTY ((length ("%0.num_elements"),
805 tag ("VARRAY_DATA_BITMAP"))) bitmap[1];
806 struct reg_info_def *GTY ((length ("%0.num_elements"), skip,
808 char *GTY ((length ("%0.num_elements"),
809 tag ("VARRAY_DATA_CPTR"))) cptr[1];
810 rtx GTY ((length ("%0.num_elements"),
811 ! tag ("VARRAY_DATA_RTX"))) VARRAY_STRANGE_1[1];
812 rtvec GTY ((length ("%0.num_elements"),
813 ! tag ("VARRAY_DATA_RTVEC"))) VARRAY_STRANGE_2[1];
814 tree GTY ((length ("%0.num_elements"),
815 ! tag ("VARRAY_DATA_TREE"))) VARRAY_STRANGE_3[1];
816 struct bitmap_head_def *GTY ((length ("%0.num_elements"),
817 tag ("VARRAY_DATA_BITMAP"))) bitmap[1];
818 struct reg_info_def *GTY ((length ("%0.num_elements"), skip,