pw_assert: Prevent double evaluation in PW_CHECK_OK

- Previously, the PW_CHECK_OK expression was evaluated twice: once in
  the if statement, and, when the CHECK failed, again in
  pw_StatusString. Now the status is stored in a variable before it is
  checked.
- Update the multi-evaluation tests to avoid using global state.
- Switch from #if PW_ASSERT_ENABLE_DEBUG to a constant to avoid
  duplication and the risk of code rot.
- Add multi-evaluation tests for PW_CHECK_OK and PW_DCHECK_OK.

Change-Id: Ic6895eff2daf4a06eda833dba9a0d61a0c2922fa
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/55504
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
3 files changed
tree: 771797cbab5d42460bc5fb9b536c0ad7cefdc7fa
  1. build_overrides/
  2. docker/
  3. docs/
  4. pw_allocator/
  5. pw_analog/
  6. pw_arduino_build/
  7. pw_assert/
  8. pw_assert_basic/
  9. pw_assert_log/
  10. pw_base64/
  11. pw_bloat/
  12. pw_blob_store/
  13. pw_boot/
  14. pw_boot_cortex_m/
  15. pw_build/
  16. pw_bytes/
  17. pw_checksum/
  18. pw_chrono/
  19. pw_chrono_embos/
  20. pw_chrono_freertos/
  21. pw_chrono_stl/
  22. pw_chrono_threadx/
  23. pw_cli/
  24. pw_console/
  25. pw_containers/
  26. pw_cpu_exception/
  27. pw_cpu_exception_cortex_m/
  28. pw_crypto/
  29. pw_docgen/
  30. pw_doctor/
  31. pw_env_setup/
  32. pw_function/
  33. pw_fuzzer/
  34. pw_hdlc/
  35. pw_hex_dump/
  36. pw_i2c/
  37. pw_interrupt/
  38. pw_interrupt_cortex_m/
  39. pw_kvs/
  40. pw_libc/
  41. pw_log/
  42. pw_log_basic/
  43. pw_log_null/
  44. pw_log_rpc/
  45. pw_log_tokenized/
  46. pw_malloc/
  47. pw_malloc_freelist/
  48. pw_metric/
  49. pw_minimal_cpp_stdlib/
  50. pw_module/
  51. pw_multisink/
  52. pw_package/
  53. pw_persistent_ram/
  54. pw_polyfill/
  55. pw_preprocessor/
  56. pw_presubmit/
  57. pw_protobuf/
  58. pw_protobuf_compiler/
  59. pw_random/
  60. pw_result/
  61. pw_ring_buffer/
  62. pw_router/
  63. pw_rpc/
  64. pw_snapshot/
  65. pw_span/
  66. pw_status/
  67. pw_stm32cube_build/
  68. pw_stream/
  69. pw_string/
  70. pw_symbolizer/
  71. pw_sync/
  72. pw_sync_baremetal/
  73. pw_sync_embos/
  74. pw_sync_freertos/
  75. pw_sync_stl/
  76. pw_sync_threadx/
  77. pw_sys_io/
  78. pw_sys_io_arduino/
  79. pw_sys_io_baremetal_lm3s6965evb/
  80. pw_sys_io_baremetal_stm32f429/
  81. pw_sys_io_stdio/
  82. pw_target_runner/
  83. pw_thread/
  84. pw_thread_embos/
  85. pw_thread_freertos/
  86. pw_thread_stl/
  87. pw_thread_threadx/
  88. pw_tls_client/
  89. pw_tls_client_boringssl/
  90. pw_tls_client_mbedtls/
  91. pw_tokenizer/
  92. pw_tool/
  93. pw_toolchain/
  94. pw_trace/
  95. pw_trace_tokenized/
  96. pw_transfer/
  97. pw_unit_test/
  98. pw_varint/
  99. pw_watch/
  100. pw_web_ui/
  101. targets/
  102. third_party/
  103. .bazelignore
  104. .bazelrc
  105. .clang-format
  106. .eslintrc.json
  107. .gitattributes
  108. .gitignore
  109. .gn
  110. .prettierrc.js
  111. .pylintrc
  112. activate.bat
  113. AUTHORS
  114. bootstrap.bat
  115. bootstrap.sh
  116. BUILD.bazel
  117. BUILD.gn
  118. BUILDCONFIG.gn
  119. CMakeLists.txt
  120. LICENSE
  121. modules.gni
  122. OWNERS
  123. package.json
  124. PW_PLUGINS
  125. README.md
  126. tsconfig.json
  127. WORKSPACE
  128. yarn.lock
README.md

See our website: http://pigweed.dev