http://d.puremagic.com/issues/show_bug.cgi?id=4077
Summary: Bugs caused by bitwise operator precedence Product: D Version: future Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: bearophile_h...@eml.cc --- Comment #0 from bearophile_h...@eml.cc 2010-04-10 16:06:32 PDT --- This isn't a bug report, and it's not exactly an enhancement request yet. It's a report that a problem exists, but I don't know a solution yet. I think it's useful to have this in Bugzilla, to keep in mind that this problem exists in D. This report is born from a bug done by Adam D. Ruppe, but similar bugs have happened in my code too in the past: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=108772 http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=108781 http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=108783 The precedence of bitwise operators is low, this makes them error-prone, it's a part of C/C++/D that causes frequent bugs in programs (the solution is to extra parentheses when you use bitwise operators). At the moment I don't see a simple way to remove this source of bugs from the D2 language. This class of bugs is so common that GCC developers have felt the need to improve the situation. When you switch on the warnings GCC warns you about few possible similar errors, suggesting to add parentheses to remove some ambiguity. A small example in C: #include "stdio.h" #include "stdlib.h" int main() { int a = atoi("10"); int b = atoi("20"); int c = atoi("30"); printf("%u\n", a|b <= c); return 0; } If you compile it with GCC 4.4.1: gcc -Wall test.c -o test test.c: In function 'main': test.c:9: warning: suggest parentheses around comparison in operand of '|' You always use -Wall (and other warnings) when you write C code, so here gcc is able to catch such bugs. This class of warnings can be added to the D compiler too. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------