emit-rtl.c (copy_most_rtx): Accept EXPR_LIST for may_share.
* emit-rtl.c (copy_most_rtx): Accept EXPR_LIST for may_share. * function.c (fixup_var_refs): Add MAY_SHARE parameter. (fixup_var_refs_insns, fixup_var_refs_insns_with_has): Likewise. (fixup_var_refs_insn, fixup_var_refs_1): Likewise. (pop_function_context): Compute MAY_SHARE parameter for fixup_var_refs. (fixup_var_refs_1, case MEM): Pass MAY_SHARE to copy_most_rtx, not VAR. (gen_mem_addressof): Call fixup_var_refs with new parm. From-SVN: r50493
This commit is contained in:
parent
0a7ec76355
commit
93fe8e9229
|
@ -1,5 +1,14 @@
|
||||||
Sat Mar 9 07:20:01 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
Sat Mar 9 07:20:01 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||||
|
|
||||||
|
* emit-rtl.c (copy_most_rtx): Accept EXPR_LIST for may_share.
|
||||||
|
* function.c (fixup_var_refs): Add MAY_SHARE parameter.
|
||||||
|
(fixup_var_refs_insns, fixup_var_refs_insns_with_has): Likewise.
|
||||||
|
(fixup_var_refs_insn, fixup_var_refs_1): Likewise.
|
||||||
|
(pop_function_context): Compute MAY_SHARE parameter for
|
||||||
|
fixup_var_refs.
|
||||||
|
(fixup_var_refs_1, case MEM): Pass MAY_SHARE to copy_most_rtx, not VAR.
|
||||||
|
(gen_mem_addressof): Call fixup_var_refs with new parm.
|
||||||
|
|
||||||
* combine.c (make_extraction): Don't make extension of CONST_INT.
|
* combine.c (make_extraction): Don't make extension of CONST_INT.
|
||||||
|
|
||||||
2002-03-09 Alexandre Oliva <aoliva@redhat.com>
|
2002-03-09 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
|
@ -2239,7 +2239,8 @@ reset_used_decls (blk)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Similar to `copy_rtx' except that if MAY_SHARE is present, it is
|
/* Similar to `copy_rtx' except that if MAY_SHARE is present, it is
|
||||||
placed in the result directly, rather than being copied. */
|
placed in the result directly, rather than being copied. MAY_SHARE is
|
||||||
|
either a MEM of an EXPR_LIST of MEMs. */
|
||||||
|
|
||||||
rtx
|
rtx
|
||||||
copy_most_rtx (orig, may_share)
|
copy_most_rtx (orig, may_share)
|
||||||
|
@ -2251,7 +2252,9 @@ copy_most_rtx (orig, may_share)
|
||||||
RTX_CODE code;
|
RTX_CODE code;
|
||||||
const char *format_ptr;
|
const char *format_ptr;
|
||||||
|
|
||||||
if (orig == may_share)
|
if (orig == may_share
|
||||||
|
|| (GET_CODE (may_share) == EXPR_LIST
|
||||||
|
&& in_expr_list_p (may_share, orig)))
|
||||||
return orig;
|
return orig;
|
||||||
|
|
||||||
code = GET_CODE (orig);
|
code = GET_CODE (orig);
|
||||||
|
|
120
gcc/function.c
120
gcc/function.c
|
@ -239,19 +239,19 @@ static void put_reg_into_stack PARAMS ((struct function *, rtx, tree,
|
||||||
static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree,
|
static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree,
|
||||||
enum machine_mode,
|
enum machine_mode,
|
||||||
struct hash_table *));
|
struct hash_table *));
|
||||||
static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int,
|
static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int, rtx,
|
||||||
struct hash_table *));
|
struct hash_table *));
|
||||||
static struct fixup_replacement
|
static struct fixup_replacement
|
||||||
*find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx));
|
*find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx));
|
||||||
static void fixup_var_refs_insns PARAMS ((rtx, rtx, enum machine_mode,
|
static void fixup_var_refs_insns PARAMS ((rtx, rtx, enum machine_mode,
|
||||||
int, int));
|
int, int, rtx));
|
||||||
static void fixup_var_refs_insns_with_hash
|
static void fixup_var_refs_insns_with_hash
|
||||||
PARAMS ((struct hash_table *, rtx,
|
PARAMS ((struct hash_table *, rtx,
|
||||||
enum machine_mode, int));
|
enum machine_mode, int, rtx));
|
||||||
static void fixup_var_refs_insn PARAMS ((rtx, rtx, enum machine_mode,
|
static void fixup_var_refs_insn PARAMS ((rtx, rtx, enum machine_mode,
|
||||||
int, int));
|
int, int, rtx));
|
||||||
static void fixup_var_refs_1 PARAMS ((rtx, enum machine_mode, rtx *, rtx,
|
static void fixup_var_refs_1 PARAMS ((rtx, enum machine_mode, rtx *, rtx,
|
||||||
struct fixup_replacement **));
|
struct fixup_replacement **, rtx));
|
||||||
static rtx fixup_memory_subreg PARAMS ((rtx, rtx, int));
|
static rtx fixup_memory_subreg PARAMS ((rtx, rtx, int));
|
||||||
static rtx walk_fixup_memory_subreg PARAMS ((rtx, rtx, int));
|
static rtx walk_fixup_memory_subreg PARAMS ((rtx, rtx, int));
|
||||||
static rtx fixup_stack_1 PARAMS ((rtx, rtx));
|
static rtx fixup_stack_1 PARAMS ((rtx, rtx));
|
||||||
|
@ -389,11 +389,29 @@ pop_function_context_from (context)
|
||||||
if (restore_lang_status)
|
if (restore_lang_status)
|
||||||
(*restore_lang_status) (p);
|
(*restore_lang_status) (p);
|
||||||
|
|
||||||
/* Finish doing put_var_into_stack for any of our variables
|
/* Finish doing put_var_into_stack for any of our variables which became
|
||||||
which became addressable during the nested function. */
|
addressable during the nested function. If only one entry has to be
|
||||||
for (queue = p->fixup_var_refs_queue; queue; queue = queue->next)
|
fixed up, just do that one. Otherwise, first make a list of MEMs that
|
||||||
fixup_var_refs (queue->modified, queue->promoted_mode,
|
are not to be unshared. */
|
||||||
queue->unsignedp, 0);
|
if (p->fixup_var_refs_queue == 0)
|
||||||
|
;
|
||||||
|
else if (p->fixup_var_refs_queue->next == 0)
|
||||||
|
fixup_var_refs (p->fixup_var_refs_queue->modified,
|
||||||
|
p->fixup_var_refs_queue->promoted_mode,
|
||||||
|
p->fixup_var_refs_queue->unsignedp,
|
||||||
|
p->fixup_var_refs_queue->modified, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rtx list = 0;
|
||||||
|
|
||||||
|
for (queue = p->fixup_var_refs_queue; queue; queue = queue->next)
|
||||||
|
list = gen_rtx_EXPR_LIST (VOIDmode, queue->modified, list);
|
||||||
|
|
||||||
|
for (queue = p->fixup_var_refs_queue; queue; queue = queue->next)
|
||||||
|
fixup_var_refs (queue->modified, queue->promoted_mode,
|
||||||
|
queue->unsignedp, list, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
p->fixup_var_refs_queue = 0;
|
p->fixup_var_refs_queue = 0;
|
||||||
|
|
||||||
|
@ -1525,15 +1543,16 @@ schedule_fixup_var_refs (function, reg, type, promoted_mode, ht)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Variable is local; fix it up now. */
|
/* Variable is local; fix it up now. */
|
||||||
fixup_var_refs (reg, promoted_mode, unsigned_p, ht);
|
fixup_var_refs (reg, promoted_mode, unsigned_p, reg, ht);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixup_var_refs (var, promoted_mode, unsignedp, ht)
|
fixup_var_refs (var, promoted_mode, unsignedp, may_share, ht)
|
||||||
rtx var;
|
rtx var;
|
||||||
enum machine_mode promoted_mode;
|
enum machine_mode promoted_mode;
|
||||||
int unsignedp;
|
int unsignedp;
|
||||||
struct hash_table *ht;
|
struct hash_table *ht;
|
||||||
|
rtx may_share;
|
||||||
{
|
{
|
||||||
tree pending;
|
tree pending;
|
||||||
rtx first_insn = get_insns ();
|
rtx first_insn = get_insns ();
|
||||||
|
@ -1545,19 +1564,20 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht)
|
||||||
{
|
{
|
||||||
if (stack != 0)
|
if (stack != 0)
|
||||||
abort ();
|
abort ();
|
||||||
fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp);
|
fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp,
|
||||||
|
may_share);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixup_var_refs_insns (first_insn, var, promoted_mode, unsignedp,
|
fixup_var_refs_insns (first_insn, var, promoted_mode, unsignedp,
|
||||||
stack == 0);
|
stack == 0, may_share);
|
||||||
|
|
||||||
/* Scan all pending sequences too. */
|
/* Scan all pending sequences too. */
|
||||||
for (; stack; stack = stack->next)
|
for (; stack; stack = stack->next)
|
||||||
{
|
{
|
||||||
push_to_full_sequence (stack->first, stack->last);
|
push_to_full_sequence (stack->first, stack->last);
|
||||||
fixup_var_refs_insns (stack->first, var, promoted_mode, unsignedp,
|
fixup_var_refs_insns (stack->first, var, promoted_mode, unsignedp,
|
||||||
stack->next != 0);
|
stack->next != 0, may_share);
|
||||||
/* Update remembered end of sequence
|
/* Update remembered end of sequence
|
||||||
in case we added an insn at the end. */
|
in case we added an insn at the end. */
|
||||||
stack->last = get_last_insn ();
|
stack->last = get_last_insn ();
|
||||||
|
@ -1571,7 +1591,8 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht)
|
||||||
if (seq != const0_rtx && seq != 0)
|
if (seq != const0_rtx && seq != 0)
|
||||||
{
|
{
|
||||||
push_to_sequence (seq);
|
push_to_sequence (seq);
|
||||||
fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0);
|
fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0,
|
||||||
|
may_share);
|
||||||
end_sequence ();
|
end_sequence ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1604,17 +1625,19 @@ find_fixup_replacement (replacements, x)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scan the insn-chain starting with INSN for refs to VAR
|
/* Scan the insn-chain starting with INSN for refs to VAR and fix them
|
||||||
and fix them up. TOPLEVEL is nonzero if this chain is the
|
up. TOPLEVEL is nonzero if this chain is the main chain of insns
|
||||||
main chain of insns for the current function. */
|
for the current function. MAY_SHARE is either a MEM that is not
|
||||||
|
to be unshared or a list of them. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel)
|
fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel, may_share)
|
||||||
rtx insn;
|
rtx insn;
|
||||||
rtx var;
|
rtx var;
|
||||||
enum machine_mode promoted_mode;
|
enum machine_mode promoted_mode;
|
||||||
int unsignedp;
|
int unsignedp;
|
||||||
int toplevel;
|
int toplevel;
|
||||||
|
rtx may_share;
|
||||||
{
|
{
|
||||||
while (insn)
|
while (insn)
|
||||||
{
|
{
|
||||||
|
@ -1639,7 +1662,8 @@ fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel)
|
||||||
if (seq)
|
if (seq)
|
||||||
{
|
{
|
||||||
push_to_sequence (seq);
|
push_to_sequence (seq);
|
||||||
fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0);
|
fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0,
|
||||||
|
may_share);
|
||||||
XEXP (PATTERN (insn), i) = get_insns ();
|
XEXP (PATTERN (insn), i) = get_insns ();
|
||||||
end_sequence ();
|
end_sequence ();
|
||||||
}
|
}
|
||||||
|
@ -1647,7 +1671,8 @@ fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (INSN_P (insn))
|
else if (INSN_P (insn))
|
||||||
fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel);
|
fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel,
|
||||||
|
may_share);
|
||||||
|
|
||||||
insn = next;
|
insn = next;
|
||||||
}
|
}
|
||||||
|
@ -1661,25 +1686,22 @@ fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel)
|
||||||
(inside the CALL_PLACEHOLDER). */
|
(inside the CALL_PLACEHOLDER). */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp)
|
fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp, may_share)
|
||||||
struct hash_table *ht;
|
struct hash_table *ht;
|
||||||
rtx var;
|
rtx var;
|
||||||
enum machine_mode promoted_mode;
|
enum machine_mode promoted_mode;
|
||||||
int unsignedp;
|
int unsignedp;
|
||||||
|
rtx may_share;
|
||||||
{
|
{
|
||||||
struct insns_for_mem_entry *ime = (struct insns_for_mem_entry *)
|
struct insns_for_mem_entry *ime
|
||||||
hash_lookup (ht, var, /*create=*/0, /*copy=*/0);
|
= (struct insns_for_mem_entry *) hash_lookup (ht, var,
|
||||||
rtx insn_list = ime->insns;
|
/*create=*/0, /*copy=*/0);
|
||||||
|
rtx insn_list;
|
||||||
|
|
||||||
while (insn_list)
|
for (insn_list = ime->insns; insn_list != 0; insn_list = XEXP (insn_list, 1))
|
||||||
{
|
if (INSN_P (XEXP (insn_list, 0)))
|
||||||
rtx insn = XEXP (insn_list, 0);
|
fixup_var_refs_insn (XEXP (insn_list, 0), var, promoted_mode,
|
||||||
|
unsignedp, 1, may_share);
|
||||||
if (INSN_P (insn))
|
|
||||||
fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, 1);
|
|
||||||
|
|
||||||
insn_list = XEXP (insn_list, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1690,12 +1712,13 @@ fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp)
|
||||||
function. */
|
function. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel)
|
fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel, no_share)
|
||||||
rtx insn;
|
rtx insn;
|
||||||
rtx var;
|
rtx var;
|
||||||
enum machine_mode promoted_mode;
|
enum machine_mode promoted_mode;
|
||||||
int unsignedp;
|
int unsignedp;
|
||||||
int toplevel;
|
int toplevel;
|
||||||
|
rtx no_share;
|
||||||
{
|
{
|
||||||
rtx call_dest = 0;
|
rtx call_dest = 0;
|
||||||
rtx set, prev, prev_set;
|
rtx set, prev, prev_set;
|
||||||
|
@ -1800,7 +1823,7 @@ fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel)
|
||||||
it here. */
|
it here. */
|
||||||
|
|
||||||
fixup_var_refs_1 (var, promoted_mode, &PATTERN (insn), insn,
|
fixup_var_refs_1 (var, promoted_mode, &PATTERN (insn), insn,
|
||||||
&replacements);
|
&replacements, no_share);
|
||||||
|
|
||||||
/* If this is last_parm_insn, and any instructions were output
|
/* If this is last_parm_insn, and any instructions were output
|
||||||
after it to fix it up, then we must set last_parm_insn to
|
after it to fix it up, then we must set last_parm_insn to
|
||||||
|
@ -1877,12 +1900,13 @@ fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel)
|
||||||
or the SUBREG, as appropriate, to the pseudo. */
|
or the SUBREG, as appropriate, to the pseudo. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements, no_share)
|
||||||
rtx var;
|
rtx var;
|
||||||
enum machine_mode promoted_mode;
|
enum machine_mode promoted_mode;
|
||||||
rtx *loc;
|
rtx *loc;
|
||||||
rtx insn;
|
rtx insn;
|
||||||
struct fixup_replacement **replacements;
|
struct fixup_replacement **replacements;
|
||||||
|
rtx no_share;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
rtx x = *loc;
|
rtx x = *loc;
|
||||||
|
@ -1979,7 +2003,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
||||||
{
|
{
|
||||||
replacement = find_fixup_replacement (replacements, x);
|
replacement = find_fixup_replacement (replacements, x);
|
||||||
if (replacement->new == 0)
|
if (replacement->new == 0)
|
||||||
replacement->new = copy_most_rtx (x, var);
|
replacement->new = copy_most_rtx (x, no_share);
|
||||||
|
|
||||||
*loc = x = replacement->new;
|
*loc = x = replacement->new;
|
||||||
code = GET_CODE (x);
|
code = GET_CODE (x);
|
||||||
|
@ -2116,7 +2140,8 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
||||||
if (SUBREG_PROMOTED_VAR_P (x))
|
if (SUBREG_PROMOTED_VAR_P (x))
|
||||||
{
|
{
|
||||||
*loc = var;
|
*loc = var;
|
||||||
fixup_var_refs_1 (var, GET_MODE (var), loc, insn, replacements);
|
fixup_var_refs_1 (var, GET_MODE (var), loc, insn, replacements,
|
||||||
|
no_share);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2222,11 +2247,11 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
||||||
/* Since this case will return, ensure we fixup all the
|
/* Since this case will return, ensure we fixup all the
|
||||||
operands here. */
|
operands here. */
|
||||||
fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 1),
|
fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 1),
|
||||||
insn, replacements);
|
insn, replacements, no_share);
|
||||||
fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 2),
|
fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 2),
|
||||||
insn, replacements);
|
insn, replacements, no_share);
|
||||||
fixup_var_refs_1 (var, promoted_mode, &SET_SRC (x),
|
fixup_var_refs_1 (var, promoted_mode, &SET_SRC (x),
|
||||||
insn, replacements);
|
insn, replacements, no_share);
|
||||||
|
|
||||||
tem = XEXP (outerdest, 0);
|
tem = XEXP (outerdest, 0);
|
||||||
|
|
||||||
|
@ -2455,13 +2480,14 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
||||||
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
|
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (fmt[i] == 'e')
|
if (fmt[i] == 'e')
|
||||||
fixup_var_refs_1 (var, promoted_mode, &XEXP (x, i), insn, replacements);
|
fixup_var_refs_1 (var, promoted_mode, &XEXP (x, i), insn, replacements,
|
||||||
|
no_share);
|
||||||
else if (fmt[i] == 'E')
|
else if (fmt[i] == 'E')
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < XVECLEN (x, i); j++)
|
for (j = 0; j < XVECLEN (x, i); j++)
|
||||||
fixup_var_refs_1 (var, promoted_mode, &XVECEXP (x, i, j),
|
fixup_var_refs_1 (var, promoted_mode, &XVECEXP (x, i, j),
|
||||||
insn, replacements);
|
insn, replacements, no_share);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2869,10 +2895,10 @@ gen_mem_addressof (reg, decl)
|
||||||
SET_DECL_RTL (decl, reg);
|
SET_DECL_RTL (decl, reg);
|
||||||
|
|
||||||
if (TREE_USED (decl) || (DECL_P (decl) && DECL_INITIAL (decl) != 0))
|
if (TREE_USED (decl) || (DECL_P (decl) && DECL_INITIAL (decl) != 0))
|
||||||
fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), 0);
|
fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), reg, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fixup_var_refs (reg, GET_MODE (reg), 0, 0);
|
fixup_var_refs (reg, GET_MODE (reg), 0, reg, 0);
|
||||||
|
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
Sat Mar 9 07:47:50 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||||
|
|
||||||
|
* gcc.c-torture/compile/20020309-1.c: New test.
|
||||||
|
|
||||||
2002-03-08 Jakub Jelinek <jakub@redhat.com>
|
2002-03-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* gcc.c-torture/execute/20020307-2.c: New test.
|
* gcc.c-torture/execute/20020307-2.c: New test.
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
int
|
||||||
|
sub1 (char *p, int i)
|
||||||
|
{
|
||||||
|
char j = p[i];
|
||||||
|
|
||||||
|
{
|
||||||
|
void
|
||||||
|
sub2 ()
|
||||||
|
{
|
||||||
|
i = 2;
|
||||||
|
p = p + 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue