Commit a36cb5b1 by Ian Lance Taylor

compiler: implement go:noinline and go:nosplit directives

    
    Reviewed-on: https://go-review.googlesource.com/26652

From-SVN: r239315
parent 143d49f3
85a9c6992d9660e36972c279a5252fd9591bb765
8da2129a005cc1f44d4d993b0b7312b64c0d68a4
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
......@@ -5083,11 +5083,19 @@ Function::get_or_make_decl(Gogo* gogo, Named_object* no)
if (this->calls_defer_retaddr_)
is_inlinable = false;
// Check the //go:noinline compiler directive.
if ((this->pragmas_ & GOPRAGMA_NOINLINE) != 0)
is_inlinable = false;
// If this is a thunk created to call a function which calls
// the predeclared recover function, we need to disable
// stack splitting for the thunk.
bool disable_split_stack = this->is_recover_thunk_;
// Check the //go:nosplit compiler directive.
if ((this->pragmas_ & GOPRAGMA_NOSPLIT) != 0)
disable_split_stack = true;
// This should go into a unique section if that has been
// requested elsewhere, or if this is a nointerface function.
// We want to put a nointerface function into a unique section
......
......@@ -1842,13 +1842,11 @@ Lex::skip_cpp_comment()
{
// Applies to the next function. Do not split the stack when
// entering the function.
// FIXME: Not implemented.
this->pragmas_ |= GOPRAGMA_NOSPLIT;
}
else if (verb == "go:noinline")
{
// Applies to the next function. Do not inline the function.
// FIXME: Not implemented.
this->pragmas_ |= GOPRAGMA_NOINLINE;
}
else if (verb == "go:systemstack")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment