Skip to content

Commit a30d5f5

Browse files
committed
Swift: fix diagnostic source creation being called really once
1 parent 8873e42 commit a30d5f5

3 files changed

Lines changed: 11 additions & 6 deletions

File tree

swift/extractor/main.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,6 @@ int main(int argc, char** argv, char** envp) {
220220
codeql::Logger logger{"main"};
221221
LOG_INFO("calling extractor with arguments \"{}\"", argDump(argc, argv));
222222
LOG_DEBUG("environment:\n{}\n", envDump(envp));
223-
DIAGNOSE_ERROR(internal_error, "prout {}", 42);
224223
}
225224

226225
auto openInterception = codeql::setupFileInterception(configuration);

swift/log/SwiftDiagnostics.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,11 @@ inline void internal_error() {
8383
}
8484
} // namespace diagnostics
8585

86+
namespace detail {
87+
template <void (*Func)()>
88+
inline void createSwiftDiagnosticsSourceOnce() {
89+
static int ignore = (Func(), 0);
90+
std::ignore = ignore;
91+
}
92+
} // namespace detail
8693
} // namespace codeql

swift/log/SwiftLogging.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,10 @@
5050
#define DIAGNOSE_CRITICAL(ID, ...) DIAGNOSE_WITH_LEVEL(critical, ID, __VA_ARGS__)
5151
#define DIAGNOSE_ERROR(ID, ...) DIAGNOSE_WITH_LEVEL(error, ID, __VA_ARGS__)
5252

53-
#define DIAGNOSE_WITH_LEVEL(LEVEL, ID, ...) \
54-
do { \
55-
static int _ignore = (codeql::diagnostics::ID(), 0); \
56-
std::ignore = _ignore; \
57-
LOG_WITH_LEVEL_AND_CATEGORY(LEVEL, ID, __VA_ARGS__); \
53+
#define DIAGNOSE_WITH_LEVEL(LEVEL, ID, ...) \
54+
do { \
55+
codeql::detail::createSwiftDiagnosticsSourceOnce<codeql::diagnostics::ID>(); \
56+
LOG_WITH_LEVEL_AND_CATEGORY(LEVEL, ID, __VA_ARGS__); \
5857
} while (false)
5958

6059
// avoid calling into binlog's original macros

0 commit comments

Comments
 (0)