// SPDX-License-Identifier: GPL-2.0-only
///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.
// 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)")
