aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-02-09 02:50:03 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-02-09 03:09:25 -0500
commitfc100d7b3b27bd514dca4e02c160e5b96d4da648 (patch)
treeb365fbdf02c7a35d81d9037a15e1e3917a6e77de /test
parent8a859afd580f438f549ee69a3e3487eb5d119fad (diff)
downloadzig-fc100d7b3b27bd514dca4e02c160e5b96d4da648.tar.gz
zig-fc100d7b3b27bd514dca4e02c160e5b96d4da648.zip
lots of miscellaneous things all in one big commit
* add `@compileLog(...)` builtin function - Helps debug code running at compile time - See #240 * fix crash when there is an error on the start value of a slice * add implicit cast from int and float types to int and float literals if the value is known at compile time * make array concatenation work with slices in addition to arrays and c string literals * fix compile error message for something not having field access * fix crash when `@setDebugSafety()` was called from a function being evaluated at compile-time * fix compile-time evaluation of overflow math builtins. * avoid debug safety panic handler in builtin.o and compiler_rt.o since we use no debug safety in these modules anyway * add compiler_rt functions for division on ARM - Closes #254 * move default panic handler to std.debug so users can call it manually * std.io.printf supports a width in the format specifier
Diffstat (limited to 'test')
-rw-r--r--test/cases/enum_with_members.zig4
-rw-r--r--test/cases/eval.zig12
-rw-r--r--test/run_tests.cpp22
3 files changed, 34 insertions, 4 deletions
diff --git a/test/cases/enum_with_members.zig b/test/cases/enum_with_members.zig
index b338b9b014..5abb297674 100644
--- a/test/cases/enum_with_members.zig
+++ b/test/cases/enum_with_members.zig
@@ -8,8 +8,8 @@ const ET = enum {
pub fn print(a: &const ET, buf: []u8) -> %usize {
return switch (*a) {
- ET.SINT => |x| { io.bufPrintInt(buf, x, 10, false) },
- ET.UINT => |x| { io.bufPrintInt(buf, x, 10, false) },
+ ET.SINT => |x| { io.bufPrintInt(buf, x, 10, false, 0) },
+ ET.UINT => |x| { io.bufPrintInt(buf, x, 10, false, 0) },
}
}
};
diff --git a/test/cases/eval.zig b/test/cases/eval.zig
index 9f3b1d2fcd..027bb643b6 100644
--- a/test/cases/eval.zig
+++ b/test/cases/eval.zig
@@ -251,3 +251,15 @@ fn comptimeIterateOverFnPtrList() {
assert(performFn('o', 0) == 1);
assert(performFn('w', 99) == 99);
}
+
+fn evalSetDebugSafetyAtCompileTime() {
+ @setFnTest(this);
+
+ const result = comptime fnWithSetDebugSafety();
+ assert(result == 1234);
+}
+
+fn fnWithSetDebugSafety() -> i32{
+ @setDebugSafety(this, true);
+ return 1234;
+}
diff --git a/test/run_tests.cpp b/test/run_tests.cpp
index 01d16a2543..828f3469bf 100644
--- a/test/run_tests.cpp
+++ b/test/run_tests.cpp
@@ -1015,8 +1015,9 @@ const x = foo();
add_compile_fail_case("array concatenation with wrong type", R"SOURCE(
const src = "aoeu";
-const a = src[0...] ++ "foo";
- )SOURCE", 1, ".tmp_source.zig:3:14: error: expected array or C string literal, found '[]u8'");
+const derp = usize(1234);
+const a = derp ++ "foo";
+ )SOURCE", 1, ".tmp_source.zig:4:11: error: expected array or C string literal, found 'usize'");
add_compile_fail_case("non compile time array concatenation", R"SOURCE(
fn f(s: [10]u8) -> []u8 {
@@ -1632,6 +1633,23 @@ const some_data: [100]u8 = {
};
)SOURCE", 1, ".tmp_source.zig:3:32: error: alignment value must be power of 2");
+ add_compile_fail_case("compile log", R"SOURCE(
+fn foo() {
+ comptime bar(12, "hi");
+}
+fn bar(a: i32, b: []const u8) {
+ @compileLog("begin");
+ @compileLog("a", a, "b", b);
+ @compileLog("end");
+}
+ )SOURCE", 6,
+ ".tmp_source.zig:6:5: error: found compile log statement",
+ ".tmp_source.zig:3:17: note: called from here",
+ ".tmp_source.zig:7:5: error: found compile log statement",
+ ".tmp_source.zig:3:17: note: called from here",
+ ".tmp_source.zig:8:5: error: found compile log statement",
+ ".tmp_source.zig:3:17: note: called from here");
+
}
//////////////////////////////////////////////////////////////////////////////