digitalmars.D.bugs - [Issue 5274] New: Impure function call inside impure function nested inside pure function
- d-bugmail puremagic.com (31/31) Nov 24 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5274
- d-bugmail puremagic.com (17/18) Nov 24 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5274
- d-bugmail puremagic.com (20/20) Nov 24 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5274
- d-bugmail puremagic.com (10/11) Nov 29 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5274
- d-bugmail puremagic.com (10/20) Nov 29 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5274
http://d.puremagic.com/issues/show_bug.cgi?id=5274 Summary: Impure function call inside impure function nested inside pure function Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: diagnostic Severity: minor Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc This D2 code is formally correct because bar() is never called: import core.stdc.stdio: putchar; pure void foo() { static void bar() { putchar('a'); } } void main() {} DMD 2.050 prints: test.d(4): Error: pure function 'foo' cannot call impure function 'putchar' Despite foo() doesn't contain calls to putchar(). Even if I modify this program, adding a call to bar() inside foo(), that strange error message doesn't change. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 24 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5274 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |clugdbug yahoo.com.au Resolution| |INVALIDThis D2 code is formally correct because bar() is never called:No, the code is incorrect. The error message occurs because bar() cannot be compiled. Think about it -- its mangled name must have 'pure' in it. The fact that there's no way that the function can actually be called, is irrelevant: it was marked as pure, but it violates pure. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 24 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5274 I have not expressed myself well enough, I am sorry. This bug report is a "diagnostic" one, it's not a "rejects valid". So I agree that this code needs to be refused at compile time, but is this a good message? test.d(4): Error: pure function 'foo' cannot call impure function 'putchar' foo() doesn't contain putchar(), it's bar() that calls it. I don't know what is a good error message for this situation. This is a reduced test case: void foo() {} pure void bar() { void spam() { foo(); } } void main() {} Maybe you are right, there is no much better error message to be invented here. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 24 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5274 07:43:03 PST ---Maybe you are right, there is no much better error message to be invented here.Hm... I'd expect a message like: Error: pure function 'foo.bar' cannot call impure function 'putchar' But this doesn't seem to be a very critical problem, the line number is correct, so you can see where the problem is. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 29 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5274At present, you get that error message if you explicitly mark bar as pure. But, the existing error message tells you why bar is pure. It's because foo is pure. This is helpful if there are several levels of nesting: it tells you the level which was pure.Maybe you are right, there is no much better error message to be invented here.Hm... I'd expect a message like: Error: pure function 'foo.bar' cannot call impure function 'putchar'But this doesn't seem to be a very critical problem, the line number is correct, so you can see where the problem is.-- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 29 2010