digitalmars.D.bugs - [Issue 5735] New: struct implicitly converted to boolean.
- d-bugmail puremagic.com (35/35) Mar 14 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (18/18) Mar 15 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (34/34) Apr 06 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (11/11) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (25/25) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (6/6) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (10/10) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (7/7) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
- d-bugmail puremagic.com (12/12) Apr 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5735
http://d.puremagic.com/issues/show_bug.cgi?id=5735
Summary: struct implicitly converted to boolean.
Product: D
Version: D1 & D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: ibuclaw ubuntu.com
Example code:
struct A {}
void foo(bool cond){}
void main()
{
A a;
int i;
assert(a); // type A does not have a boolean value
assert(i || a); // type A does not have a boolean value
assert(0 || a); // OK
if(a) {} // type A does not have a boolean value
if(i || a) {} // type A does not have a boolean value
if(0 || a) {} // type A does not have a boolean value
foo(a); // cannot implicitly convert type A to bool
foo(i || a); // OK
foo(0 || a); // OK
}
The three examples that pass really should be errors.
Regards
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 14 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735
Iain Buclaw <ibuclaw ubuntu.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ibuclaw ubuntu.com
Note, this is also the same issue for static arrays and unions.
int[1] arr;
assert(arr); // type int[1u] does not have a boolean value
assert(0 || arr); // OK
union B {}
B b;
assert(b); // type B does not have a boolean value
assert(0 || b); // OK
Regards
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 15 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735
Iain Buclaw <ibuclaw ubuntu.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
Rough fix for 2.052 - will try out trunk later on today.
Regards
--- dmd.orig/cast.c 2011-02-18 01:15:38.000000000 +0000
+++ dmd/cast.c 2011-04-06 11:13:50.536604547 +0100
-144,6 +144,10
type = Type::terror;
}
Expression *e = optimize(WANTvalue | WANTflags);
+ if (t->ty == Tbool)
+ { // See if we can really convert the type to boolean.
+ e->checkToBoolean(NULL);
+ }
if (e->type == t)
return MATCHexact;
if (e != this)
--- dmd.orig/optimize.c 2011-02-18 01:15:38.000000000 +0000
+++ dmd/optimize.c 2011-04-06 10:55:18.075088167 +0100
-990,6 +990,8
e = new IntegerExp(loc, n1 || n2, type);
}
+ else if (! e2->type->checkBoolean())
+ ; // Don't convert e2 to bool if it's type disallows it.
else if (e1->isBool(FALSE))
e = new BoolExp(loc, e2, type);
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 06 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bugzilla digitalmars.com
12:25:14 PDT ---
The patch seg faults building phobos because the argument to checkToBoolean is
NULL.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735
14:28:14 PDT ---
// Suitable for inclusion in test suite
struct A {}
void foo(bool cond){}
void main()
{
A a;
int i;
static assert(!__traits(compiles, assert(a))); // type A does not have
a boolean value
static assert(!__traits(compiles, assert(i || a))); // type A does not have
a boolean value
static assert(!__traits(compiles, assert(0 || a))); // OK
// if(a) {} // type A does not have a boolean value
// if(i || a) {} // type A does not have a boolean value
// if(0 || a) {} // type A does not have a boolean value
static assert(!__traits(compiles, foo(a))); // cannot implicitly
convert type A to bool
static assert(!__traits(compiles, foo(i || a))); // OK
static assert(!__traits(compiles, foo(0 || a))); // OK
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735 It can happen with '(1 && cond)' too. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735 Created an attachment (id=944) issue5735 OK, Scrap the above, this is a check is in a better place - though it can cause duplicate errors to emit for the same line. I'm sure you'll know what's best to do though about that. :) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735 15:58:09 PDT --- Partial fix: https://github.com/D-Programming-Language/dmd/commit/fdac2763da067cc8901f35a4095778787be25fca -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5735
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
22:34:19 PDT ---
https://github.com/D-Programming-Language/dmd/commit/f62ea9b6fe314e7ec2a2755066334b9184150b81
https://github.com/D-Programming-Language/dmd/commit/e1bdbb45f75a078109dd807f63d149fbe7231a42
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 18 2011









d-bugmail puremagic.com 