mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 02:57:46 +00:00
compiler: assume external functions don't let pointers escape
Assume any external function won't let pointers live longer than the call itself. This is true in the vast majority of cases (apparently everywhere currently) but might not always be true. TODO: add a //go:noescape (or maybe //go:escape) to handle this, instead of this assumption.
This commit is contained in:
@@ -219,6 +219,16 @@ func (c *Compiler) doesEscape(value llvm.Value) bool {
|
||||
// Call only escapes when the (pointer) parameter is not marked
|
||||
// "nocapture". This flag means that the parameter does not escape
|
||||
// the give function.
|
||||
if use.CalledValue().IsAFunction() != nilValue {
|
||||
if use.CalledValue().IsDeclaration() {
|
||||
// Kind of dirty: assume external functions don't let
|
||||
// pointers escape.
|
||||
// TODO: introduce //go:noescape that sets the 'nocapture'
|
||||
// flag on each input parameter.
|
||||
println("declaration:", use.CalledValue().Name())
|
||||
continue
|
||||
}
|
||||
}
|
||||
if !c.hasFlag(use, value, "nocapture") {
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user