clang-format: Support `if CONSTEXPR` if CONSTEXPR is a macro.
authorNico Weber <nicolasweber@gmx.de>
Sat, 27 Jul 2019 02:41:40 +0000 (02:41 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sat, 27 Jul 2019 02:41:40 +0000 (02:41 +0000)
commit1361a4c2d8b000c3e9441f956b8213e4c6d37075
treece7ea5330099a981ab8773f3ccf1de425f68e698
parent92a2e1bbb900cb0ba24ed2d441baebff0ce88988
clang-format: Support `if CONSTEXPR` if CONSTEXPR is a macro.

This is like r305666 (which added support for `if constexpr`) except
that it allows a macro name after the if.

This is slightly tricky for two reasons:

1. r305666 didn't add test coverage for all cases where it added a
   kw_constexpr, so I had to figure out what all the added cases were
   for. I now added tests for all `if constexpr` bits that didn't have
   tests. (This took a while, see e.g. https://reviews.llvm.org/D65223)

2. Parsing `if <ident> (` as an if means that `#if defined(` and
   `#if __has_include(` parse as ifs too. Add some special-case code
   to prevent this from happening where it's incorrect.

Fixes PR39248.

Differential Revision: https://reviews.llvm.org/D65227

llvm-svn: 367167
clang/lib/Format/ContinuationIndenter.cpp
clang/lib/Format/FormatToken.h
clang/lib/Format/TokenAnnotator.cpp
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp