}
#else
-void * allocate_new(int type) {
+__attribute__(malloc) void * allocate_new(int type) {
struct ___Object___ * v=FREEMALLOC(classsize[type]);
v->type=type;
#ifdef OPTIONAL
/* Array allocation function */
-struct ArrayObject * allocate_newarray(int type, int length) {
+__attribute__(malloc) struct ArrayObject * allocate_newarray(int type, int length) {
struct ArrayObject * v=FREEMALLOC(sizeof(struct ArrayObject)+length*classsize[type]);
v->type=type;
v->___length___=length;
#ifdef PRECISE_GC
struct ___String___ * NewString(void * ptr, const char *str,int length) {
#else
-struct ___String___ * NewString(const char *str,int length) {
+ __attribute__(malloc) struct ___String___ * NewString(const char *str,int length) {
#endif
int i;
#ifdef PRECISE_GC
struct ___String___ * NewString(void *, const char *str,int length);
struct ___TagDescriptor___ * allocate_tag(void *ptr, int index);
#else
-void * allocate_new(int type);
-struct ArrayObject * allocate_newarray(int type, int length);
-struct ___String___ * NewString(const char *str,int length);
+__attribute__((malloc)) void * allocate_new(int type);
+__attribute__((malloc)) struct ArrayObject * allocate_newarray(int type, int length);
+__attribute__((malloc)) struct ___String___ * NewString(const char *str,int length);
struct ___TagDescriptor___ * allocate_tag(int index);
#endif