digitalmars.D.bugs - [Issue 5409] New: Disallow (!x & y)
- d-bugmail puremagic.com (46/46) Jan 04 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (8/8) May 06 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (6/6) Jul 09 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (31/31) Oct 19 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (11/22) Oct 23 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (10/14) Nov 13 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (18/18) Nov 25 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (13/13) Apr 23 2012 http://d.puremagic.com/issues/show_bug.cgi?id=5409
- d-bugmail puremagic.com (7/7) Jun 26 2013 http://d.puremagic.com/issues/show_bug.cgi?id=5409
http://d.puremagic.com/issues/show_bug.cgi?id=5409 Summary: Disallow (!x & y) Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc Studying bug reports in Linux kernel I've seen many cases like: !x & y That were meant to be: !(x & y) So I suggest to turn an expression like the first one (!x & y) into a D2 syntax error. So the D2 compiler asks the programmer for explicit parentheses like (the two following cases are both accepted, the error message may show both examples): !(x & y) Or even: (!x) & y The following case is not covered, this enhancement request is about the bitwise "&" case only: !x && y -------------------------- The Coccinelle tool is able to catch bugs like that with this little semantic patch: // Copyright: (C) 2009 Gilles Muller, Julia Lawall, INRIA, DIKU. GPLv2. expression E1,E2; ( !E1 & !E2 | - !E1 & E2 + !(E1 & E2) ) For some of the (!x & y) Linux bugs caught by Coccinelle see: http://coccinelle.lip6.fr/impact_linux.php searching for "Correct occurrences of !x&y". An example: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b2d7c7f7a69fd953626c3e507bac70e18b21f70e -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 04 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 Don seems to agree in catching this bug statically: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=135741 http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=135746 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 06 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 *** Issue 5814 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: -------
Jul 09 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 One more case found here, in the source code of the Chrome browser: http://www.viva64.com/en/b/0113/ Fragment N3: #define SEC_ASN1_CHOICE 0x100000 typedef struct sec_ASN1Template_struct { unsigned long kind; ... } SEC_ASN1Template; PRBool SEC_ASN1IsTemplateSimple( const SEC_ASN1Template *theTemplate) { ... if (!theTemplate->kind & SEC_ASN1_CHOICE) { ... } A related case (Fragment N4), that I think too is worth catching (probably it's a less common bug): bool GetPlatformFileInfo(...) { ... info->is_directory = file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY != 0; ... } The probably right code for Fragment N4: info->is_directory = (file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 19 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 timon.gehr gmx.ch changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |timon.gehr gmx.chA related case (Fragment N4), that I think too is worth catching (probably it's a less common bug): bool GetPlatformFileInfo(...) { ... info->is_directory = file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY != 0; ... }That is already caught with the current compiler. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 23 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 I think one of those bugs are present in DMD sources too: http://article.gmane.org/gmane.comp.lang.d.dmd.devel/2648 dmd\src\backend\cgreg.c(51):void cgreg_init() { if (!config.flags4 & CFG4optimized) return;.\backend\cgreg.c(53) : warning C4806: '&' : unsafe operation: no value of type 'bool' promoted to type 'int' can equal the given constant -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 13 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 One more example found in the Doom3 sources: http://www.viva64.com/en/b/0120/ #define BIT( num ) ( 1 << ( num ) ) const int BUTTON_ATTACK = BIT(0); void idTarget_WaitForButton::Think( void ) { ... if ( player && ( !player->oldButtons & BUTTON_ATTACK ) && ( player->usercmd.buttons & BUTTON_ATTACK ) ) { ... } I hope people like Kenji Hara will create a patch to fix this situation in D language. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 25 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5409 One more example found in the Blender code: http://www.gamasutra.com/blogs/AndreyKarpov/20120423/169021/Analyzing_the_Blender_project_with_PVSStudio.php #define DEFAULT_STREAM \ m[dC] = RAC(ccel,dC); \ \ if((!nbored & CFBnd)) { \ \ .... -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 23 2012
http://d.puremagic.com/issues/show_bug.cgi?id=5409 The Visual Studio 2012 warning: http://msdn.microsoft.com/en-us/library/z01etkwy.aspx -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 26 2013