summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semcall.nim1
-rw-r--r--tests/overload/tselfderef.nim17
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/semcall.nim b/compiler/semcall.nim
index 5f7e5084b..3037a6ecc 100644
--- a/compiler/semcall.nim
+++ b/compiler/semcall.nim
@@ -215,6 +215,7 @@ proc resolveOverloads(c: PContext, n, orig: PNode,
       if result.state != csMatch:
         n.sons.delete(1)
         orig.sons.delete(1)
+        excl n.flags, nfExprCall
       else: return
 
     if nfDotField in n.flags:
diff --git a/tests/overload/tselfderef.nim b/tests/overload/tselfderef.nim
new file mode 100644
index 000000000..708e4043b
--- /dev/null
+++ b/tests/overload/tselfderef.nim
@@ -0,0 +1,17 @@
+# bug #4671
+{.experimental.}
+{.this: self.}
+
+type
+  SomeObj = object
+    f: int
+
+proc f(num: int) =
+  discard
+
+var intptr: ptr int
+intptr.f() # compiles fine
+
+proc doSomething(self: var SomeObj) =
+  var pint: ptr int
+  pint.f() # Error: expression '.(pint, "f")' cannot be called