digitalmars.D.bugs - [Issue 1624] New: test of bool doesn't hold always
- d-bugmail puremagic.com (24/24) Oct 29 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1624
- d-bugmail puremagic.com (12/12) Oct 29 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1624
- Matti Niemenmaa (11/37) Oct 29 2007 This is analogous to doing something like:
- d-bugmail puremagic.com (11/11) Oct 29 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1624
- Jarrett Billingsley (3/13) Oct 29 2007 Unions _are_ dangerous. This isn't news.
- d-bugmail puremagic.com (14/14) Oct 29 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1624
http://d.puremagic.com/issues/show_bug.cgi?id=1624 Summary: test of bool doesn't hold always Product: D Version: 1.022 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: davidl 126.com void main() { union e{ bool k; Object v; } e m; m.v = new Object; assert(m.k); assert((!m.k) == false); // assertion failure } --
Oct 29 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1624 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID ------- Comment #1 from bugzilla digitalmars.com 2007-10-29 05:51 ------- The only valid values for a bool are true and false. In the example, a union is used to set bool to an invalid value, hence the subsequent operations on that bool do not produce the expected results. The code is incorrect, not the compiler. --
Oct 29 2007
d-bugmail puremagic.com wrote:http://d.puremagic.com/issues/show_bug.cgi?id=1624 Summary: test of bool doesn't hold always Product: D Version: 1.022 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: davidl 126.com void main() { union e{ bool k; Object v; } e m; m.v = new Object; assert(m.k); assert((!m.k) == false); // assertion failure }This is analogous to doing something like: bool b; byte* p = cast(byte*)&b; *p = 127; assert (b || !b); // 127 != 0 so "b" holds assert (b == true || b == false); // oh noes, true == 1 and 1 != 127 Expecting to find true or false when you've explicitly forced the variable to hold neither value will obviously not work. -- E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
Oct 29 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1624 davidl 126.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID | ------- Comment #2 from davidl 126.com 2007-10-29 06:58 ------- Where does the specification tell what the value of true/false is? So you actually mean a bool in a union is dangerous? I'm not aware of that. I think either doc or compiler need to be fixed --
Oct 29 2007
<d-bugmail puremagic.com> wrote in message news:fg4hsu$cip$1 digitalmars.com...http://d.puremagic.com/issues/show_bug.cgi?id=1624 davidl 126.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID | ------- Comment #2 from davidl 126.com 2007-10-29 06:58 ------- Where does the specification tell what the value of true/false is? So you actually mean a bool in a union is dangerous? I'm not aware of that.Unions _are_ dangerous. This isn't news.
Oct 29 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1624 matti.niemenmaa+dbugzilla iki.fi changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution| |INVALID ------- Comment #3 from matti.niemenmaa+dbugzilla iki.fi 2007-10-29 07:07 ------- http://www.digitalmars.com/d/1.0/type.html "A bool value can be implicitly converted to any integral type, with false becoming 0 and true becoming 1. The numeric literals 0 and 1 can be implicitly converted to the bool values false and true, respectively." If you shove a value which is neither 0 nor 1 into a variable, and expect it to behave as though it were 0 or 1, you are doing something wrong. --
Oct 29 2007