aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-03-02 13:40:03 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-03-02 13:40:03 -0500
commit101b7745c4da1fdf0ebe723710fe8b195013fc0e (patch)
tree4a56c931cb3eb5620c84fb4bbfe95ec0c73d24f8 /src
parent7d494b3e7b09403358232dc61f45374d6c26905f (diff)
downloadzig-101b7745c4da1fdf0ebe723710fe8b195013fc0e.tar.gz
zig-101b7745c4da1fdf0ebe723710fe8b195013fc0e.zip
add optnone noinline to async functions
this works around LLVM optimization assertion failures. https://bugs.llvm.org/show_bug.cgi?id=36578 closes #800
Diffstat (limited to 'src')
-rw-r--r--src/codegen.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 0cfd27322f..3aa8f63100 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -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) {