Re: unsigned < 0
Iain Buclaw: > You also need to watch out for code like this too: > if (T.min < 0) { ... > As that could possibly trigger off unsigned < 0 warnings too. I was not talking about warnings. I was talking about changing the D language, turning that into a _error_ if x is unsigned. Bye, bearophile
Re: unsigned < 0
== Quote from bearophile (bearophileh...@lycos.com)'s article > > To avoid troubles in generic code you need a little workaround: > > if (__traits(isUnsigned, x) || x >= 0) { ... > That's not good enough yet. The first part of the test needs to be done in a static if. > Bye, > bearophile You also need to watch out for code like this too: if (T.min < 0) { ... As that could possibly trigger off unsigned < 0 warnings too. Regards Iain
Re: unsigned < 0
> To avoid troubles in generic code you need a little workaround: > if (__traits(isUnsigned, x) || x >= 0) { ... That's not good enough yet. The first part of the test needs to be done in a static if. Bye, bearophile
Re: unsigned < 0
> Do you like this little change in the D2 language? To avoid troubles in generic code you need a little workaround: if (__traits(isUnsigned, x) || x >= 0) { ... Bye, bearophile
unsigned < 0
Recently I have shown some bugs (and added few enhancement requests): http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=129069 Among those there is my suggestion to statically disallow unsigned<0 comparisons: http://d.puremagic.com/issues/show_bug.cgi?id=5539 So that's a little change in the D2 language itself, it's not a warning as the one GCC shows on C code. Recently Iain Buclaw has shown some patches for DMD: http://d.puremagic.com/issues/show_bug.cgi?id=5490 Three cases were of unsigned < 0, like: +++ b/src/optimize.c @@ -351,7 +351,7 @@ Expression *AddrExp::optimize(int result) { TypeSArray *ts = (TypeSArray *)ve->type; dinteger_t dim = ts->dim->toInteger(); -if (index < 0 || index >= dim) +if (index >= dim) error("array index %jd is out of bounds [0..%jd]", index, dim); e = new SymOffExp(loc, ve->var, index * ts->nextOf()->size()); e->type = type; Do you like this little change in the D2 language? Bye, bearophile