[PATCH] D145256: [clang/Diagnostic] Use `optional` to disambiguate between a `StoredDiagMessage` that is not set vs set as empty string
Argyrios Kyrtzidis via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 3 11:29:27 PST 2023
akyrtzi updated this revision to Diff 502201.
akyrtzi added a comment.
Avoid passing a new `IgnoringDiagConsumer` for the test since it's unused.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D145256/new/
https://reviews.llvm.org/D145256
Files:
clang/include/clang/Basic/Diagnostic.h
clang/lib/Basic/Diagnostic.cpp
clang/unittests/Basic/DiagnosticTest.cpp
Index: clang/unittests/Basic/DiagnosticTest.cpp
===================================================================
--- clang/unittests/Basic/DiagnosticTest.cpp
+++ clang/unittests/Basic/DiagnosticTest.cpp
@@ -9,6 +9,7 @@
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticError.h"
#include "clang/Basic/DiagnosticIDs.h"
+#include "clang/Basic/DiagnosticLex.h"
#include "gtest/gtest.h"
#include <optional>
@@ -128,4 +129,26 @@
EXPECT_EQ(*Value, std::make_pair(20, 1));
EXPECT_EQ(Value->first, 20);
}
+
+TEST(DiagnosticTest, storedDiagEmptyWarning) {
+ DiagnosticsEngine Diags(new DiagnosticIDs(), new DiagnosticOptions);
+
+ class CaptureDiagnosticConsumer : public DiagnosticConsumer {
+ public:
+ SmallVector<StoredDiagnostic> StoredDiags;
+
+ void HandleDiagnostic(DiagnosticsEngine::Level level,
+ const Diagnostic &Info) override {
+ StoredDiags.push_back(StoredDiagnostic(level, Info));
+ }
+ };
+
+ CaptureDiagnosticConsumer CaptureConsumer;
+ Diags.setClient(&CaptureConsumer, /*ShouldOwnClient=*/false);
+ Diags.Report(diag::pp_hash_warning) << "";
+ ASSERT_TRUE(CaptureConsumer.StoredDiags.size() == 1);
+
+ // Make sure an empty warning can round-trip with \c StoredDiagnostic.
+ Diags.Report(CaptureConsumer.StoredDiags.front());
+}
}
Index: clang/lib/Basic/Diagnostic.cpp
===================================================================
--- clang/lib/Basic/Diagnostic.cpp
+++ clang/lib/Basic/Diagnostic.cpp
@@ -793,8 +793,8 @@
/// array.
void Diagnostic::
FormatDiagnostic(SmallVectorImpl<char> &OutStr) const {
- if (!StoredDiagMessage.empty()) {
- OutStr.append(StoredDiagMessage.begin(), StoredDiagMessage.end());
+ if (StoredDiagMessage.has_value()) {
+ OutStr.append(StoredDiagMessage->begin(), StoredDiagMessage->end());
return;
}
Index: clang/include/clang/Basic/Diagnostic.h
===================================================================
--- clang/include/clang/Basic/Diagnostic.h
+++ clang/include/clang/Basic/Diagnostic.h
@@ -1565,7 +1565,7 @@
/// currently in-flight diagnostic.
class Diagnostic {
const DiagnosticsEngine *DiagObj;
- StringRef StoredDiagMessage;
+ std::optional<StringRef> StoredDiagMessage;
public:
explicit Diagnostic(const DiagnosticsEngine *DO) : DiagObj(DO) {}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145256.502201.patch
Type: text/x-patch
Size: 2330 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230303/954eba54/attachment.bin>
More information about the cfe-commits
mailing list