Commit 9b292c0949

Will Lillis <wlillis@umass.edu>
2024-07-21 09:03:23
fix: Add error notes for method calls on double pointers (#20686)
1 parent 93c546c
Changed files (2)
src
test
cases
src/Sema.zig
@@ -28023,6 +28023,10 @@ fn fieldCallBind(
         if (concrete_ty.zigTypeTag(mod) == .ErrorUnion) {
             try sema.errNote(src, msg, "consider using 'try', 'catch', or 'if'", .{});
         }
+        if (is_double_ptr) {
+            try sema.errNote(src, msg, "method invocation only supports up to one level of implicit pointer dereferencing", .{});
+            try sema.errNote(src, msg, "use '.*' to dereference pointer", .{});
+        }
         break :msg msg;
     };
     return sema.failWithOwnedErrorMsg(block, msg);
test/cases/compile_errors/call_from_double_ptr.zig
@@ -0,0 +1,15 @@
+const S = struct {
+    fn b() void {}
+};
+
+export fn entry(a: **S) void {
+    _ = a.b();
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// 6:10: error: no field or member function named 'b' in '*tmp.S'
+// 6:10: note: method invocation only supports up to one level of implicit pointer dereferencing
+// 6:10: note: use '.*' to dereference pointer