aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2012-07-10 01:46:04 +0000
committerRichard Trieu <rtrieu@google.com>2012-07-10 01:46:04 +0000
commit5409d28b6167032696f4915bb765a6f7db579f3f (patch)
treedc743b2dbcc4bafa092e0c8075f7de7e15fc0639 /lib
parent6241e01db93fe332004de2b2f17be6da7e960227 (diff)
Properly update the FormattedArgs vector when the template type diffing falls
back to regular type printing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159976 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/AST/ASTDiagnostic.cpp3
-rw-r--r--lib/Basic/Diagnostic.cpp9
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/AST/ASTDiagnostic.cpp b/lib/AST/ASTDiagnostic.cpp
index fbeca43090..35fcd41f26 100644
--- a/lib/AST/ASTDiagnostic.cpp
+++ b/lib/AST/ASTDiagnostic.cpp
@@ -254,7 +254,7 @@ void clang::FormatASTNodeDiagnosticArgument(
switch (Kind) {
default: llvm_unreachable("unknown ArgumentKind");
case DiagnosticsEngine::ak_qualtype_pair: {
- const TemplateDiffTypes &TDT = *reinterpret_cast<TemplateDiffTypes*>(Val);
+ TemplateDiffTypes &TDT = *reinterpret_cast<TemplateDiffTypes*>(Val);
QualType FromType =
QualType::getFromOpaquePtr(reinterpret_cast<void*>(TDT.FromType));
QualType ToType =
@@ -264,6 +264,7 @@ void clang::FormatASTNodeDiagnosticArgument(
TDT.PrintFromType, TDT.ElideType,
TDT.ShowColors, S)) {
NeedQuotes = !TDT.PrintTree;
+ TDT.TemplateDiffUsed = true;
break;
}
diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp
index d5ccd64f87..fdc37b63cb 100644
--- a/lib/Basic/Diagnostic.cpp
+++ b/lib/Basic/Diagnostic.cpp
@@ -821,6 +821,7 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd,
TDT.ToType = getRawArg(ArgNo2);
TDT.ElideType = getDiags()->ElideType;
TDT.ShowColors = getDiags()->ShowColors;
+ TDT.TemplateDiffUsed = false;
intptr_t val = reinterpret_cast<intptr_t>(&TDT);
const char *ArgumentEnd = Argument + ArgumentLen;
@@ -859,6 +860,10 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd,
Argument, ArgumentLen,
FormattedArgs.data(), FormattedArgs.size(),
OutStr, QualTypeVals);
+ if (!TDT.TemplateDiffUsed)
+ FormattedArgs.push_back(std::make_pair(DiagnosticsEngine::ak_qualtype,
+ TDT.FromType));
+
// Append middle text
FormatDiagnostic(FirstDollar + 1, SecondDollar, OutStr);
@@ -869,6 +874,10 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd,
Argument, ArgumentLen,
FormattedArgs.data(), FormattedArgs.size(),
OutStr, QualTypeVals);
+ if (!TDT.TemplateDiffUsed)
+ FormattedArgs.push_back(std::make_pair(DiagnosticsEngine::ak_qualtype,
+ TDT.ToType));
+
// Append end text
FormatDiagnostic(SecondDollar + 1, Pipe, OutStr);
break;