Wyatt Hepler
dd3e881a02
pw_assert: Only extern "C" in C++
...
- Use PW_EXTERN_C_* for the pw_assert_HandleFailure function.
- Specify a void parameter since this is a C function.
- Add C tests for PW_ASSERT.
Change-Id: Ica24e8f4e358381e95b3c95daab8dfc3a8669d43
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/19200
Reviewed-by: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
2020-09-29 21:44:00 +00:00
Keir Mierle
854adece94
pw_assert: Add new "light" PW_ASSERT macros
...
This introduces two new macros: PW_ASSERT() and PW_DASSERT(). These
exist to offer a lightweight assert that is safe to use in headers and
is safe for constexpr. Most of the time, these macros should not be
used, and instead the PW_CHECK() and PW_DCHECK() variants used instead.
Other changes:
- Renames PW_ASSERT_ENABLE_DCHECK to PW_ASSERT_ENABLE_DEBUG, to reflect
that the setting applies to both PW_CHECK and PW_ASSERT.
- Updates Roadamp & Status documentation sections
Testing: Since currently it is not possible to test the PW_ASSERT macros
due to needing to swap the backend, this is manually tested by flipping
the #if in pw_assert/light_test.cc to 1, and verifying that it crashes
as expected.
Change-Id: I6d2c68f772da4280e61a52576bfb6ab60e280bdf
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/17462
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Keir Mierle <keir@google.com>
2020-09-25 20:14:31 +00:00
Keir Mierle
52e4accb76
pw_assert_basic: abort() on assert failure
...
This makes pw_assert_basic trigger C's standard abort() function by
default, unless PW_ASSERT_BASIC_ABORT is defined as 0.
Below is an example session in pw watch with the abort functionality:
▒█████▄ █▓ ▄███▒ ▒█ ▒█ ░▓████▒ ░▓████▒ ▒▓████▄
▒█░ █░ ░█▒ ██▒ ▀█▒ ▒█░ █ ▒█ ▒█ ▀ ▒█ ▀ ▒█ ▀█▌
▒█▄▄▄█░ ░█▒ █▓░ ▄▄░ ▒█░ █ ▒█ ▒███ ▒███ ░█ █▌
▒█▀ ░█░ ▓█ █▓ ░█░ █ ▒█ ▒█ ▄ ▒█ ▄ ░█ ▄█▌
▒█ ░█░ ░▓███▀ ▒█▓▀▓█░ ░▓████▒ ░▓████▒ ▒▓████▀
Watching for changes. Ctrl-C to exit; enter to rebuild
20200415 21:17:32 INF Change detected: None
20200415 21:17:32 INF Starting build with 1 directories
20200415 21:17:32 INF [1/1] Starting build: out/host
ninja: Entering directory `out/host'
[1/5] ACTION //pw_assert:assert_backend_compile_test_run(//pw_toolchain:host_clang_og)
FAILED: gen/pw_assert/assert_backend_compile_test_run.pw_pystamp
python ../../pw_build/py/python_runner.py --gn-root ../../ --out-dir //out/host --touch //out/host/gen/pw_assert/assert_backend_compile_test_run.pw_pystamp --capture-output -- //pw_unit_test/py/pw_unit_test/test_runner.py --runner //targets/host/run_test --test //out/host/obj/pw_assert:assert_backend_compile_test
INF Test 1/1: [ RUN] assert_backend_compile_test
ERR /Users/keir/wrk/pigweed/targets/host/run_test exited with status 134
OUT [15726]
INF [==========] Running all tests.
INF [ RUN ] Crash.WithAndWithoutMessageArguments
INF [ OK ] Crash.WithAndWithoutMessageArguments
INF [ RUN ] Check.NoMessage
INF [ OK ] Check.NoMessage
INF [ RUN ] Check.WithMessageAndArgs
INF [ OK ] Check.WithMessageAndArgs
INF [ RUN ] Check.IntComparison
▄████▄ ██▀███ ▄▄▄ ██████ ██░ ██
▒██▀ ▀█ ▓██ ▒ ██▒ ▒████▄ ▒██ ▒ ▓██░ ██▒
▒▓█ 💥 ▄ ▓██ ░▄█ ▒ ▒██ ▀█▄ ░ ▓██▄ ▒██▀▀██░
▒▓▓▄ ▄██▒ ▒██▀▀█▄ ░██▄▄▄▄██ ▒ ██▒ ░▓█ ░██
▒ ▓███▀ ░ ░██▓ ▒██▒ ▓█ ▓██▒ ▒██████▒▒ ░▓█▒░██▓
░ ░▒ ▒ ░ ░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ ▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒
░ ▒ ░▒ ░ ▒░ ▒ ▒▒ ░ ░ ░▒ ░ ░ ▒ ░▒░ ░
░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░
░
Welp, that didn't go as planned. It seems we crashed. Terribly sorry!
CRASH MESSAGE
Check failed: x_int (=50) >= y_int (=66). Oh dear. In state: TEST
CRASH FILE & LINE
../../pw_assert/assert_backend_compile_test.cc:92
CRASH FUNCTION
PigweedTestBody
/Users/keir/wrk/pigweed/targets/host/run_test: line 18: 15727 Abort trap: 6 "$@"
INF Test 1/1: [FAIL] assert_backend_compile_test
ninja: build stopped: subcommand failed.
20200415 21:17:32 ERR [1/1] Finished build: out/host (FAIL)
20200415 21:17:32 INF Finished; some builds failed
.------------------------------------
|
| FAIL out/host
|
'------------------------------------
▄██████▒░▄▄▄ ██▓ ░██▓
▓█▓ ░▒████▄ ▓██▒ ░▓██▒
▒████▒ ░▒█▀ ▀█▄ ▒██▒ ▒██░
░▓█▒ ░░██▄▄▄▄██ ░██░ ▒██░
░▒█░ ▓█ ▓██▒░██░░ ████████▒
▒█░ ▒▒ ▓▒█░░▓ ░ ▒░▓ ░
░▒ ▒ ▒▒ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ▒ ▒ ░ ░ ░
░ ░ ░ ░ ░
Change-Id: Iaf69455c5f108b2d4d9ae1b8dc4cd6bb5902fbed
2020-04-16 21:49:21 +00:00
Armando Montanez
f7a5a742ab
Rename pw_dumb_io to pw_sys_io
...
Rename pw_dumb_io facade and backends to use the more deliberate name
pw_sys_io moving forward.
Change-Id: I968480715967ab8de491856afa1b7692b973ed7e
2020-03-03 18:19:17 +00:00
Keir Mierle
3cee879769
pw_assert: Initial assert module
...
This starts the assert and assert_basic modules, which are the beginning
of our assert foundation. Much more is needed; in particular the "tests"
don't really do much other than check for compilation.
Screenshot
==========
▄████▄ ██▀███ ▄▄▄ ██████ ██░ ██
▒██▀ ▀█ ▓██ ▒ ██▒ ▒████▄ ▒██ ▒ ▓██░ ██▒
▒▓█ 💥 ▄ ▓██ ░▄█ ▒ ▒██ ▀█▄ ░ ▓██▄ ▒██▀▀██░
▒▓▓▄ ▄██▒ ▒██▀▀█▄ ░██▄▄▄▄██ ▒ ██▒ ░▓█ ░██
▒ ▓███▀ ░ ░██▓ ▒██▒ ▓█ ▓██▒ ▒██████▒▒ ░▓█▒░██▓
░ ░▒ ▒ ░ ░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ ▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒
░ ▒ ░▒ ░ ▒░ ▒ ▒▒ ░ ░ ░▒ ░ ░ ▒ ░▒░ ░
░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░
░
Welp, that didn't go as planned. It seems we crashed. Terribly sorry!
CRASH MESSAGE
Check failed: x (=50) > y (=51300): You SHOULD see this message
CRASH FILE & LINE
../../pw_assert/assert_test.cc:46
CRASH FUNCTION
PigweedTestBody
==========
Change-Id: I9dbb460b3b33040d8009749f44b9fc174e2c8138
2020-02-07 23:18:07 +00:00