Bug 3642 – Poor error message: function ___ not callable with argument types ___

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Linux
Creation time
2009-12-23T17:41:00Z
Last change time
2015-06-09T05:13:45Z
Keywords
diagnostic
Assigned to
nobody
Creator
jason.james.house

Comments

Comment #0 by jason.james.house — 2009-12-23T17:41:40Z
Sample code ================== struct foo{ void unsharedfunc(){} void sharedfunc() shared {} } void main(){ foo unsharedvar; shared(foo) sharedvar; unsharedvar.sharedfunc(); sharedvar.unsharedfunc(); } ================== Output with dmd 2.037 (Bug report lists dmd 2.036 because 2.037 was not an option at the time) $ dmd test.d test.d(8): Error: function test.foo.sharedfunc () shared is not callable using argument types () test.d(9): Error: function test.foo.unsharedfunc () is not callable using argument types () shared Here's the kind of error message I would expect to see test.d(8): Error: Only shared types can call shared functions test.d(9): Error: Shared types can only call shared functions Maybe the function or variable name could be worked into the message, but that's the essence of what should be displayed.
Comment #1 by bugzilla — 2009-12-25T13:22:46Z
The function name is in the message already.
Comment #2 by jason.james.house — 2009-12-25T14:29:23Z
(In reply to comment #1) > The function name is in the message already. The function name isn't particularly important. The error message isn't particularly clear about the misuse of shared.
Comment #3 by jason.james.house — 2009-12-28T21:02:22Z
I just came across another example where this is poor. No test case this time ;) Here's the error message: hb/search/factory.d(58): Error: function libego.adapter.move.compressedHash () is not callable using argument types () Any guesses what is wrong? Calling a no argument function is not callable using no arguments? In this particular case, the instance of libego.adapter.move is immutable and the compressedHash function is neither marked as const nor immuatable. The error message really should be better. Example alternate error message: hb/search/factory.d(58): Error: Can't call mutating function on an immutable object.
Comment #4 by doob — 2012-08-16T04:56:31Z
I've hit this error a couple of times and it can be really annoying. I always think I'm missing an argument. For example: module test; struct Foo { void foo () const { auto b = bar; } bool bar () { return false; } } Compile the above code with DMD 2.060 results in: Error: function test.Foo.bar () is not callable using argument types () If I add parentheses when calling "bar", I get a better error message: Error: function test.Foo.bar () is not callable using argument types () const Where it actually mentions "const". Although the error message could be even better than this.
Comment #5 by andrej.mitrovich — 2012-12-23T13:45:29Z
*** This issue has been marked as a duplicate of issue 1730 ***