diff --git a/swift/logging/SwiftDiagnostics.cpp b/swift/logging/SwiftDiagnostics.cpp index 0c3ae0fe88e..9a20830e1ff 100644 --- a/swift/logging/SwiftDiagnostics.cpp +++ b/swift/logging/SwiftDiagnostics.cpp @@ -5,8 +5,17 @@ #include "absl/strings/str_join.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_split.h" +#include "swift/logging/SwiftAssert.h" namespace codeql { + +namespace { +Logger& logger() { + static Logger ret{"diagnostics"}; + return ret; +} +} // namespace + void SwiftDiagnosticsSource::emit(std::ostream& out, std::string_view timestamp, std::string_view message) const { @@ -36,6 +45,10 @@ std::string SwiftDiagnosticsSource::sourceId() const { std::replace(ret.begin(), ret.end(), '_', '-'); return ret; } +void SwiftDiagnosticsSource::inscribeImpl(const SwiftDiagnosticsSource* source) { + auto [it, inserted] = map().emplace(source->id, source); + CODEQL_ASSERT(inserted, "duplicate diagnostics source detected with id {}", source->id); +} void SwiftDiagnosticsDumper::write(const char* buffer, std::size_t bufferSize) { binlog::Range range{buffer, bufferSize}; diff --git a/swift/logging/SwiftDiagnostics.h b/swift/logging/SwiftDiagnostics.h index 73e81af26bf..566b56ad99a 100644 --- a/swift/logging/SwiftDiagnostics.h +++ b/swift/logging/SwiftDiagnostics.h @@ -31,10 +31,7 @@ struct SwiftDiagnosticsSource { template static void inscribe() { static std::once_flag once; - std::call_once(once, [] { - auto [it, inserted] = map().emplace(Spec->id, Spec); - assert(inserted); - }); + std::call_once(once, inscribeImpl, Spec); } // gets a previously inscribed SwiftDiagnosticsSource for the given id. Will abort if none exists @@ -47,6 +44,8 @@ struct SwiftDiagnosticsSource { void emit(std::ostream& out, std::string_view timestamp, std::string_view message) const; private: + static void inscribeImpl(const SwiftDiagnosticsSource* Spec); + std::string sourceId() const; using Map = std::unordered_map;