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
1d754240
Commit
1d754240
authored
Aug 14, 2004
by
Paul Brook
Committed by
Paul Brook
Aug 14, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* trans-decl.c (gfc_build_function_decl): Remove dead code.
From-SVN: r85996
parent
37de1373
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
116 additions
and
116 deletions
+116
-116
gcc/fortran/ChangeLog
+4
-0
gcc/fortran/trans-decl.c
+112
-116
No files found.
gcc/fortran/ChangeLog
View file @
1d754240
2004-08-14 Paul Brook <paul@codesourcery.com>
* trans-decl.c (gfc_build_function_decl): Remove dead code.
2004-08-14 Paul Brook <paul@codesourcery.com>
* trans-arry.c (gfc_trans_auto_array_allocation): Remove unused var.
2004-08-13 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
...
...
gcc/fortran/trans-decl.c
View file @
1d754240
...
...
@@ -976,6 +976,7 @@ gfc_build_function_decl (gfc_symbol * sym)
tree
length
;
symbol_attribute
attr
;
gfc_formal_arglist
*
f
;
tree
parm
;
assert
(
!
sym
->
backend_decl
);
assert
(
!
sym
->
attr
.
external
);
...
...
@@ -1049,14 +1050,13 @@ gfc_build_function_decl (gfc_symbol * sym)
DECL_CONTEXT
(
fndecl
)
=
current_function_decl
;
DECL_EXTERNAL
(
fndecl
)
=
0
;
/* This specifies if a function is globaly
addressa
ble, ie. it is
/* This specifies if a function is globaly
visi
ble, ie. it is
the opposite of declaring static in C. */
if
(
DECL_CONTEXT
(
fndecl
)
==
NULL_TREE
||
attr
.
external
)
if
(
DECL_CONTEXT
(
fndecl
)
==
NULL_TREE
)
TREE_PUBLIC
(
fndecl
)
=
1
;
/* TREE_STATIC means the function body is defined here. */
if
(
!
attr
.
external
)
TREE_STATIC
(
fndecl
)
=
1
;
TREE_STATIC
(
fndecl
)
=
1
;
/* Set attributes for PURE functions. A call to PURE function in the
Fortran 95 sense is both pure and without side effects in the C
...
...
@@ -1073,146 +1073,142 @@ gfc_build_function_decl (gfc_symbol * sym)
/* Layout the function declaration and put it in the binding level
of the current function. */
if
(
!
attr
.
external
)
pushdecl
(
fndecl
);
/* Build formal argument list. Make sure that their TREE_CONTEXT is
the new FUNCTION_DECL node. */
current_function_decl
=
fndecl
;
arglist
=
NULL_TREE
;
typelist
=
TYPE_ARG_TYPES
(
TREE_TYPE
(
fndecl
));
if
(
gfc_return_by_reference
(
sym
))
{
tree
parm
;
pushdecl
(
fndecl
);
/* Build formal argument list. Make sure that their TREE_CONTEXT is
the new FUNCTION_DECL node. */
current_function_decl
=
fndecl
;
arglist
=
NULL_TREE
;
typelist
=
TYPE_ARG_TYPES
(
TREE_TYPE
(
fndecl
));
if
(
gfc_return_by_reference
(
sym
))
{
type
=
TREE_VALUE
(
typelist
);
parm
=
build_decl
(
PARM_DECL
,
get_identifier
(
"__result"
),
type
);
type
=
TREE_VALUE
(
typelist
);
parm
=
build_decl
(
PARM_DECL
,
get_identifier
(
"__result"
),
type
);
DECL_CONTEXT
(
parm
)
=
fndecl
;
DECL_ARG_TYPE
(
parm
)
=
type
;
TREE_READONLY
(
parm
)
=
1
;
gfc_finish_decl
(
parm
,
NULL_TREE
);
DECL_CONTEXT
(
parm
)
=
fndecl
;
DECL_ARG_TYPE
(
parm
)
=
type
;
TREE_READONLY
(
parm
)
=
1
;
gfc_finish_decl
(
parm
,
NULL_TREE
);
arglist
=
chainon
(
arglist
,
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
arglist
=
chainon
(
arglist
,
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
if
(
sym
->
ts
.
type
==
BT_CHARACTER
)
{
gfc_allocate_lang_decl
(
parm
);
if
(
sym
->
ts
.
type
==
BT_CHARACTER
)
{
gfc_allocate_lang_decl
(
parm
);
/* Length of character result. */
type
=
TREE_VALUE
(
typelist
);
assert
(
type
==
gfc_strlen_type_node
);
/* Length of character result. */
type
=
TREE_VALUE
(
typelist
);
assert
(
type
==
gfc_strlen_type_node
);
length
=
build_decl
(
PARM_DECL
,
get_identifier
(
".__result"
),
type
);
if
(
!
sym
->
ts
.
cl
->
length
)
{
sym
->
ts
.
cl
->
backend_decl
=
length
;
TREE_USED
(
length
)
=
1
;
}
assert
(
TREE_CODE
(
length
)
==
PARM_DECL
);
arglist
=
chainon
(
arglist
,
length
);
typelist
=
TREE_CHAIN
(
typelist
);
DECL_CONTEXT
(
length
)
=
fndecl
;
DECL_ARG_TYPE
(
length
)
=
type
;
TREE_READONLY
(
length
)
=
1
;
gfc_finish_decl
(
length
,
NULL_TREE
);
length
=
build_decl
(
PARM_DECL
,
get_identifier
(
".__result"
),
type
);
if
(
!
sym
->
ts
.
cl
->
length
)
{
sym
->
ts
.
cl
->
backend_decl
=
length
;
TREE_USED
(
length
)
=
1
;
}
assert
(
TREE_CODE
(
length
)
==
PARM_DECL
);
arglist
=
chainon
(
arglist
,
length
);
typelist
=
TREE_CHAIN
(
typelist
);
DECL_CONTEXT
(
length
)
=
fndecl
;
DECL_ARG_TYPE
(
length
)
=
type
;
TREE_READONLY
(
length
)
=
1
;
gfc_finish_decl
(
length
,
NULL_TREE
);
}
}
for
(
f
=
sym
->
formal
;
f
;
f
=
f
->
next
)
for
(
f
=
sym
->
formal
;
f
;
f
=
f
->
next
)
{
if
(
f
->
sym
!=
NULL
)
/* ignore alternate returns. */
{
if
(
f
->
sym
!=
NULL
)
/* ignore alternate returns. */
{
length
=
NULL_TREE
;
length
=
NULL_TREE
;
type
=
TREE_VALUE
(
typelist
);
type
=
TREE_VALUE
(
typelist
);
/* Build a the argument declaration. */
parm
=
build_decl
(
PARM_DECL
,
gfc_sym_identifier
(
f
->
sym
),
type
);
/* Build a the argument declaration. */
parm
=
build_decl
(
PARM_DECL
,
gfc_sym_identifier
(
f
->
sym
),
type
);
/* Fill in arg stuff. */
DECL_CONTEXT
(
parm
)
=
fndecl
;
DECL_ARG_TYPE
(
parm
)
=
type
;
DECL_ARG_TYPE_AS_WRITTEN
(
parm
)
=
type
;
/* All implementation args are read-only. */
TREE_READONLY
(
parm
)
=
1
;
/* Fill in arg stuff. */
DECL_CONTEXT
(
parm
)
=
fndecl
;
DECL_ARG_TYPE
(
parm
)
=
type
;
DECL_ARG_TYPE_AS_WRITTEN
(
parm
)
=
type
;
/* All implementation args are read-only. */
TREE_READONLY
(
parm
)
=
1
;
gfc_finish_decl
(
parm
,
NULL_TREE
);
gfc_finish_decl
(
parm
,
NULL_TREE
);
f
->
sym
->
backend_decl
=
parm
;
f
->
sym
->
backend_decl
=
parm
;
arglist
=
chainon
(
arglist
,
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
}
}
arglist
=
chainon
(
arglist
,
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
}
}
/* Add the hidden string length parameters. */
parm
=
arglist
;
for
(
f
=
sym
->
formal
;
f
;
f
=
f
->
next
)
{
char
name
[
GFC_MAX_SYMBOL_LEN
+
2
];
/* Ignore alternate returns. */
if
(
f
->
sym
==
NULL
)
continue
;
/* Add the hidden string length parameters. */
parm
=
arglist
;
for
(
f
=
sym
->
formal
;
f
;
f
=
f
->
next
)
{
char
name
[
GFC_MAX_SYMBOL_LEN
+
2
];
/* Ignore alternate returns. */
if
(
f
->
sym
==
NULL
)
continue
;
if
(
f
->
sym
->
ts
.
type
!=
BT_CHARACTER
)
continue
;
if
(
f
->
sym
->
ts
.
type
!=
BT_CHARACTER
)
continue
;
parm
=
f
->
sym
->
backend_decl
;
type
=
TREE_VALUE
(
typelist
);
assert
(
type
==
gfc_strlen_type_node
);
parm
=
f
->
sym
->
backend_decl
;
type
=
TREE_VALUE
(
typelist
);
assert
(
type
==
gfc_strlen_type_node
);
strcpy
(
&
name
[
1
],
f
->
sym
->
name
);
name
[
0
]
=
'_'
;
length
=
build_decl
(
PARM_DECL
,
get_identifier
(
name
),
type
);
strcpy
(
&
name
[
1
],
f
->
sym
->
name
);
name
[
0
]
=
'_'
;
length
=
build_decl
(
PARM_DECL
,
get_identifier
(
name
),
type
);
arglist
=
chainon
(
arglist
,
length
);
DECL_CONTEXT
(
length
)
=
fndecl
;
DECL_ARG_TYPE
(
length
)
=
type
;
TREE_READONLY
(
length
)
=
1
;
gfc_finish_decl
(
length
,
NULL_TREE
);
arglist
=
chainon
(
arglist
,
length
);
DECL_CONTEXT
(
length
)
=
fndecl
;
DECL_ARG_TYPE
(
length
)
=
type
;
TREE_READONLY
(
length
)
=
1
;
gfc_finish_decl
(
length
,
NULL_TREE
);
/* TODO: Check string lengths when -fbounds-check. */
/* TODO: Check string lengths when -fbounds-check. */
/* Use the passed value for assumed length variables. */
if
(
!
f
->
sym
->
ts
.
cl
->
length
)
/* Use the passed value for assumed length variables. */
if
(
!
f
->
sym
->
ts
.
cl
->
length
)
{
TREE_USED
(
length
)
=
1
;
if
(
!
f
->
sym
->
ts
.
cl
->
backend_decl
)
f
->
sym
->
ts
.
cl
->
backend_decl
=
length
;
else
{
TREE_USED
(
length
)
=
1
;
if
(
!
f
->
sym
->
ts
.
cl
->
backend_decl
)
f
->
sym
->
ts
.
cl
->
backend_decl
=
length
;
else
{
/* there is already another variable using this
gfc_charlen node, build a new one for this variable
and chain it into the list of gfc_charlens.
This happens for e.g. in the case
CHARACTER(*)::c1,c2
since CHARACTER declarations on the same line share
the same gfc_charlen node. */
gfc_charlen
*
cl
;
cl
=
gfc_get_charlen
();
cl
->
backend_decl
=
length
;
cl
->
next
=
f
->
sym
->
ts
.
cl
->
next
;
f
->
sym
->
ts
.
cl
->
next
=
cl
;
f
->
sym
->
ts
.
cl
=
cl
;
}
/* there is already another variable using this
gfc_charlen node, build a new one for this variable
and chain it into the list of gfc_charlens.
This happens for e.g. in the case
CHARACTER(*)::c1,c2
since CHARACTER declarations on the same line share
the same gfc_charlen node. */
gfc_charlen
*
cl
;
cl
=
gfc_get_charlen
();
cl
->
backend_decl
=
length
;
cl
->
next
=
f
->
sym
->
ts
.
cl
->
next
;
f
->
sym
->
ts
.
cl
->
next
=
cl
;
f
->
sym
->
ts
.
cl
=
cl
;
}
parm
=
TREE_CHAIN
(
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
}
assert
(
TREE_VALUE
(
typelist
)
==
void_type_node
);
DECL_ARGUMENTS
(
fndecl
)
=
arglist
;
/* Restore the old context. */
current_function_decl
=
DECL_CONTEXT
(
fndecl
);
parm
=
TREE_CHAIN
(
parm
);
typelist
=
TREE_CHAIN
(
typelist
);
}
assert
(
TREE_VALUE
(
typelist
)
==
void_type_node
);
DECL_ARGUMENTS
(
fndecl
)
=
arglist
;
/* Restore the old context. */
current_function_decl
=
DECL_CONTEXT
(
fndecl
);
sym
->
backend_decl
=
fndecl
;
}
...
...
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