[flang-commits] [flang] d5dd7d2 - [flang] Tidy uses of raw_string_ostream (NFC)
Youngsuk Kim via flang-commits
flang-commits at lists.llvm.org
Tue Sep 17 10:20:36 PDT 2024
Author: Youngsuk Kim
Date: 2024-09-17T12:20:21-05:00
New Revision: d5dd7d230ecaf8242f4429a5e3653e16bf55bcd6
URL: https://github.com/llvm/llvm-project/commit/d5dd7d230ecaf8242f4429a5e3653e16bf55bcd6
DIFF: https://github.com/llvm/llvm-project/commit/d5dd7d230ecaf8242f4429a5e3653e16bf55bcd6.diff
LOG: [flang] Tidy uses of raw_string_ostream (NFC)
As specified in the docs,
1) raw_string_ostream is always unbuffered and
2) the underlying buffer may be used directly
( 65b13610a5226b84889b923bae884ba395ad084d for further reference )
Avoid unneeded calls to raw_string_ostream::str(), to avoid excess indirection.
Added:
Modified:
flang/include/flang/Parser/dump-parse-tree.h
flang/lib/Evaluate/formatting.cpp
flang/lib/Parser/prescan.cpp
flang/lib/Semantics/expression.cpp
flang/lib/Semantics/pointer-assignment.cpp
flang/lib/Semantics/scope.cpp
flang/lib/Semantics/tools.cpp
flang/lib/Semantics/type.cpp
flang/unittests/Evaluate/real.cpp
flang/unittests/Frontend/CodeGenActionTest.cpp
flang/unittests/Frontend/CompilerInstanceTest.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index 37c3370b48a085..0b4ebcbaa24c40 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -875,7 +875,7 @@ class ParseTreeDumper {
ss << x;
}
if (ss.tell()) {
- return ss.str();
+ return buf;
}
if constexpr (std::is_same_v<T, Name>) {
return x.source.ToString();
diff --git a/flang/lib/Evaluate/formatting.cpp b/flang/lib/Evaluate/formatting.cpp
index 0870d56549f74d..3581b9c96c19bf 100644
--- a/flang/lib/Evaluate/formatting.cpp
+++ b/flang/lib/Evaluate/formatting.cpp
@@ -563,7 +563,7 @@ std::string ExpressionBase<RESULT>::AsFortran() const {
std::string buf;
llvm::raw_string_ostream ss{buf};
AsFortran(ss);
- return ss.str();
+ return buf;
}
template <typename RESULT>
@@ -604,7 +604,7 @@ static std::string DerivedTypeSpecAsFortran(
if (ch != '(') {
ss << ')';
}
- return ss.str();
+ return buf;
}
llvm::raw_ostream &StructureConstructor::AsFortran(llvm::raw_ostream &o) const {
diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp
index b594df8ecb6858..b231c5859cf873 100644
--- a/flang/lib/Parser/prescan.cpp
+++ b/flang/lib/Parser/prescan.cpp
@@ -1098,7 +1098,7 @@ void Prescanner::FortranInclude(const char *firstQuote) {
const SourceFile *included{
allSources_.Open(path, error, std::move(prependPath))};
if (!included) {
- Say(provenance, "INCLUDE: %s"_err_en_US, error.str());
+ Say(provenance, "INCLUDE: %s"_err_en_US, buf);
} else if (included->bytes() > 0) {
ProvenanceRange includeLineRange{
provenance, static_cast<std::size_t>(p - nextLine_)};
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 072ebe172f45a9..182ea5d441956c 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -3223,7 +3223,7 @@ void ExpressionAnalyzer::Analyze(const parser::CallStmt &callStmt) {
llvm::raw_string_ostream dump{buf};
parser::DumpTree(dump, callStmt);
Say("Internal error: Expression analysis failed on CALL statement: %s"_err_en_US,
- dump.str());
+ buf);
}
}
}
@@ -3847,8 +3847,7 @@ MaybeExpr ExpressionAnalyzer::ExprOrVariable(
std::string buf;
llvm::raw_string_ostream dump{buf};
parser::DumpTree(dump, x);
- Say("Internal error: Expression analysis failed on: %s"_err_en_US,
- dump.str());
+ Say("Internal error: Expression analysis failed on: %s"_err_en_US, buf);
}
return std::nullopt;
}
diff --git a/flang/lib/Semantics/pointer-assignment.cpp b/flang/lib/Semantics/pointer-assignment.cpp
index 4948fce77a2502..2813a0cf968cbd 100644
--- a/flang/lib/Semantics/pointer-assignment.cpp
+++ b/flang/lib/Semantics/pointer-assignment.cpp
@@ -353,7 +353,7 @@ bool PointerAssignmentChecker::Check(const evaluate::Designator<T> &d) {
std::string buf;
llvm::raw_string_ostream ss{buf};
d.AsFortran(ss);
- Say(*m, description_, ss.str());
+ Say(*m, description_, buf);
} else {
Say(std::get<MessageFormattedText>(*msg));
}
diff --git a/flang/lib/Semantics/scope.cpp b/flang/lib/Semantics/scope.cpp
index 89128e4a5049b1..6ee53cde56866c 100644
--- a/flang/lib/Semantics/scope.cpp
+++ b/flang/lib/Semantics/scope.cpp
@@ -47,7 +47,7 @@ std::string EquivalenceObject::AsFortran() const {
if (substringStart) {
ss << '(' << *substringStart << ":)";
}
- return ss.str();
+ return buf;
}
Scope &Scope::MakeScope(Kind kind, Symbol *symbol) {
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 8d16ab71008766..3723b28fecef52 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -440,7 +440,7 @@ static void CheckMissingAnalysis(
llvm::raw_string_ostream ss{buf};
ss << "node has not been analyzed:\n";
parser::DumpTree(ss, x);
- common::die(ss.str().c_str());
+ common::die(buf.c_str());
}
}
diff --git a/flang/lib/Semantics/type.cpp b/flang/lib/Semantics/type.cpp
index aa6e8973ebd304..810b9829b0b8db 100644
--- a/flang/lib/Semantics/type.cpp
+++ b/flang/lib/Semantics/type.cpp
@@ -658,7 +658,7 @@ std::string DerivedTypeSpec::VectorTypeAsFortran() const {
case (Fortran::semantics::DerivedTypeSpec::Category::DerivedType):
Fortran::common::die("Vector element type not implemented");
}
- return ss.str();
+ return buf;
}
std::string DerivedTypeSpec::AsFortran() const {
@@ -694,7 +694,7 @@ std::string DerivedTypeSpec::AsFortran() const {
}
ss << ')';
}
- return ss.str();
+ return buf;
}
llvm::raw_ostream &operator<<(llvm::raw_ostream &o, const DerivedTypeSpec &x) {
@@ -771,7 +771,7 @@ std::string ParamValue::AsFortran() const {
std::string buf;
llvm::raw_string_ostream ss{buf};
expr_->AsFortran(ss);
- return ss.str();
+ return buf;
} else {
return "";
}
@@ -795,7 +795,7 @@ static std::string KindAsFortran(const KindExpr &kind) {
} else {
kind.AsFortran(ss);
}
- return ss.str();
+ return buf;
}
std::string IntrinsicTypeSpec::AsFortran() const {
diff --git a/flang/unittests/Evaluate/real.cpp b/flang/unittests/Evaluate/real.cpp
index ccbaf81f054cb5..a6152d346762fa 100644
--- a/flang/unittests/Evaluate/real.cpp
+++ b/flang/unittests/Evaluate/real.cpp
@@ -158,10 +158,9 @@ template <typename R> void basicTests(int rm, Rounding rounding) {
TEST(ivf.flags.empty())(ldesc);
MATCH(x, ivf.value.ToUInt64())(ldesc);
if (rounding.mode == RoundingMode::TiesToEven) { // to match stold()
- std::string buf;
- llvm::raw_string_ostream ss{buf};
+ std::string decimal;
+ llvm::raw_string_ostream ss{decimal};
vr.value.AsFortran(ss, kind, false /*exact*/);
- std::string decimal{ss.str()};
const char *p{decimal.data()};
MATCH(x, static_cast<std::uint64_t>(std::stold(decimal)))
("%s %s", ldesc, p);
@@ -424,14 +423,13 @@ void subsetTests(int pass, Rounding rounding, std::uint32_t opds) {
("%d IsInfinite(0x%jx)", pass, static_cast<std::intmax_t>(rj));
static constexpr int kind{REAL::bits / 8};
- std::string ssBuf, cssBuf;
- llvm::raw_string_ostream ss{ssBuf};
+ std::string s, cssBuf;
+ llvm::raw_string_ostream ss{s};
llvm::raw_string_ostream css{cssBuf};
x.AsFortran(ss, kind, false /*exact*/);
- std::string s{ss.str()};
if (IsNaN(rj)) {
css << "(0._" << kind << "/0.)";
- MATCH(css.str(), s)
+ MATCH(cssBuf, s)
("%d invalid(0x%jx)", pass, static_cast<std::intmax_t>(rj));
} else if (IsInfinite(rj)) {
css << '(';
@@ -439,7 +437,7 @@ void subsetTests(int pass, Rounding rounding, std::uint32_t opds) {
css << '-';
}
css << "1._" << kind << "/0.)";
- MATCH(css.str(), s)
+ MATCH(cssBuf, s)
("%d overflow(0x%jx)", pass, static_cast<std::intmax_t>(rj));
} else {
const char *p = s.data();
diff --git a/flang/unittests/Frontend/CodeGenActionTest.cpp b/flang/unittests/Frontend/CodeGenActionTest.cpp
index 9d798c7678ad15..5d75de03d4e55c 100644
--- a/flang/unittests/Frontend/CodeGenActionTest.cpp
+++ b/flang/unittests/Frontend/CodeGenActionTest.cpp
@@ -103,7 +103,7 @@ TEST(CodeGenAction, GracefullyHandleLLVMConversionFailure) {
action.setCurrentInput(file);
consumeError(action.execute());
- ASSERT_EQ(diagnosticsOS.str(),
+ ASSERT_EQ(diagnosticOutput,
"error: Lowering to LLVM IR failed\n"
"error: failed to create the LLVM module\n");
}
diff --git a/flang/unittests/Frontend/CompilerInstanceTest.cpp b/flang/unittests/Frontend/CompilerInstanceTest.cpp
index 35f1ec1748a3f6..3fe2f063e996a8 100644
--- a/flang/unittests/Frontend/CompilerInstanceTest.cpp
+++ b/flang/unittests/Frontend/CompilerInstanceTest.cpp
@@ -90,6 +90,6 @@ TEST(CompilerInstance, AllowDiagnosticLogWithUnownedDiagnosticConsumer) {
// 6. Verify that the reported diagnostic wasn't lost and did end up in the
// output stream
- ASSERT_EQ(diagnosticsOS.str(), "error: expected no crash\n");
+ ASSERT_EQ(diagnosticOutput, "error: expected no crash\n");
}
} // namespace
More information about the flang-commits
mailing list