aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-09-30 15:44:28 +0300
committerVeikka Tuominen <git@vexu.eu>2023-01-03 18:38:15 +0200
commitabd005f302ee81213b3f3a97a08d025cb3b1ecee (patch)
treefa30badad6a8e4e8af338e33fea1fb35e3c427e0 /test
parentdaeb992c7346cf3ecaca9e0bcbee20737b005eaa (diff)
downloadzig-abd005f302ee81213b3f3a97a08d025cb3b1ecee.tar.gz
zig-abd005f302ee81213b3f3a97a08d025cb3b1ecee.zip
Sema: do not immediately destroy failed generic instantiation
Closes #12535 Closes #12765 Closes #12927
Diffstat (limited to 'test')
-rw-r--r--test/cases/compile_errors/error_in_comptime_call_in_container_level_initializer.zig22
-rw-r--r--test/cases/compile_errors/generic_instantiation_failure.zig27
-rw-r--r--test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig14
3 files changed, 63 insertions, 0 deletions
diff --git a/test/cases/compile_errors/error_in_comptime_call_in_container_level_initializer.zig b/test/cases/compile_errors/error_in_comptime_call_in_container_level_initializer.zig
new file mode 100644
index 0000000000..2b61f45a31
--- /dev/null
+++ b/test/cases/compile_errors/error_in_comptime_call_in_container_level_initializer.zig
@@ -0,0 +1,22 @@
+const std = @import("std");
+const Version = std.SemanticVersion;
+const print = @import("std").debug.print;
+
+fn readVersion() Version {
+ const version_file = "foo";
+ const len = std.mem.indexOfAny(u8, version_file, " \n") orelse version_file.len;
+ const version_string = version_file[0..len];
+ return Version.parse(version_string) catch unreachable;
+}
+
+const version: Version = readVersion();
+pub export fn entry() void {
+ print("Version {}.{}.{}+{?s}\n", .{ version.major, version.minor, version.patch, version.build });
+}
+
+// error
+// backend=llvm
+// target=native
+//
+// :9:48: error: caught unexpected error 'InvalidVersion'
+// :12:37: note: called from here
diff --git a/test/cases/compile_errors/generic_instantiation_failure.zig b/test/cases/compile_errors/generic_instantiation_failure.zig
new file mode 100644
index 0000000000..42e4c4e8c8
--- /dev/null
+++ b/test/cases/compile_errors/generic_instantiation_failure.zig
@@ -0,0 +1,27 @@
+fn List(comptime Head: type, comptime Tail: type) type {
+ return union {
+ const Self = @This();
+ head: Head,
+ tail: Tail,
+
+ fn AppendReturnType(comptime item: anytype) type {
+ return List(Head, List(@TypeOf(item), void));
+ }
+ };
+}
+
+fn makeList(item: anytype) List(@TypeOf(item), void) {
+ return List(@TypeOf(item), void){ .head = item };
+}
+
+pub export fn entry() void {
+ @TypeOf(makeList(42)).AppendReturnType(64);
+}
+
+// error
+// backend=llvm
+// target=native
+//
+// :18:43: error: value of type 'type' ignored
+// :18:43: note: all non-void values must be used
+// :18:43: note: this error can be suppressed by assigning the value to '_'
diff --git a/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig b/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig
new file mode 100644
index 0000000000..3146c38604
--- /dev/null
+++ b/test/cases/compile_errors/generic_instantiation_failure_in_generic_function_return_type.zig
@@ -0,0 +1,14 @@
+const std = @import("std");
+
+pub export fn entry() void {
+ var ohnoes: *usize = undefined;
+ _ = sliceAsBytes(ohnoes);
+}
+fn sliceAsBytes(slice: anytype) std.meta.trait.isPtrTo(.Array)(@TypeOf(slice)) {}
+
+
+// error
+// backend=llvm
+// target=native
+//
+// :7:63: error: expected type 'type', found 'bool'