-83191e8e2cb9f47f7c1e6bcb9997f21163292612
+2c985e4781691fea3eb4171de85265bfbc4e4997
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
Expression* td = Expression::make_type_descriptor(type, location);
Expression* size =
Expression::make_type_info(type, Expression::TYPE_INFO_SIZE);
-
- // If this package imports unsafe, then it may play games with
- // pointers that look like integers. We should be able to determine
- // whether or not to use new pointers in libgo/go-new.c. FIXME.
- bool use_new_pointers = this->imported_unsafe_ || type->has_pointer();
- return Runtime::make_call((use_new_pointers
- ? Runtime::NEW
- : Runtime::NEW_NOPOINTERS),
- location, 2, td, size);
+ return Runtime::make_call(Runtime::NEW, location, 2, td, size);
}
// Traversal class used to check for return statements.
// Allocate memory.
DEF_GO_RUNTIME(NEW, "__go_new", P2(TYPE, UINTPTR), R1(POINTER))
-// Allocate memory which can not contain pointers.
-DEF_GO_RUNTIME(NEW_NOPOINTERS, "__go_new_nopointers", P2(TYPE, UINTPTR), R1(POINTER))
-
-
// Start a new goroutine.
DEF_GO_RUNTIME(GO, "__go_go", P2(FUNC_PTR, POINTER), R0())
#include "runtime.h"
#include "arch.h"
#include "malloc.h"
+#include "go-type.h"
void *
__go_new (const struct __go_type_descriptor *td, uintptr_t size)
{
return runtime_mallocgc (size,
(uintptr) td | TypeInfo_SingleObject,
- 0);
-}
-
-void *
-__go_new_nopointers (const struct __go_type_descriptor *td, uintptr_t size)
-{
- return runtime_mallocgc (size,
- (uintptr) td | TypeInfo_SingleObject,
- FlagNoScan);
+ td->__code & GO_NO_POINTERS ? FlagNoScan : 0);
}