[llvm-branch-commits] Address review feedback (PR #113367)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Oct 22 12:06:46 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
Author: Steven Wu (cachemeifyoucan)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/113367.diff
2 Files Affected:
- (modified) llvm/include/llvm/Support/raw_ostream_proxy.h (+23-9)
- (modified) llvm/unittests/Support/raw_ostream_proxy_test.cpp (+3-3)
``````````diff
diff --git a/llvm/include/llvm/Support/raw_ostream_proxy.h b/llvm/include/llvm/Support/raw_ostream_proxy.h
index 093d0a927833f1..d661ccbbbd616c 100644
--- a/llvm/include/llvm/Support/raw_ostream_proxy.h
+++ b/llvm/include/llvm/Support/raw_ostream_proxy.h
@@ -17,7 +17,6 @@ namespace llvm {
/// template instantions.
class raw_ostream_proxy_adaptor_base {
protected:
- raw_ostream_proxy_adaptor_base() = delete;
raw_ostream_proxy_adaptor_base(const raw_ostream_proxy_adaptor_base &) =
delete;
@@ -72,8 +71,7 @@ class raw_ostream_proxy_adaptor_base {
/// changeColor(), resetColor(), and \a reverseColor() are not forwarded, since
/// they need to call \a flush() and the buffer lives in the proxy.
template <class RawOstreamT = raw_ostream>
-class raw_ostream_proxy_adaptor : public RawOstreamT,
- public raw_ostream_proxy_adaptor_base {
+class raw_ostream_proxy_adaptor : public RawOstreamT {
void write_impl(const char *Ptr, size_t Size) override {
getProxiedOS().write(Ptr, Size);
}
@@ -92,23 +90,39 @@ class raw_ostream_proxy_adaptor : public RawOstreamT,
RawOstreamT::enable_colors(enable);
getProxiedOS().enable_colors(enable);
}
+ bool hasProxiedOS() const { return OS; }
+ raw_ostream &getProxiedOS() const {
+ assert(OS && "raw_ostream_proxy_adaptor use after reset");
+ return *OS;
+ }
+ size_t getPreferredBufferSize() const { return PreferredBufferSize; }
~raw_ostream_proxy_adaptor() override { resetProxiedOS(); }
protected:
template <class... ArgsT>
explicit raw_ostream_proxy_adaptor(raw_ostream &OS, ArgsT &&...Args)
- : RawOstreamT(std::forward<ArgsT>(Args)...),
- raw_ostream_proxy_adaptor_base(OS) {}
+ : RawOstreamT(std::forward<ArgsT>(Args)...), OS(&OS),
+ PreferredBufferSize(OS.GetBufferSize()) {
+ // Drop OS's buffer to make this->flush() forward. This proxy will add a
+ // buffer in its place.
+ OS.SetUnbuffered();
+ }
/// Stop proxying the stream. Flush and set up a crash for future writes.
///
/// For example, this can simplify logic when a subclass might have a longer
/// lifetime than the stream it proxies.
void resetProxiedOS() {
- raw_ostream_proxy_adaptor_base::resetProxiedOS(*this);
+ OS->SetUnbuffered();
+ OS = nullptr;
}
- void resetProxiedOS(raw_ostream &) = delete;
+
+private:
+ raw_ostream *OS;
+
+ /// Caches the value of OS->GetBufferSize() at construction time.
+ size_t PreferredBufferSize;
};
/// Adaptor for creating a stream that proxies a \a raw_pwrite_stream.
@@ -134,7 +148,7 @@ class raw_pwrite_stream_proxy_adaptor
}
};
-/// Non-owning proxy for a \a raw_ostream. Enables passing a stream into of an
+/// Non-owning proxy for a \a raw_ostream. Enables passing a stream into an
/// API that takes ownership.
class raw_ostream_proxy : public raw_ostream_proxy_adaptor<> {
void anchor() override;
@@ -144,7 +158,7 @@ class raw_ostream_proxy : public raw_ostream_proxy_adaptor<> {
};
/// Non-owning proxy for a \a raw_pwrite_stream. Enables passing a stream
-/// into of an API that takes ownership.
+/// into an API that takes ownership.
class raw_pwrite_stream_proxy : public raw_pwrite_stream_proxy_adaptor<> {
void anchor() override;
diff --git a/llvm/unittests/Support/raw_ostream_proxy_test.cpp b/llvm/unittests/Support/raw_ostream_proxy_test.cpp
index ee97fe65b66003..1233ed54fd5a52 100644
--- a/llvm/unittests/Support/raw_ostream_proxy_test.cpp
+++ b/llvm/unittests/Support/raw_ostream_proxy_test.cpp
@@ -22,7 +22,7 @@ class BufferedNoPwriteSmallVectorStream : public raw_ostream {
public:
// Choose a strange buffer size to ensure it doesn't collide with the default
// on \a raw_ostream.
- constexpr static const size_t PreferredBufferSize = 63;
+ static constexpr size_t PreferredBufferSize = 63;
size_t preferred_buffer_size() const override { return PreferredBufferSize; }
uint64_t current_pos() const override { return Vector.size(); }
@@ -40,7 +40,7 @@ class BufferedNoPwriteSmallVectorStream : public raw_ostream {
bool IsDisplayed = false;
};
-constexpr const size_t BufferedNoPwriteSmallVectorStream::PreferredBufferSize;
+constexpr size_t BufferedNoPwriteSmallVectorStream::PreferredBufferSize;
TEST(raw_ostream_proxyTest, write) {
// Besides confirming that "write" works, this test confirms that the proxy
@@ -157,7 +157,7 @@ TEST(raw_ostream_proxyTest, resetProxiedOS) {
EXPECT_EQ(0u, ProxyOS.GetBufferSize());
EXPECT_FALSE(ProxyOS.hasProxiedOS());
-#if GTEST_HAS_DEATH_TEST
+#if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
EXPECT_DEATH(ProxyOS << "e", "use after reset");
EXPECT_DEATH(ProxyOS.getProxiedOS(), "use after reset");
#endif
``````````
</details>
https://github.com/llvm/llvm-project/pull/113367
More information about the llvm-branch-commits
mailing list