[PATCH] D91485: [clang-tidy] ElseAfterReturn check wont suggest fixes if preprocessor branches are involved

Nathan James via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 14 14:10:42 PST 2020


njames93 created this revision.
njames93 added reviewers: aaron.ballman, alexfh.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.
njames93 requested review of this revision.

Consider this code:

  if (Cond) {
  #ifdef X_SUPPORTED
    X();
  #else
    return;
  #endif
  } else {
    Y();
  }
  Z();

In this example, if `X_SUPPORTED` is not defined, currently we'll get a warning from the else-after-return check. However If we apply that fix, and then the code is recompiled with `X_SUPPORTED` defined, we have inadvertently changed the behaviour of the if statement due to the else being removed. Code flow when `Cond` is `true` will be:

  X();
  Y();
  Z();

where as before the fix it was:

  X();
  Z();

This patch adds checks that guard against `#endif` directives appearing between the control flow interrupter and the else and not applying the fix if they are detected.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D91485

Files:
  clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
  clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.h
  clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91485.305329.patch
Type: text/x-patch
Size: 8130 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201114/0865e108/attachment.bin>


More information about the cfe-commits mailing list