mirror of git://gcc.gnu.org/git/gcc.git
compiler: Type check params in sink function decl.
When a function is declared and named with the blank identifier, only
the syntax is checked. This patch modifies the parser to add a dummy
node for each function declaration with a blank identifier name that
will be type checked like any function declaration.
Fixes golang/go#11535.
Reviewed-on: https://go-review.googlesource.com/13792
From-SVN: r227160
This commit is contained in:
parent
cd0fea2ba9
commit
e3552bf9f0
|
|
@ -1,4 +1,4 @@
|
||||||
cc7303c97b232ea979cab950d95aaf76c4e0f5b5
|
81810917af7ba19e1f9f8efc8b1989f7d6419d30
|
||||||
|
|
||||||
The first line of this file holds the git revision number of the last
|
The first line of this file holds the git revision number of the last
|
||||||
merge done from the gofrontend repository.
|
merge done from the gofrontend repository.
|
||||||
|
|
|
||||||
|
|
@ -2305,8 +2305,20 @@ Parse::function_decl(bool saw_nointerface)
|
||||||
|
|
||||||
if (!this->peek_token()->is_op(OPERATOR_LCURLY))
|
if (!this->peek_token()->is_op(OPERATOR_LCURLY))
|
||||||
{
|
{
|
||||||
if (named_object == NULL && !Gogo::is_sink_name(name))
|
if (named_object == NULL)
|
||||||
{
|
{
|
||||||
|
// Function declarations with the blank identifier as a name are
|
||||||
|
// mostly ignored since they cannot be called. We make an object
|
||||||
|
// for this declaration for type-checking purposes.
|
||||||
|
if (Gogo::is_sink_name(name))
|
||||||
|
{
|
||||||
|
static int count;
|
||||||
|
char buf[30];
|
||||||
|
snprintf(buf, sizeof buf, ".$sinkfndecl%d", count);
|
||||||
|
++count;
|
||||||
|
name = std::string(buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (fntype == NULL
|
if (fntype == NULL
|
||||||
|| (expected_receiver && rec == NULL))
|
|| (expected_receiver && rec == NULL))
|
||||||
this->gogo_->add_erroneous_name(name);
|
this->gogo_->add_erroneous_name(name);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue