[clang-format] Don't detect C++11 attribute specifiers as ObjC
authorBen Hamilton <benhamilton@google.com>
Mon, 12 Mar 2018 15:42:38 +0000 (15:42 +0000)
committerBen Hamilton <benhamilton@google.com>
Mon, 12 Mar 2018 15:42:38 +0000 (15:42 +0000)
commitb060ad870f4e3770e4d5b2ca149c59669f8d56b8
treec91875cc52ef6d383d7a48f6527e0244ea1ceebf
parentbc216b440f02b335a3118266ee07f7e2c1d987cb
[clang-format] Don't detect C++11 attribute specifiers as ObjC

Summary:
Previously, clang-format would detect C++11 and C++17 attribute
specifiers like the following as Objective-C method invocations:

  [[noreturn]];
  [[clang::fallthrough]];
  [[noreturn, deprecated("so sorry")]];
  [[using gsl: suppress("type")]];

To fix this, I ported part of the logic from
tools/clang/lib/Parse/ParseTentative.cpp into TokenAnnotator.cpp so we
can explicitly parse and identify C++11 attribute specifiers.

This allows the guessLanguage() and getStyle() APIs to correctly
guess files containing the C++11 attribute specifiers as C++,
not Objective-C.

Test Plan: New tests added. Ran tests with:
  make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: krasimir, jolesiak, djasper

Reviewed By: djasper

Subscribers: aaron.ballman, cfe-commits, klimek

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

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