Skip to content

Commit

Permalink
add optnone noinline to async functions
Browse files Browse the repository at this point in the history
this works around LLVM optimization assertion failures.
https://bugs.llvm.org/show_bug.cgi?id=36578

closes #800
  • Loading branch information
andrewrk committed Mar 2, 2018
1 parent 7d494b3 commit 101b774
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 11 deletions.
4 changes: 4 additions & 0 deletions src/codegen.cpp
Expand Up @@ -489,6 +489,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
} else {
LLVMSetFunctionCallConv(fn_table_entry->llvm_value, get_llvm_cc(g, fn_type->data.fn.fn_type_id.cc));
}
if (fn_type->data.fn.fn_type_id.cc == CallingConventionAsync) {
addLLVMFnAttr(fn_table_entry->llvm_value, "optnone");
addLLVMFnAttr(fn_table_entry->llvm_value, "noinline");
}

bool want_cold = fn_table_entry->is_cold || fn_type->data.fn.fn_type_id.cc == CallingConventionCold;
if (want_cold) {
Expand Down
12 changes: 1 addition & 11 deletions test/behavior.zig
Expand Up @@ -13,6 +13,7 @@ comptime {
_ = @import("cases/bugs/656.zig");
_ = @import("cases/cast.zig");
_ = @import("cases/const_slice_child.zig");
_ = @import("cases/coroutines.zig");
_ = @import("cases/defer.zig");
_ = @import("cases/enum.zig");
_ = @import("cases/enum_with_members.zig");
Expand Down Expand Up @@ -49,15 +50,4 @@ comptime {
_ = @import("cases/var_args.zig");
_ = @import("cases/void.zig");
_ = @import("cases/while.zig");


// LLVM 5.0.1, 6.0.0, and trunk crash when attempting to optimize coroutine code.
// So, Zig does not support ReleaseFast or ReleaseSafe for coroutines yet.
// Luckily, Clang users are running into the same crashes, so folks from the LLVM
// community are working on fixes. If we're really lucky they'll be fixed in 6.0.1.
// Otherwise we can hope for 7.0.0.
if (builtin.mode == builtin.Mode.Debug) {
_ = @import("cases/coroutines.zig");
}

}

0 comments on commit 101b774

Please sign in to comment.