Compiling with LTO revealed a number of cases in the runtime and
standard library where C and Go disagreed about the type of an object or
function (or where Go and code generated by the compiler disagreed). In
all cases the underlying representation was the same (e.g., uintptr vs.
void*), so this wasn't causing actual problems, but it did result in a
number of annoying warnings when compiling with LTO.
Reviewed-on: https://go-review.googlesource.com/c/160700
From-SVN: r268923
48 lines
974 B
C
48 lines
974 B
C
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
#include "runtime.h"
|
|
|
|
extern void gothrow(String) __attribute__((noreturn));
|
|
extern void gothrow(String) __asm__(GOSYM_PREFIX "runtime.throw");
|
|
|
|
void
|
|
runtime_throw(const char *s)
|
|
{
|
|
gothrow(runtime_gostringnocopy((const byte *)s));
|
|
}
|
|
|
|
void
|
|
runtime_panicstring(const char *s)
|
|
{
|
|
M* mp;
|
|
Eface err;
|
|
|
|
mp = runtime_m();
|
|
if (mp != nil) {
|
|
if(mp->mallocing) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic during malloc");
|
|
}
|
|
if(mp->gcing) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic during gc");
|
|
}
|
|
if(mp->locks) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic holding locks");
|
|
}
|
|
}
|
|
runtime_newErrorCString((uintptr) s, &err);
|
|
runtime_panic(err);
|
|
}
|
|
|
|
extern void runtime_abort(void) __asm__(GOSYM_PREFIX "runtime.abort");
|
|
|
|
void
|
|
runtime_abort()
|
|
{
|
|
abort();
|
|
}
|