mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Add error requiring an explicit calling convention for foreign procedures
This commit is contained in:
@@ -5,7 +5,7 @@ foreign import "odin_env"
|
|||||||
|
|
||||||
_os_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
_os_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
||||||
foreign odin_env {
|
foreign odin_env {
|
||||||
write :: proc "c" (fd: u32, p: []byte) ---
|
write :: proc "contextless" (fd: u32, p: []byte) ---
|
||||||
}
|
}
|
||||||
write(1, data)
|
write(1, data)
|
||||||
return len(data), 0
|
return len(data), 0
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ ti_int :: struct #raw_union {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@(link_name="__ashlti3", linkage="strong")
|
@(link_name="__ashlti3", linkage="strong")
|
||||||
__ashlti3 :: proc "c" (a: i128, b_: u32) -> i128 {
|
__ashlti3 :: proc "contextless" (a: i128, b_: u32) -> i128 {
|
||||||
bits_in_dword :: size_of(u32)*8
|
bits_in_dword :: size_of(u32)*8
|
||||||
b := u32(b_)
|
b := u32(b_)
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ __ashlti3 :: proc "c" (a: i128, b_: u32) -> i128 {
|
|||||||
|
|
||||||
|
|
||||||
@(link_name="__multi3", linkage="strong")
|
@(link_name="__multi3", linkage="strong")
|
||||||
__multi3 :: proc "c" (a, b: i128) -> i128 {
|
__multi3 :: proc "contextless" (a, b: i128) -> i128 {
|
||||||
x, y, r: ti_int
|
x, y, r: ti_int
|
||||||
|
|
||||||
x.all = a
|
x.all = a
|
||||||
|
|||||||
@@ -3889,6 +3889,14 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) {
|
|||||||
GB_ASSERT(pl->type->kind == Ast_ProcType);
|
GB_ASSERT(pl->type->kind == Ast_ProcType);
|
||||||
auto cc = pl->type->ProcType.calling_convention;
|
auto cc = pl->type->ProcType.calling_convention;
|
||||||
if (cc == ProcCC_ForeignBlockDefault) {
|
if (cc == ProcCC_ForeignBlockDefault) {
|
||||||
|
if (is_arch_wasm()) {
|
||||||
|
begin_error_block();
|
||||||
|
error(init, "For wasm related targets, it is required that you either define the"
|
||||||
|
" @(default_calling_convention=<string>) on the foreign block or"
|
||||||
|
" explicitly assign it on the procedure signature");
|
||||||
|
error_line("\tSuggestion: when dealing with normal Odin code (e.g. js_wasm32), use \"contextless\"; when dealing with Emscripten like code, use \"c\"\n");
|
||||||
|
end_error_block();
|
||||||
|
}
|
||||||
cc = ProcCC_CDecl;
|
cc = ProcCC_CDecl;
|
||||||
if (c->foreign_context.default_cc > 0) {
|
if (c->foreign_context.default_cc > 0) {
|
||||||
cc = c->foreign_context.default_cc;
|
cc = c->foreign_context.default_cc;
|
||||||
|
|||||||
Reference in New Issue
Block a user