Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
December 05, 2009 [Issue 3578] New: Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=3578 Summary: Impossible to run a struct invariant using assert(s) Product: D Version: 1.041 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: llucax@gmail.com --- Comment #0 from Leandro Lucarella <llucax@gmail.com> 2009-12-05 08:24:54 PST --- This fails to compile (with -unittest): --- struct S { invariant() { assert (false); } unittest { S s; assert (s); } } --- With this error message: inv.d(3): Error: expression s of type S does not have a boolean value With both DMD 1 and 2 (tested with DMD 1.041 and DMD 2.037. Changing struct to class compiles fine (and dumps a core if you run it, of course ;). Thes specs are not clear on this in both D1 and D2. Invariant is only mentioned in structs, but I guess it's more likely to think that the description of class invariant apply to structs too, so I guess this should be supported in both D1 and D2. If it's a change to big to make it in D1, I think the specs should be updated to clarify the differences between struct and class invariants. In D2 I don't see why the language should not be updated to support this, since there is no other way to trigger an invariant check (and, for example, invariant is not executed when a struct is constructed or when using alias this, I think). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
June 22, 2010 [Issue 3578] Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | http://d.puremagic.com/issues/show_bug.cgi?id=3578 Leandro Lucarella <llucax@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bearophile_hugs@eml.cc --- Comment #1 from Leandro Lucarella <llucax@gmail.com> 2010-06-21 17:44:13 PDT --- *** Issue 4326 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 16, 2010 [Issue 3578] Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | http://d.puremagic.com/issues/show_bug.cgi?id=3578 Shin Fujishiro <rsinfu@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsinfu@gmail.com --- Comment #2 from Shin Fujishiro <rsinfu@gmail.com> 2010-10-16 12:02:06 PDT --- It's undocumented, but struct invariants are fired on pointers: -------------------- struct S { invariant() { assert(0); } // (3) } void main() { S s; assert(&s); } -------------------- % dmd -run test.d core.exception.AssertError@test(3): Assertion failure -------------------- Though it's non-intuitive, I find it reasonable considering that structs can define opCast to bool. assert(s) would be ambiguous if s had both invariant and opCast!bool. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 16, 2010 [Issue 3578] Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | http://d.puremagic.com/issues/show_bug.cgi?id=3578 --- Comment #3 from Leandro Lucarella <llucax@gmail.com> 2010-10-16 16:06:59 PDT --- (In reply to comment #2) > It's undocumented, but struct invariants are fired on pointers: > -------------------- > struct S > { > invariant() { assert(0); } // (3) > } > void main() > { > S s; > assert(&s); > } > -------------------- > % dmd -run test.d > core.exception.AssertError@test(3): Assertion failure > -------------------- > > Though it's non-intuitive, I find it reasonable considering that structs can define opCast to bool. assert(s) would be ambiguous if s had both invariant and opCast!bool. I never expected that, but it makes sense as you mention. I guess this behavior should be documented in the specs. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 23, 2012 [Issue 3578] Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | http://d.puremagic.com/issues/show_bug.cgi?id=3578 --- Comment #4 from github-bugzilla@puremagic.com 2012-01-23 01:50:33 PST --- Commit pushed to https://github.com/D-Programming-Language/d-programming-language.org https://github.com/D-Programming-Language/d-programming-language.org/commit/8ed7c3ded95c50a4dc297a272fa53c0deb18e68e fix Issue 3578 - Impossible to run a struct invariant using assert(s) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 23, 2012 [Issue 3578] Impossible to run a struct invariant using assert(s) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | http://d.puremagic.com/issues/show_bug.cgi?id=3578 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla@digitalmars.com Resolution| |FIXED --- Comment #4 from github-bugzilla@puremagic.com 2012-01-23 01:50:33 PST --- Commit pushed to https://github.com/D-Programming-Language/d-programming-language.org https://github.com/D-Programming-Language/d-programming-language.org/commit/8ed7c3ded95c50a4dc297a272fa53c0deb18e68e fix Issue 3578 - Impossible to run a struct invariant using assert(s) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation