1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- ///Find conditions where if and else branch are functionally
- // identical.
- //
- // There can be false positives in cases where the positional
- // information is used (as with lockdep) or where the identity
- // is a placeholder for not yet handled cases.
- // Unfortunately there also seems to be a tendency to use
- // the last if else/else as a "default behavior" - which some
- // might consider a legitimate coding pattern. From discussion
- // on kernelnewbies though it seems that this is not really an
- // accepted pattern and if at all it would need to be commented
- //
- // In the Linux kernel it does not seem to actually report
- // false positives except for those that were documented as
- // being intentional.
- // the two known cases are:
- // arch/sh/kernel/traps_64.c:read_opcode()
- // } else if ((pc & 1) == 0) {
- // /* SHcompact */
- // /* TODO : provide handling for this. We don't really support
- // user-mode SHcompact yet, and for a kernel fault, this would
- // have to come from a module built for SHcompact. */
- // return -EFAULT;
- // } else {
- // /* misaligned */
- // return -EFAULT;
- // }
- // fs/kernfs/file.c:kernfs_fop_open()
- // * Both paths of the branch look the same. They're supposed to
- // * look that way and give @of->mutex different static lockdep keys.
- // */
- // if (has_mmap)
- // mutex_init(&of->mutex);
- // else
- // mutex_init(&of->mutex);
- //
- // All other cases look like bugs or at least lack of documentation
- //
- // Confidence: Moderate
- // Copyright: (C) 2016 Nicholas Mc Guire, OSADL. GPLv2.
- // Comments:
- // Options: --no-includes --include-headers
- virtual org
- virtual report
- @cond@
- statement S1;
- position p;
- @@
- * if@p (...) S1 else S1
- @script:python depends on org@
- p << cond.p;
- @@
- cocci.print_main("WARNING: possible condition with no effect (if == else)",p)
- @script:python depends on report@
- p << cond.p;
- @@
- coccilib.report.print_report(p[0],"WARNING: possible condition with no effect (if == else)")
|