Commit 6ccc7b46 authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r299574:

------------------------------------------------------------------------
r299574 | nico | 2017-04-05 14:10:42 -0400 (Wed, 05 Apr 2017) | 17 lines

clang-format: Support formatting utf-8 character literals in C++11+ mode.

clang-format <<END
auto c1 = u8'a';
auto c2 = u'a';
END

Before:
  auto c1 = u8 'a';
  auto c2 = u'a';

Now:
  auto c1 = u8'a';
  auto c2 = u'a';

Patch from Denis Gladkikh <llvm@denis.gladkikh.email>!

------------------------------------------------------------------------

llvm-svn: 301463
parent a6353c45
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -734,7 +734,8 @@ the configuration (without a prefix: ``Auto``).
    Use C++03-compatible syntax.

  * ``LS_Cpp11`` (in configuration: ``Cpp11``)
    Use features of C++11 (e.g. ``A<A<int>>`` instead of ``A<A<int> >``).
    Use features of C++11, C++14 and C++1z (e.g. ``A<A<int>>`` instead of 
    ``A<A<int> >``).

  * ``LS_Auto`` (in configuration: ``Auto``)
    Automatic detection based on the input.
+2 −1
Original line number Diff line number Diff line
@@ -606,7 +606,8 @@ struct FormatStyle {
  enum LanguageStandard {
    /// Use C++03-compatible syntax.
    LS_Cpp03,
    /// Use features of C++11 (e.g. ``A<A<int>>`` instead of ``A<A<int> >``).
    /// Use features of C++11, C++14 and C++1z (e.g. ``A<A<int>>`` instead of
    /// ``A<A<int> >``).
    LS_Cpp11,
    /// Automatic detection based on the input.
    LS_Auto
+1 −0
Original line number Diff line number Diff line
@@ -1845,6 +1845,7 @@ LangOptions getFormattingLangOpts(const FormatStyle &Style) {
  LangOpts.CPlusPlus = 1;
  LangOpts.CPlusPlus11 = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1;
  LangOpts.CPlusPlus14 = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1;
  LangOpts.CPlusPlus1z = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1;
  LangOpts.LineComment = 1;
  bool AlternativeOperators = Style.Language == FormatStyle::LK_Cpp;
  LangOpts.CXXOperatorNames = AlternativeOperators ? 1 : 0;
+14 −0
Original line number Diff line number Diff line
@@ -11053,6 +11053,20 @@ TEST_F(FormatTest, AllignTrailingComments) {
                   "/* comment 3 */         \\\n",
                   getLLVMStyleWithColumns(40)));
}

TEST_F(FormatTest, UTF8CharacterLiteralCpp03) {
  format::FormatStyle Style = format::getLLVMStyle();
  Style.Standard = FormatStyle::LS_Cpp03;
  // cpp03 recognize this string as identifier u8 and literal character 'a'
  EXPECT_EQ("auto c = u8 'a';", format("auto c = u8'a';", Style));
}

TEST_F(FormatTest, UTF8CharacterLiteralCpp11) {
  // u8'a' is a C++17 feature, utf8 literal character, LS_Cpp11 covers
  // all modes, including C++11, C++14 and C++17
  EXPECT_EQ("auto c = u8'a';", format("auto c = u8'a';"));
}

} // end namespace
} // end namespace format
} // end namespace clang