summaryrefslogtreecommitdiff
path: root/absl/log
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2023-04-24 07:41:57 -0700
committerGravatar Copybara-Service <copybara-worker@google.com>2023-04-24 07:43:07 -0700
commit43e07a0ee0ee1111186a69bf32f65a0a2a24e387 (patch)
treed459073caf31751ac275d6d7bc42676721bd8fb6 /absl/log
parent70af93e91542b236dd3acf680cf43334e617dadc (diff)
Fix handling of `CHECK` macros in static analysis tools.
Currently static analysis tools built using the Clang Dataflow Analysis framework can't prove that code under `switch (0) case 0:` is executed on all paths. The Clang Dataflow Analysis framework should ultimately be improved to handle these cases. In the meantime, to enable the use of such tools in their current state, we add a `default` case back to the `switch` statement in `ABSL_LOG_INTERNAL_STATELESS_CONDITION` to help them understand that the code is executed on all paths. PiperOrigin-RevId: 526638852 Change-Id: I49490dd477ba777aae2530697b75b583242aebc5
Diffstat (limited to 'absl/log')
-rw-r--r--absl/log/internal/conditions.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/absl/log/internal/conditions.h b/absl/log/internal/conditions.h
index b89f1dfd..b3ce2574 100644
--- a/absl/log/internal/conditions.h
+++ b/absl/log/internal/conditions.h
@@ -56,9 +56,15 @@
// the ternary expression does a better job avoiding spurious diagnostics
// (dangling else, missing switch case) and preserving noreturn semantics (e.g.
// on `LOG(FATAL)`) without requiring braces.
+//
+// The `switch` ensures that this expansion is the begnning of a statement (as
+// opposed to an expression) and prevents shenanigans like
+// `AFunction(LOG(INFO))` and `decltype(LOG(INFO))`. The apparently-redundant
+// `default` case makes the condition more amenable to Clang dataflow analysis.
#define ABSL_LOG_INTERNAL_STATELESS_CONDITION(condition) \
switch (0) \
case 0: \
+ default: \
!(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
// `ABSL_LOG_INTERNAL_STATEFUL_CONDITION` applies a condition like