From a0613170b41e78692711f7fc5528b85386a88ffc Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Tue, 30 Oct 2012 23:22:22 +0000 Subject: [PATCH] Handle string encoding diagnostics when there are too many invalid ranges. llvm-svn: 167059 --- clang/include/clang/Basic/Diagnostic.h | 4 ++++ clang/lib/Lex/LiteralSupport.cpp | 3 ++- clang/test/Misc/wrong-encoding.c | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index 9990222..e47f3e1 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -964,6 +964,10 @@ public: "Too many arguments to diagnostic!"); DiagObj->DiagFixItHints[NumFixits++] = Hint; } + + bool hasMaxRanges() const { + return NumRanges == DiagnosticsEngine::MaxRanges; + } }; inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp index 2896dc3..91edf4f 100644 --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -1425,7 +1425,8 @@ bool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *NextStart = resync_utf8(ErrorPtr, Fragment.end()); StringRef NextFragment(NextStart, Fragment.end()-NextStart); - while (!ConvertUTF8toWide(CharByteWidth, NextFragment, ResultPtr, + while (!Builder.hasMaxRanges() && + !ConvertUTF8toWide(CharByteWidth, NextFragment, ResultPtr, ErrorPtrTmp)) { const char *ErrorPtr = reinterpret_cast(ErrorPtrTmp); NextStart = resync_utf8(ErrorPtr, Fragment.end()); diff --git a/clang/test/Misc/wrong-encoding.c b/clang/test/Misc/wrong-encoding.c index db37af9..1f186b7 100644 --- a/clang/test/Misc/wrong-encoding.c +++ b/clang/test/Misc/wrong-encoding.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value %s 2>&1 | FileCheck -strict-whitespace %s +// REQUIRES: asserts void foo() { @@ -30,4 +31,7 @@ void foo() { "xxé¿xxxxxxxxxxxxxxxxxxxxxé¿xx"; // CHECK: {{^ "xxxxxxxxxxxxxxxxxxxxxxxxx";}} // CHECK: {{^ \^~~~~~~~ ~~~~~~~~}} + + "xé¿xé¿xé¿xé¿xé¿xé¿xé¿xé¿xé¿xé¿xé¿xé¿x"; } +// CHECK-NOT:Assertion -- 2.7.4