Merge trunk version 196771 into gupc branch.
[official-gcc.git] / libgo / runtime / go-unsafe-new.c
blob54788f19688bb2f0c09d68371aa5352c657a9c83
1 /* go-unsafe-new.c -- unsafe.New function for Go.
3 Copyright 2009 The Go Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file. */
7 #include "runtime.h"
8 #include "arch.h"
9 #include "malloc.h"
10 #include "go-type.h"
11 #include "interface.h"
13 /* Implement unsafe_New, called from the reflect package. */
15 void *unsafe_New (const struct __go_type_descriptor *)
16 __asm__ (GOSYM_PREFIX "reflect.unsafe_New");
18 /* The dynamic type of the argument will be a pointer to a type
19 descriptor. */
21 void *
22 unsafe_New (const struct __go_type_descriptor *descriptor)
24 uint32 flag;
25 void *ret;
27 flag = (descriptor->__code & GO_NO_POINTERS) != 0 ? FlagNoPointers : 0;
28 ret = runtime_mallocgc (descriptor->__size, flag, 1, 1);
30 if (UseSpanType && flag == 0)
31 runtime_settype (ret, (uintptr) descriptor | TypeInfo_SingleObject);
33 return ret;