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
ebfc180f
Commit
ebfc180f
authored
Oct 23, 1995
by
Mike Stump
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FSF local junk
From-SVN: r10508
parent
c77bb813
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
94 additions
and
0 deletions
+94
-0
gcc/cp/decl.c
+94
-0
No files found.
gcc/cp/decl.c
View file @
ebfc180f
...
...
@@ -12782,3 +12782,97 @@ pop_cp_function_context (context)
free
(
p
);
}
/* FSF LOCAL dje prefix attributes */
/* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two
lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE).
The head of the declspec list is stored in DECLSPECS.
The head of the attribute list is stored in PREFIX_ATTRIBUTES.
Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of
the list elements. We drop the containing TREE_LIST nodes and link the
resulting attributes together the way decl_attributes expects them. */
void
split_specs_attrs
(
specs_attrs
,
declspecs
,
prefix_attributes
)
tree
specs_attrs
;
tree
*
declspecs
,
*
prefix_attributes
;
{
tree
t
,
s
,
a
,
next
,
specs
,
attrs
;
/* This can happen in c++ (eg: decl: typespec initdecls ';'). */
if
(
specs_attrs
!=
NULL_TREE
&&
TREE_CODE
(
specs_attrs
)
!=
TREE_LIST
)
{
*
declspecs
=
specs_attrs
;
*
prefix_attributes
=
NULL_TREE
;
return
;
}
/* Remember to keep the lists in the same order, element-wise. */
specs
=
s
=
NULL_TREE
;
attrs
=
a
=
NULL_TREE
;
for
(
t
=
specs_attrs
;
t
;
t
=
next
)
{
next
=
TREE_CHAIN
(
t
);
/* Declspecs have a non-NULL TREE_VALUE. */
if
(
TREE_VALUE
(
t
)
!=
NULL_TREE
)
{
if
(
specs
==
NULL_TREE
)
specs
=
s
=
t
;
else
{
TREE_CHAIN
(
s
)
=
t
;
s
=
t
;
}
}
else
{
if
(
attrs
==
NULL_TREE
)
attrs
=
a
=
TREE_PURPOSE
(
t
);
else
{
TREE_CHAIN
(
a
)
=
TREE_PURPOSE
(
t
);
a
=
TREE_PURPOSE
(
t
);
}
}
}
/* Terminate the lists. */
if
(
s
!=
NULL_TREE
)
TREE_CHAIN
(
s
)
=
NULL_TREE
;
if
(
a
!=
NULL_TREE
)
TREE_CHAIN
(
a
)
=
NULL_TREE
;
/* All done. */
*
declspecs
=
specs
;
*
prefix_attributes
=
attrs
;
}
/* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
This function is used by the parser when a rule will accept attributes
in a particular position, but we don't want to support that just yet.
A warning is issued for every ignored attribute. */
tree
strip_attrs
(
specs_attrs
)
tree
specs_attrs
;
{
tree
specs
,
attrs
;
split_specs_attrs
(
specs_attrs
,
&
specs
,
&
attrs
);
while
(
attrs
)
{
warning
(
"`%s' attribute ignored"
,
IDENTIFIER_POINTER
(
TREE_PURPOSE
(
attrs
)));
attrs
=
TREE_CHAIN
(
attrs
);
}
return
specs
;
}
/* END FSF LOCAL */
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