aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/codegen.cpp4
-rw-r--r--src/config.h.in1
-rw-r--r--src/ir.cpp5
-rw-r--r--src/link.cpp1
-rw-r--r--src/zig_llvm.cpp11
-rw-r--r--std/special/compiler_rt/comparetf2.zig2
-rw-r--r--std/special/compiler_rt/fixunsdfdi.zig2
-rw-r--r--std/special/compiler_rt/fixunsdfsi.zig2
-rw-r--r--std/special/compiler_rt/fixunsdfti.zig2
-rw-r--r--std/special/compiler_rt/fixunssfdi.zig2
-rw-r--r--std/special/compiler_rt/fixunssfsi.zig2
-rw-r--r--std/special/compiler_rt/fixunssfti.zig2
-rw-r--r--std/special/compiler_rt/fixunstfdi.zig2
-rw-r--r--std/special/compiler_rt/fixunstfsi.zig2
-rw-r--r--std/special/compiler_rt/fixunstfti.zig2
-rw-r--r--std/special/compiler_rt/index.zig6
-rw-r--r--std/special/compiler_rt/udivmoddi4.zig2
-rw-r--r--std/special/compiler_rt/udivmodti4.zig2
-rw-r--r--std/special/compiler_rt/udivti3.zig2
-rw-r--r--std/special/compiler_rt/umodti3.zig2
-rw-r--r--test/cases/align.zig2
-rw-r--r--test/compile_errors.zig7
22 files changed, 33 insertions, 32 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 8c5d7622cc..6fb8d4b8ef 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -456,10 +456,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage);
break;
case GlobalLinkageIdWeak:
- LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakAnyLinkage);
+ LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakODRLinkage);
break;
case GlobalLinkageIdLinkOnce:
- LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceAnyLinkage);
+ LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceODRLinkage);
break;
}
diff --git a/src/config.h.in b/src/config.h.in
index 36bd66098b..a596213a3d 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -20,7 +20,6 @@
#define ZIG_DYNAMIC_LINKER "@ZIG_DYNAMIC_LINKER@"
#cmakedefine ZIG_EACH_LIB_RPATH
-#cmakedefine ZIG_LLVM_OLD_CXX_ABI
// Only used for running tests before installing.
#define ZIG_TEST_DIR "@CMAKE_SOURCE_DIR@/test"
diff --git a/src/ir.cpp b/src/ir.cpp
index 0879942b3e..787d58442e 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -15312,6 +15312,11 @@ static TypeTableEntry *ir_analyze_instruction_set_align_stack(IrAnalyze *ira, Ir
if (!ir_resolve_align(ira, align_bytes_inst, &align_bytes))
return ira->codegen->builtin_types.entry_invalid;
+ if (align_bytes > 256) {
+ ir_add_error(ira, &instruction->base, buf_sprintf("attempt to @setAlignStack(%" PRIu32 "); maximum is 256", align_bytes));
+ return ira->codegen->builtin_types.entry_invalid;
+ }
+
FnTableEntry *fn_entry = exec_fn_entry(ira->new_irb.exec);
if (fn_entry == nullptr) {
ir_add_error(ira, &instruction->base, buf_sprintf("@setAlignStack outside function"));
diff --git a/src/link.cpp b/src/link.cpp
index f2f21fd746..316c7bc761 100644
--- a/src/link.cpp
+++ b/src/link.cpp
@@ -38,6 +38,7 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path)
child_gen->want_h_file = false;
child_gen->verbose_link = parent_gen->verbose_link;
+ child_gen->verbose_ir = parent_gen->verbose_ir;
codegen_set_cache_dir(child_gen, parent_gen->cache_dir);
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index f82b1d5423..0e1a067bc6 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -5,15 +5,6 @@
* See http://opensource.org/licenses/MIT
*/
-// This must go before all includes.
-#include "config.h"
-#if defined(ZIG_LLVM_OLD_CXX_ABI)
-#define _GLIBCXX_USE_CXX11_ABI 0
-#endif
-
-
-#include "zig_llvm.hpp"
-
/*
* The point of this file is to contain all the LLVM C++ API interaction so that:
@@ -22,6 +13,8 @@
* 3. Prevent C++ from infecting the rest of the project.
*/
+#include "zig_llvm.hpp"
+
#include <llvm/Analysis/TargetLibraryInfo.h>
#include <llvm/Analysis/TargetTransformInfo.h>
#include <llvm/IR/DIBuilder.h>
diff --git a/std/special/compiler_rt/comparetf2.zig b/std/special/compiler_rt/comparetf2.zig
index 45c7cb5037..f1552ca61f 100644
--- a/std/special/compiler_rt/comparetf2.zig
+++ b/std/special/compiler_rt/comparetf2.zig
@@ -20,7 +20,7 @@ const infRep = exponentMask;
const builtin = @import("builtin");
const is_test = builtin.is_test;
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __letf2(a: f128, b: f128) -> c_int {
@setDebugSafety(this, is_test);
diff --git a/std/special/compiler_rt/fixunsdfdi.zig b/std/special/compiler_rt/fixunsdfdi.zig
index 0290ad3975..5f730bbc85 100644
--- a/std/special/compiler_rt/fixunsdfdi.zig
+++ b/std/special/compiler_rt/fixunsdfdi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunsdfdi(a: f64) -> u64 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunsdfsi.zig b/std/special/compiler_rt/fixunsdfsi.zig
index 1dbc2525f2..784d5fde4f 100644
--- a/std/special/compiler_rt/fixunsdfsi.zig
+++ b/std/special/compiler_rt/fixunsdfsi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunsdfsi(a: f64) -> u32 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunsdfti.zig b/std/special/compiler_rt/fixunsdfti.zig
index 33b0e7c274..579455c2f9 100644
--- a/std/special/compiler_rt/fixunsdfti.zig
+++ b/std/special/compiler_rt/fixunsdfti.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunsdfti(a: f64) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunssfdi.zig b/std/special/compiler_rt/fixunssfdi.zig
index c183f17c62..eab553d8c9 100644
--- a/std/special/compiler_rt/fixunssfdi.zig
+++ b/std/special/compiler_rt/fixunssfdi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunssfdi(a: f32) -> u64 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunssfsi.zig b/std/special/compiler_rt/fixunssfsi.zig
index 51ceef65d3..18c0e66677 100644
--- a/std/special/compiler_rt/fixunssfsi.zig
+++ b/std/special/compiler_rt/fixunssfsi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunssfsi(a: f32) -> u32 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunssfti.zig b/std/special/compiler_rt/fixunssfti.zig
index 69e1c82a9d..f513604247 100644
--- a/std/special/compiler_rt/fixunssfti.zig
+++ b/std/special/compiler_rt/fixunssfti.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunssfti(a: f32) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunstfdi.zig b/std/special/compiler_rt/fixunstfdi.zig
index a5dbe0f52e..85212e2176 100644
--- a/std/special/compiler_rt/fixunstfdi.zig
+++ b/std/special/compiler_rt/fixunstfdi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunstfdi(a: f128) -> u64 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunstfsi.zig b/std/special/compiler_rt/fixunstfsi.zig
index d488f4c602..33c85c9224 100644
--- a/std/special/compiler_rt/fixunstfsi.zig
+++ b/std/special/compiler_rt/fixunstfsi.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunstfsi(a: f128) -> u32 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/fixunstfti.zig b/std/special/compiler_rt/fixunstfti.zig
index fc5c645d72..1bf7fbab4b 100644
--- a/std/special/compiler_rt/fixunstfti.zig
+++ b/std/special/compiler_rt/fixunstfti.zig
@@ -1,6 +1,6 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __fixunstfti(a: f128) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/index.zig b/std/special/compiler_rt/index.zig
index 4a4d71fde9..bea06a0b41 100644
--- a/std/special/compiler_rt/index.zig
+++ b/std/special/compiler_rt/index.zig
@@ -26,7 +26,7 @@ const win32 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.
const win64 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.x86_64;
const win32_nocrt = win32 and !builtin.link_libc;
const win64_nocrt = win64 and !builtin.link_libc;
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+pub const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Weak;
const strong_linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Strong;
const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4;
@@ -152,10 +152,6 @@ export nakedcc fn _chkstk() align(4) {
@setGlobalLinkage(_chkstk, builtin.GlobalLinkage.Internal);
}
-// TODO The implementation from compiler-rt causes crashes and
-// the implementation from disassembled ntdll seems to depend on
-// thread local storage. So we have given up this safety check
-// and simply have `ret`.
export nakedcc fn __chkstk() align(4) {
@setDebugSafety(this, false);
diff --git a/std/special/compiler_rt/udivmoddi4.zig b/std/special/compiler_rt/udivmoddi4.zig
index 2e167bc64a..8005538d9a 100644
--- a/std/special/compiler_rt/udivmoddi4.zig
+++ b/std/special/compiler_rt/udivmoddi4.zig
@@ -1,6 +1,6 @@
const udivmod = @import("udivmod.zig").udivmod;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?&u64) -> u64 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/udivmodti4.zig b/std/special/compiler_rt/udivmodti4.zig
index d7507e9521..2ee2fdb57f 100644
--- a/std/special/compiler_rt/udivmodti4.zig
+++ b/std/special/compiler_rt/udivmodti4.zig
@@ -1,6 +1,6 @@
const udivmod = @import("udivmod.zig").udivmod;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __udivmodti4(a: u128, b: u128, maybe_rem: ?&u128) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/udivti3.zig b/std/special/compiler_rt/udivti3.zig
index 67ea15eb96..3764449758 100644
--- a/std/special/compiler_rt/udivti3.zig
+++ b/std/special/compiler_rt/udivti3.zig
@@ -1,6 +1,6 @@
const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __udivti3(a: u128, b: u128) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/std/special/compiler_rt/umodti3.zig b/std/special/compiler_rt/umodti3.zig
index e4a4e7a7ee..0ad9e127b3 100644
--- a/std/special/compiler_rt/umodti3.zig
+++ b/std/special/compiler_rt/umodti3.zig
@@ -1,6 +1,6 @@
const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
const builtin = @import("builtin");
-const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
+const linkage = @import("index.zig").linkage;
export fn __umodti3(a: u128, b: u128) -> u128 {
@setDebugSafety(this, builtin.is_test);
diff --git a/test/cases/align.zig b/test/cases/align.zig
index cd806a5dc6..3bf0d9c9af 100644
--- a/test/cases/align.zig
+++ b/test/cases/align.zig
@@ -188,6 +188,6 @@ test "alignstack" {
}
fn fnWithAlignedStack() -> i32 {
- @setAlignStack(1024);
+ @setAlignStack(256);
return 1234;
}
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index dd25886d2b..efab136d7e 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -2187,6 +2187,13 @@ pub fn addCases(cases: &tests.CompileErrorContext) {
".tmp_source.zig:3:5: error: alignstack set twice",
".tmp_source.zig:2:5: note: first set here");
+ cases.add("@setAlignStack too big",
+ \\export fn entry() {
+ \\ @setAlignStack(511 + 1);
+ \\}
+ ,
+ ".tmp_source.zig:2:5: error: attempt to @setAlignStack(512); maximum is 256");
+
cases.add("storing runtime value in compile time variable then using it",
\\const Mode = @import("builtin").Mode;
\\