summaryrefslogtreecommitdiffstats
path: root/clang/lib/Format/Format.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2013-06-28 12:51:24 +0000
committerAlexander Kornienko <alexfh@google.com>2013-06-28 12:51:24 +0000
commit1e80887d6314e3d34b0f1c4aa6ffef9999fba8ec (patch)
tree95b6fc8726f3ece5862b9f9c5f91b347657b451e /clang/lib/Format/Format.cpp
parent002d764f215717f75e40f7e23139a6048bd5c1a3 (diff)
downloadbcm5719-llvm-1e80887d6314e3d34b0f1c4aa6ffef9999fba8ec.tar.gz
bcm5719-llvm-1e80887d6314e3d34b0f1c4aa6ffef9999fba8ec.zip
Use lexing mode based on FormatStyle.Standard.
Summary: Some valid pre-C++11 constructs change meaning when lexed in C++11 mode, e.g. #define x(_a) printf("foo"_a); (example from http://llvm.org/bugs/show_bug.cgi?id=16342). "foo"_a is treated as a user-defined string literal when parsed in C++11 mode. In order to deal with this correctly, we need to set lexing mode according to which standard the code conforms to. We already have a configuration value for this (FormatStyle.Standard), which seems to be appropriate to use in this case as well. Reviewers: klimek CC: cfe-commits, gribozavr Differential Revision: http://llvm-reviews.chandlerc.com/D1028 llvm-svn: 185149
Diffstat (limited to 'clang/lib/Format/Format.cpp')
-rw-r--r--clang/lib/Format/Format.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 766be71bbdf..7d6bc14241e 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1660,7 +1660,8 @@ tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
SourceMgr.overrideFileContents(Entry, Buf);
FileID ID =
SourceMgr.createFileID(Entry, SourceLocation(), clang::SrcMgr::C_User);
- Lexer Lex(ID, SourceMgr.getBuffer(ID), SourceMgr, getFormattingLangOpts());
+ Lexer Lex(ID, SourceMgr.getBuffer(ID), SourceMgr,
+ getFormattingLangOpts(Style.Standard));
SourceLocation StartOfFile = SourceMgr.getLocForStartOfFile(ID);
std::vector<CharSourceRange> CharRanges;
for (unsigned i = 0, e = Ranges.size(); i != e; ++i) {
@@ -1671,10 +1672,10 @@ tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
return reformat(Style, Lex, SourceMgr, CharRanges);
}
-LangOptions getFormattingLangOpts() {
+LangOptions getFormattingLangOpts(FormatStyle::LanguageStandard Standard) {
LangOptions LangOpts;
LangOpts.CPlusPlus = 1;
- LangOpts.CPlusPlus11 = 1;
+ LangOpts.CPlusPlus11 = Standard == FormatStyle::LS_Cpp03 ? 0 : 1;
LangOpts.LineComment = 1;
LangOpts.Bool = 1;
LangOpts.ObjC1 = 1;
OpenPOWER on IntegriCloud