Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
b87692e5
Commit
b87692e5
authored
May 19, 1997
by
Mike Stump
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
91th Cygnus<->FSF quick merge
From-SVN: r14098
parent
eaf95893
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
109 additions
and
38 deletions
+109
-38
gcc/cp/ChangeLog
+33
-0
gcc/cp/cp-tree.def
+2
-0
gcc/cp/decl.c
+24
-13
gcc/cp/method.c
+4
-3
gcc/cp/pt.c
+46
-22
No files found.
gcc/cp/ChangeLog
View file @
b87692e5
Sat May 17 10:48:31 1997 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (instantiate_class_template): Oops.
Fri May 16 14:23:57 1997 Jason Merrill <jason@yorick.cygnus.com>
* cp-tree.def: Add TAG_DEFN.
* pt.c (tsubst_enum): New fn.
(instantiate_class_template): Use it.
(tsubst_expr): Support TAG_DEFN.
(tsubst): Support local enums.
(tsubst_copy): Likewise.
* decl.c (finish_enum): Likewise.
(start_enum): If this is a local enum, switch to permanent_obstack.
Wed May 14 19:08:28 1997 Mike Stump <mrs@cygnus.com>
* decl.c (store_parm_decls): Set last_parm_cleanup_insn here.
(finish_function): Put the base init code for constructors just
after the parm cleanup insns.
(struct cp_function): Add last_parm_cleanup_insn.
(push_cp_function_context): Likewise.
(pop_cp_function_context): Likewise.
Tue May 13 15:51:20 1997 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (tsubst_copy): Handle BIT_NOT_EXPR.
Wed May 7 11:17:59 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
* method.c (emit_thunk) [ASM_OUTPUT_MI_THUNK]: Build up the RTL
for THUNK_FNDECL before we switch to temporary allocation.
Mon May 5 14:46:53 1997 Jason Merrill <jason@yorick.cygnus.com>
Mon May 5 14:46:53 1997 Jason Merrill <jason@yorick.cygnus.com>
* call.c (build_new_op): Handle null arg2 for ?:.
* call.c (build_new_op): Handle null arg2 for ?:.
...
...
gcc/cp/cp-tree.def
View file @
b87692e5
...
@@ -152,3 +152,5 @@ DEFTREECODE (REF_BIND, "ref_bind", "e", 1)
...
@@ -152,3 +152,5 @@ DEFTREECODE (REF_BIND, "ref_bind", "e", 1)
DEFTREECODE (USER_CONV, "user_conv", "e", 4)
DEFTREECODE (USER_CONV, "user_conv", "e", 4)
DEFTREECODE (AMBIG_CONV, "ambig_conv", "e", 1)
DEFTREECODE (AMBIG_CONV, "ambig_conv", "e", 1)
DEFTREECODE (RVALUE_CONV, "rvalue_conv", "e", 1)
DEFTREECODE (RVALUE_CONV, "rvalue_conv", "e", 1)
DEFTREECODE (TAG_DEFN, "tag_defn", "e", 0)
gcc/cp/decl.c
View file @
b87692e5
...
@@ -268,6 +268,12 @@ tree dtor_label;
...
@@ -268,6 +268,12 @@ tree dtor_label;
static
rtx
last_dtor_insn
;
static
rtx
last_dtor_insn
;
/* In a constructor, the last insn emitted after the start of the
function and the parms, but before the start of the exception
specification. */
static
rtx
last_parm_cleanup_insn
;
/* In a constructor, the point at which we are ready to return
/* In a constructor, the point at which we are ready to return
the pointer to the initialized object. */
the pointer to the initialized object. */
...
@@ -10579,6 +10585,9 @@ start_enum (name)
...
@@ -10579,6 +10585,9 @@ start_enum (name)
register
tree
enumtype
=
NULL_TREE
;
register
tree
enumtype
=
NULL_TREE
;
struct
binding_level
*
b
=
inner_binding_level
;
struct
binding_level
*
b
=
inner_binding_level
;
if
(
processing_template_decl
&&
current_function_decl
)
end_temporary_allocation
();
/* If this is the real definition for a previous forward reference,
/* If this is the real definition for a previous forward reference,
fill in the contents in the same object that used to be the
fill in the contents in the same object that used to be the
forward reference. */
forward reference. */
...
@@ -10657,7 +10666,14 @@ finish_enum (enumtype, values)
...
@@ -10657,7 +10666,14 @@ finish_enum (enumtype, values)
TYPE_VALUES
(
enumtype
)
=
nreverse
(
values
);
TYPE_VALUES
(
enumtype
)
=
nreverse
(
values
);
if
(
processing_template_decl
)
if
(
processing_template_decl
)
return
enumtype
;
{
if
(
current_function_decl
)
{
add_tree
(
build_min
(
TAG_DEFN
,
enumtype
));
resume_temporary_allocation
();
}
return
enumtype
;
}
{
{
int
unsignedp
=
tree_int_cst_sgn
(
minnode
)
>=
0
;
int
unsignedp
=
tree_int_cst_sgn
(
minnode
)
>=
0
;
...
@@ -11417,6 +11433,8 @@ store_parm_decls ()
...
@@ -11417,6 +11433,8 @@ store_parm_decls ()
expand_start_bindings
(
0
);
expand_start_bindings
(
0
);
}
}
last_parm_cleanup_insn
=
get_last_insn
();
if
(
!
processing_template_decl
&&
flag_exceptions
)
if
(
!
processing_template_decl
&&
flag_exceptions
)
{
{
/* Do the starting of the exception specifications, if we have any. */
/* Do the starting of the exception specifications, if we have any. */
...
@@ -11819,19 +11837,9 @@ finish_function (lineno, call_poplevel, nested)
...
@@ -11819,19 +11837,9 @@ finish_function (lineno, call_poplevel, nested)
insns
=
get_insns
();
insns
=
get_insns
();
end_sequence
();
end_sequence
();
/* This is where the body of the constructor begins.
/* This is where the body of the constructor begins. */
If there were no insns in this function body, then the
last_parm_insn is also the last insn.
If optimization is enabled, last_parm_insn may move, so
we don't hold on to it (across emit_base_init). */
last_parm_insn
=
get_first_nonparm_insn
();
if
(
last_parm_insn
==
NULL_RTX
)
last_parm_insn
=
get_last_insn
();
else
last_parm_insn
=
previous_insn
(
last_parm_insn
);
emit_insns_after
(
insns
,
last_parm_insn
);
emit_insns_after
(
insns
,
last_parm_
cleanup_
insn
);
end_protect_partials
();
end_protect_partials
();
...
@@ -12480,6 +12488,7 @@ struct cp_function
...
@@ -12480,6 +12488,7 @@ struct cp_function
tree
ctor_label
;
tree
ctor_label
;
tree
dtor_label
;
tree
dtor_label
;
rtx
last_dtor_insn
;
rtx
last_dtor_insn
;
rtx
last_parm_cleanup_insn
;
tree
base_init_list
;
tree
base_init_list
;
tree
member_init_list
;
tree
member_init_list
;
tree
base_init_expr
;
tree
base_init_expr
;
...
@@ -12518,6 +12527,7 @@ push_cp_function_context (context)
...
@@ -12518,6 +12527,7 @@ push_cp_function_context (context)
p
->
ctor_label
=
ctor_label
;
p
->
ctor_label
=
ctor_label
;
p
->
dtor_label
=
dtor_label
;
p
->
dtor_label
=
dtor_label
;
p
->
last_dtor_insn
=
last_dtor_insn
;
p
->
last_dtor_insn
=
last_dtor_insn
;
p
->
last_parm_cleanup_insn
=
last_parm_cleanup_insn
;
p
->
assigns_this
=
current_function_assigns_this
;
p
->
assigns_this
=
current_function_assigns_this
;
p
->
just_assigned_this
=
current_function_just_assigned_this
;
p
->
just_assigned_this
=
current_function_just_assigned_this
;
p
->
parms_stored
=
current_function_parms_stored
;
p
->
parms_stored
=
current_function_parms_stored
;
...
@@ -12558,6 +12568,7 @@ pop_cp_function_context (context)
...
@@ -12558,6 +12568,7 @@ pop_cp_function_context (context)
ctor_label
=
p
->
ctor_label
;
ctor_label
=
p
->
ctor_label
;
dtor_label
=
p
->
dtor_label
;
dtor_label
=
p
->
dtor_label
;
last_dtor_insn
=
p
->
last_dtor_insn
;
last_dtor_insn
=
p
->
last_dtor_insn
;
last_parm_cleanup_insn
=
p
->
last_parm_cleanup_insn
;
current_function_assigns_this
=
p
->
assigns_this
;
current_function_assigns_this
=
p
->
assigns_this
;
current_function_just_assigned_this
=
p
->
just_assigned_this
;
current_function_just_assigned_this
=
p
->
just_assigned_this
;
current_function_parms_stored
=
p
->
parms_stored
;
current_function_parms_stored
=
p
->
parms_stored
;
...
...
gcc/cp/method.c
View file @
b87692e5
...
@@ -1674,10 +1674,9 @@ make_thunk (function, delta)
...
@@ -1674,10 +1674,9 @@ make_thunk (function, delta)
int
delta
;
int
delta
;
{
{
char
buffer
[
250
];
char
buffer
[
250
];
tree
thunk_
fndecl
,
thunk_
id
;
tree
thunk_id
;
tree
thunk
;
tree
thunk
;
char
*
func_name
;
char
*
func_name
;
static
int
thunk_number
=
0
;
tree
func_decl
;
tree
func_decl
;
if
(
TREE_CODE
(
function
)
!=
ADDR_EXPR
)
if
(
TREE_CODE
(
function
)
!=
ADDR_EXPR
)
abort
();
abort
();
...
@@ -1739,10 +1738,12 @@ emit_thunk (thunk_fndecl)
...
@@ -1739,10 +1738,12 @@ emit_thunk (thunk_fndecl)
#ifdef ASM_OUTPUT_MI_THUNK
#ifdef ASM_OUTPUT_MI_THUNK
char
*
fnname
;
char
*
fnname
;
current_function_decl
=
thunk_fndecl
;
current_function_decl
=
thunk_fndecl
;
/* Make sure we build up its RTL before we go onto the
temporary obstack. */
make_function_rtl
(
thunk_fndecl
);
temporary_allocation
();
temporary_allocation
();
DECL_RESULT
(
thunk_fndecl
)
DECL_RESULT
(
thunk_fndecl
)
=
build_decl
(
RESULT_DECL
,
0
,
integer_type_node
);
=
build_decl
(
RESULT_DECL
,
0
,
integer_type_node
);
make_function_rtl
(
thunk_fndecl
);
fnname
=
XSTR
(
XEXP
(
DECL_RTL
(
thunk_fndecl
),
0
),
0
);
fnname
=
XSTR
(
XEXP
(
DECL_RTL
(
thunk_fndecl
),
0
),
0
);
assemble_start_function
(
thunk_fndecl
,
fnname
);
assemble_start_function
(
thunk_fndecl
,
fnname
);
ASM_OUTPUT_MI_THUNK
(
asm_out_file
,
thunk_fndecl
,
delta
,
function
);
ASM_OUTPUT_MI_THUNK
(
asm_out_file
,
thunk_fndecl
,
delta
,
function
);
...
...
gcc/cp/pt.c
View file @
b87692e5
...
@@ -72,6 +72,7 @@ static int comp_template_args PROTO((tree, tree));
...
@@ -72,6 +72,7 @@ static int comp_template_args PROTO((tree, tree));
tree
most_specialized_class
PROTO
((
tree
,
tree
));
tree
most_specialized_class
PROTO
((
tree
,
tree
));
static
tree
get_class_bindings
PROTO
((
tree
,
tree
,
tree
));
static
tree
get_class_bindings
PROTO
((
tree
,
tree
,
tree
));
tree
make_temp_vec
PROTO
((
int
));
tree
make_temp_vec
PROTO
((
int
));
static
tree
tsubst_enum
PROTO
((
tree
,
tree
*
,
int
));
/* We've got a template header coming up; push to a new level for storing
/* We've got a template header coming up; push to a new level for storing
the parms. */
the parms. */
...
@@ -1198,36 +1199,22 @@ instantiate_class_template (type)
...
@@ -1198,36 +1199,22 @@ instantiate_class_template (type)
{
{
tree
name
=
TREE_PURPOSE
(
t
);
tree
name
=
TREE_PURPOSE
(
t
);
tree
tag
=
TREE_VALUE
(
t
);
tree
tag
=
TREE_VALUE
(
t
);
tree
newtag
;
/* These will add themselves to CLASSTYPE_TAGS for the new type. */
/* These will add themselves to CLASSTYPE_TAGS for the new type. */
if
(
TREE_CODE
(
tag
)
==
ENUMERAL_TYPE
)
if
(
TREE_CODE
(
tag
)
==
ENUMERAL_TYPE
)
newtag
=
start_enum
(
name
);
else
newtag
=
tsubst
(
tag
,
&
TREE_VEC_ELT
(
args
,
0
),
TREE_VEC_LENGTH
(
args
),
NULL_TREE
);
if
(
TREE_CODE
(
tag
)
==
ENUMERAL_TYPE
)
{
{
tree
e
,
values
=
NULL_TREE
,
*
last
=
&
values
;
tree
e
,
newtag
=
tsubst_enum
(
tag
,
&
TREE_VEC_ELT
(
args
,
0
),
TREE_VEC_LENGTH
(
args
));
for
(
e
=
TYPE_VALUES
(
tag
);
e
;
e
=
TREE_CHAIN
(
e
))
for
(
e
=
TYPE_VALUES
(
newtag
);
e
;
e
=
TREE_CHAIN
(
e
))
{
DECL_FIELD_CONTEXT
(
TREE_VALUE
(
e
))
=
type
;
tree
elt
=
build_enumerator
(
TREE_PURPOSE
(
e
),
tsubst_expr
(
TREE_VALUE
(
e
),
&
TREE_VEC_ELT
(
args
,
0
),
TREE_VEC_LENGTH
(
args
),
NULL_TREE
));
DECL_FIELD_CONTEXT
(
TREE_VALUE
(
elt
))
=
type
;
*
last
=
elt
;
last
=
&
TREE_CHAIN
(
elt
);
}
finish_enum
(
newtag
,
values
);
*
field_chain
=
grok_enum_decls
(
newtag
,
NULL_TREE
);
*
field_chain
=
grok_enum_decls
(
newtag
,
NULL_TREE
);
while
(
*
field_chain
)
while
(
*
field_chain
)
field_chain
=
&
TREE_CHAIN
(
*
field_chain
);
field_chain
=
&
TREE_CHAIN
(
*
field_chain
);
}
}
else
tsubst
(
tag
,
&
TREE_VEC_ELT
(
args
,
0
),
TREE_VEC_LENGTH
(
args
),
NULL_TREE
);
}
}
/* Don't replace enum constants here. */
/* Don't replace enum constants here. */
...
@@ -1411,6 +1398,8 @@ tsubst (t, args, nargs, in_decl)
...
@@ -1411,6 +1398,8 @@ tsubst (t, args, nargs, in_decl)
tree
ctx
=
tsubst
(
TYPE_CONTEXT
(
t
),
args
,
nargs
,
in_decl
);
tree
ctx
=
tsubst
(
TYPE_CONTEXT
(
t
),
args
,
nargs
,
in_decl
);
if
(
ctx
==
NULL_TREE
)
if
(
ctx
==
NULL_TREE
)
return
t
;
return
t
;
else
if
(
ctx
==
current_function_decl
)
return
lookup_name
(
TYPE_IDENTIFIER
(
t
),
1
);
else
else
return
lookup_nested_type_by_name
(
ctx
,
TYPE_IDENTIFIER
(
t
));
return
lookup_nested_type_by_name
(
ctx
,
TYPE_IDENTIFIER
(
t
));
}
}
...
@@ -2000,7 +1989,9 @@ tsubst_copy (t, args, nargs, in_decl)
...
@@ -2000,7 +1989,9 @@ tsubst_copy (t, args, nargs, in_decl)
if
(
DECL_CONTEXT
(
t
))
if
(
DECL_CONTEXT
(
t
))
{
{
tree
ctx
=
tsubst
(
DECL_CONTEXT
(
t
),
args
,
nargs
,
in_decl
);
tree
ctx
=
tsubst
(
DECL_CONTEXT
(
t
),
args
,
nargs
,
in_decl
);
if
(
ctx
!=
DECL_CONTEXT
(
t
))
if
(
ctx
==
current_function_decl
)
return
lookup_name
(
DECL_NAME
(
t
),
0
);
else
if
(
ctx
!=
DECL_CONTEXT
(
t
))
return
lookup_field
(
ctx
,
DECL_NAME
(
t
),
0
,
0
);
return
lookup_field
(
ctx
,
DECL_NAME
(
t
),
0
,
0
);
}
}
return
t
;
return
t
;
...
@@ -2033,6 +2024,7 @@ tsubst_copy (t, args, nargs, in_decl)
...
@@ -2033,6 +2024,7 @@ tsubst_copy (t, args, nargs, in_decl)
case
POSTINCREMENT_EXPR
:
case
POSTINCREMENT_EXPR
:
case
NEGATE_EXPR
:
case
NEGATE_EXPR
:
case
TRUTH_NOT_EXPR
:
case
TRUTH_NOT_EXPR
:
case
BIT_NOT_EXPR
:
case
ADDR_EXPR
:
case
ADDR_EXPR
:
case
CONVERT_EXPR
:
/* Unary + */
case
CONVERT_EXPR
:
/* Unary + */
case
SIZEOF_EXPR
:
case
SIZEOF_EXPR
:
...
@@ -2491,6 +2483,13 @@ tsubst_expr (t, args, nargs, in_decl)
...
@@ -2491,6 +2483,13 @@ tsubst_expr (t, args, nargs, in_decl)
do_poplevel
();
do_poplevel
();
break
;
break
;
case
TAG_DEFN
:
lineno
=
TREE_COMPLEXITY
(
t
);
t
=
TREE_TYPE
(
t
);
if
(
TREE_CODE
(
t
)
==
ENUMERAL_TYPE
)
tsubst_enum
(
t
,
args
,
nargs
);
break
;
default
:
default
:
return
build_expr_from_tree
(
tsubst_copy
(
t
,
args
,
nargs
,
in_decl
));
return
build_expr_from_tree
(
tsubst_copy
(
t
,
args
,
nargs
,
in_decl
));
}
}
...
@@ -3578,3 +3577,28 @@ add_maybe_template (d, fns)
...
@@ -3578,3 +3577,28 @@ add_maybe_template (d, fns)
maybe_template_tail
=
&
TREE_CHAIN
(
*
maybe_template_tail
);
maybe_template_tail
=
&
TREE_CHAIN
(
*
maybe_template_tail
);
DECL_MAYBE_TEMPLATE
(
d
)
=
1
;
DECL_MAYBE_TEMPLATE
(
d
)
=
1
;
}
}
/* Instantiate an enumerated type. Used by instantiate_class_template and
tsubst_expr. */
static
tree
tsubst_enum
(
tag
,
args
,
nargs
)
tree
tag
,
*
args
;
int
nargs
;
{
tree
newtag
=
start_enum
(
TYPE_IDENTIFIER
(
tag
));
tree
e
,
values
=
NULL_TREE
;
for
(
e
=
TYPE_VALUES
(
tag
);
e
;
e
=
TREE_CHAIN
(
e
))
{
tree
elt
=
build_enumerator
(
TREE_PURPOSE
(
e
),
tsubst_expr
(
TREE_VALUE
(
e
),
args
,
nargs
,
NULL_TREE
));
TREE_CHAIN
(
elt
)
=
values
;
values
=
elt
;
}
finish_enum
(
newtag
,
values
);
return
newtag
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment