aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/codegen.cpp15
-rw-r--r--test/stack_traces.zig133
-rw-r--r--test/stage1/behavior/atomics.zig4
-rw-r--r--test/stage1/behavior/cast.zig4
-rw-r--r--test/stage1/behavior/math.zig12
-rw-r--r--test/stage1/behavior/widening.zig8
6 files changed, 98 insertions, 78 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index e64a44bd13..9a29ba0364 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -564,8 +564,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
add_uwtable_attr(g, llvm_fn);
addLLVMFnAttr(llvm_fn, "nobuiltin");
if (codegen_have_frame_pointer(g) && fn->fn_inline != FnInlineAlways) {
- ZigLLVMAddFunctionAttr(llvm_fn, "no-frame-pointer-elim", "true");
- ZigLLVMAddFunctionAttr(llvm_fn, "no-frame-pointer-elim-non-leaf", nullptr);
+ ZigLLVMAddFunctionAttr(llvm_fn, "frame-pointer", "all");
}
if (fn->section_name) {
LLVMSetSection(llvm_fn, buf_ptr(fn->section_name));
@@ -1128,8 +1127,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
// on any architecture.
addLLVMArgAttr(fn_val, (unsigned)0, "nonnull");
if (codegen_have_frame_pointer(g)) {
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
+ ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock(fn_val, "Entry");
@@ -1206,8 +1204,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
addLLVMFnAttr(fn_val, "nounwind");
add_uwtable_attr(g, fn_val);
if (codegen_have_frame_pointer(g)) {
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
+ ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
// this is above the ZigLLVMClearCurrentDebugLocation
@@ -1290,8 +1287,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
addLLVMFnAttr(fn_val, "nounwind");
add_uwtable_attr(g, fn_val);
if (codegen_have_frame_pointer(g)) {
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
+ ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
// Not setting alignment here. See the comment above about
// "Cannot getTypeInfo() on a type that is unsized!"
@@ -4995,8 +4991,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
addLLVMFnAttr(fn_val, "nounwind");
add_uwtable_attr(g, fn_val);
if (codegen_have_frame_pointer(g)) {
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
- ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
+ ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
LLVMBasicBlockRef prev_block = LLVMGetInsertBlock(g->builder);
diff --git a/test/stack_traces.zig b/test/stack_traces.zig
index 81e074f01e..cb4d9cfab0 100644
--- a/test/stack_traces.zig
+++ b/test/stack_traces.zig
@@ -41,6 +41,21 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ try foo();
\\}
;
+ const source_dumpCurrentStackTrace =
+ \\const std = @import("std");
+ \\
+ \\fn bar() void {
+ \\ std.debug.dumpCurrentStackTrace(@returnAddress());
+ \\}
+ \\fn foo() void {
+ \\ bar();
+ \\}
+ \\pub fn main() u8 {
+ \\ foo();
+ \\ return 1;
+ \\}
+ ;
+
// zig fmt: off
switch (builtin.os) {
.freebsd => {
@@ -49,25 +64,25 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in main (test)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in std.start.main (test)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -76,7 +91,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in foo (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -86,7 +101,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in std.start.main (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -96,11 +111,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -109,7 +124,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_try_return_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in make_error (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -125,7 +140,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in std.start.main (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -141,11 +156,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -156,25 +171,25 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in main (test)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in std.start.posixCallMainAndExit (test)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -183,7 +198,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in foo (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -193,7 +208,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in std.start.posixCallMainAndExit (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -203,11 +218,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -216,7 +231,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_try_return_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in make_error (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -232,7 +247,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in std.start.posixCallMainAndExit (test)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -248,14 +263,46 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
+ cases.addCase(
+ "dumpCurrentStackTrace",
+ source_dumpCurrentStackTrace,
+ [_][]const u8{
+ // debug
+ \\source.zig:7:8: [address] in foo (test)
+ \\ bar();
+ \\ ^
+ \\source.zig:10:8: [address] in main (test)
+ \\ foo();
+ \\ ^
+ \\start.zig:247:29: [address] in std.start.posixCallMainAndExit (test)
+ \\ return root.main();
+ \\ ^
+ \\start.zig:114:5: [address] in std.start._start (test)
+ \\ @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
+ \\ ^
+ \\
+ ,
+ // release-safe
+ \\start.zig:114:5: [address] in std.start._start (test)
+ \\ @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
+ \\ ^
+ \\
+ ,
+ // release-fast
+ \\
+ ,
+ // release-small
+ \\
+ },
+ );
},
.macosx => {
cases.addCase(
@@ -263,25 +310,25 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in _main.0 (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in _main (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -290,7 +337,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in _foo (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -300,7 +347,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in _main (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -310,11 +357,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -323,7 +370,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_try_try_return_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in _make_error (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -339,7 +386,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-safe
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:12:5: [address] in _main (test.o)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -355,11 +402,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\
,
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -370,7 +417,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
source_return,
[_][]const u8{
// debug
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\source.zig:4:5: [address] in main (test.obj)
\\ return error.TheSkyIsFalling;
\\ ^
@@ -380,11 +427,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
// --disabled-- results in segmenetation fault
"",
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -406,11 +453,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
// --disabled-- results in segmenetation fault
"",
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
@@ -438,11 +485,11 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
// --disabled-- results in segmenetation fault
"",
// release-fast
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
,
// release-small
- \\error: TheSkyIsFalling
+ \\error: TheSkyIsFalling
\\
},
);
diff --git a/test/stage1/behavior/atomics.zig b/test/stage1/behavior/atomics.zig
index 7155e80094..1ae59ca2d7 100644
--- a/test/stage1/behavior/atomics.zig
+++ b/test/stage1/behavior/atomics.zig
@@ -146,7 +146,9 @@ fn testAtomicStore() void {
}
test "atomicrmw with floats" {
- if (builtin.arch == .aarch64 or builtin.arch == .arm)
+ if (builtin.arch == .aarch64 or
+ builtin.arch == .arm or
+ builtin.arch == .riscv64)
return;
testAtomicRmwFloat();
}
diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig
index fe55b445a8..b928ffc356 100644
--- a/test/stage1/behavior/cast.zig
+++ b/test/stage1/behavior/cast.zig
@@ -261,10 +261,6 @@ fn testPeerErrorAndArray2(x: u8) anyerror![]const u8 {
}
test "@floatToInt" {
- if (@import("builtin").arch == .riscv64) {
- // TODO: https://github.com/ziglang/zig/issues/3338
- return error.SkipZigTest;
- }
testFloatToInts();
comptime testFloatToInts();
}
diff --git a/test/stage1/behavior/math.zig b/test/stage1/behavior/math.zig
index 6d0c2847a9..0515e32d33 100644
--- a/test/stage1/behavior/math.zig
+++ b/test/stage1/behavior/math.zig
@@ -7,10 +7,6 @@ const minInt = std.math.minInt;
const mem = std.mem;
test "division" {
- if (@import("builtin").arch == .riscv64) {
- // TODO: https://github.com/ziglang/zig/issues/3338
- return error.SkipZigTest;
- }
testDivision();
comptime testDivision();
}
@@ -578,10 +574,6 @@ fn remdiv(comptime T: type) void {
}
test "@sqrt" {
- if (@import("builtin").arch == .riscv64) {
- // TODO: https://github.com/ziglang/zig/issues/3338
- return error.SkipZigTest;
- }
testSqrt(f64, 12.0);
comptime testSqrt(f64, 12.0);
testSqrt(f32, 13.0);
@@ -627,10 +619,6 @@ test "vector integer addition" {
}
test "NaN comparison" {
- if (@import("builtin").arch == .riscv64) {
- // TODO: https://github.com/ziglang/zig/issues/3338
- return error.SkipZigTest;
- }
if (std.Target.current.isWindows()) {
// TODO https://github.com/ziglang/zig/issues/508
return error.SkipZigTest;
diff --git a/test/stage1/behavior/widening.zig b/test/stage1/behavior/widening.zig
index 1aa7ff5d22..71f8ae482e 100644
--- a/test/stage1/behavior/widening.zig
+++ b/test/stage1/behavior/widening.zig
@@ -19,10 +19,6 @@ test "implicit unsigned integer to signed integer" {
}
test "float widening" {
- if (@import("builtin").arch == .riscv64) {
- // TODO:
- return error.SkipZigTest;
- }
var a: f16 = 12.34;
var b: f32 = a;
var c: f64 = b;
@@ -35,10 +31,6 @@ test "float widening" {
test "float widening f16 to f128" {
// TODO https://github.com/ziglang/zig/issues/3282
if (@import("builtin").arch == .aarch64) return error.SkipZigTest;
- if (@import("builtin").arch == .riscv64) {
- // TODO: https://github.com/ziglang/zig/issues/3338
- return error.SkipZigTest;
- }
var x: f16 = 12.34;
var y: f128 = x;