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
d9930d55
Commit
d9930d55
authored
Sep 13, 2011
by
Ian Lance Taylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix inheriting hidden methods with arguments of hidden type.
From-SVN: r178827
parent
61c4c150
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
23 additions
and
7 deletions
+23
-7
gcc/go/gofrontend/expressions.cc
+7
-1
gcc/go/gofrontend/expressions.h
+12
-2
gcc/go/gofrontend/statements.h
+3
-4
gcc/go/gofrontend/types.cc
+1
-0
No files found.
gcc/go/gofrontend/expressions.cc
View file @
d9930d55
...
...
@@ -9239,7 +9239,13 @@ Call_expression::check_argument_type(int i, const Type* parameter_type,
bool
issued_error
)
{
std
::
string
reason
;
if
(
!
Type
::
are_assignable
(
parameter_type
,
argument_type
,
&
reason
))
bool
ok
;
if
(
this
->
are_hidden_fields_ok_
)
ok
=
Type
::
are_assignable_hidden_ok
(
parameter_type
,
argument_type
,
&
reason
);
else
ok
=
Type
::
are_assignable
(
parameter_type
,
argument_type
,
&
reason
);
if
(
!
ok
)
{
if
(
!
issued_error
)
{
...
...
gcc/go/gofrontend/expressions.h
View file @
d9930d55
...
...
@@ -1198,8 +1198,9 @@ class Call_expression : public Expression
source_location
location
)
:
Expression
(
EXPRESSION_CALL
,
location
),
fn_
(
fn
),
args_
(
args
),
type_
(
NULL
),
results_
(
NULL
),
tree_
(
NULL
),
is_varargs_
(
is_varargs
),
varargs_are_lowered_
(
false
),
types_are_determined_
(
false
),
is_deferred_
(
false
),
issued_error_
(
false
)
is_varargs_
(
is_varargs
),
are_hidden_fields_ok_
(
false
),
varargs_are_lowered_
(
false
),
types_are_determined_
(
false
),
is_deferred_
(
false
),
issued_error_
(
false
)
{
}
// The function to call.
...
...
@@ -1249,6 +1250,12 @@ class Call_expression : public Expression
set_varargs_are_lowered
()
{
this
->
varargs_are_lowered_
=
true
;
}
// Note that it is OK for this call to set hidden fields when
// passing arguments.
void
set_hidden_fields_are_ok
()
{
this
->
are_hidden_fields_ok_
=
true
;
}
// Whether this call is being deferred.
bool
is_deferred
()
const
...
...
@@ -1350,6 +1357,9 @@ class Call_expression : public Expression
tree
tree_
;
// True if the last argument is a varargs argument (f(a...)).
bool
is_varargs_
;
// True if this statement may pass hidden fields in the arguments.
// This is used for generated method stubs.
bool
are_hidden_fields_ok_
;
// True if varargs have already been lowered.
bool
varargs_are_lowered_
;
// True if types have been determined.
...
...
gcc/go/gofrontend/statements.h
View file @
d9930d55
...
...
@@ -490,8 +490,7 @@ class Temporary_statement : public Statement
Type
*
type
()
const
;
// Note that it is OK for this return statement to set hidden
// fields.
// Note that it is OK for this statement to set hidden fields.
void
set_hidden_fields_are_ok
()
{
this
->
are_hidden_fields_ok_
=
true
;
}
...
...
@@ -533,8 +532,8 @@ class Temporary_statement : public Statement
Expression
*
init_
;
// The backend representation of the temporary variable.
Bvariable
*
bvariable_
;
// True if this statement may
pass hidden fields in the return
// value. This is used for generated method stubs.
// True if this statement may
set hidden fields when assigning the
// value
to the temporary
. This is used for generated method stubs.
bool
are_hidden_fields_ok_
;
// True if something takes the address of this temporary variable.
bool
is_address_taken_
;
...
...
gcc/go/gofrontend/types.cc
View file @
d9930d55
...
...
@@ -7401,6 +7401,7 @@ Type::build_one_stub_method(Gogo* gogo, Method* method,
go_assert
(
func
!=
NULL
);
Call_expression
*
call
=
Expression
::
make_call
(
func
,
arguments
,
is_varargs
,
location
);
call
->
set_hidden_fields_are_ok
();
size_t
count
=
call
->
result_count
();
if
(
count
==
0
)
gogo
->
add_statement
(
Statement
::
make_statement
(
call
));
...
...
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