[PATCH] D130894: [clang] Print more information about failed static assertions

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 5 05:34:49 PDT 2022

aaron.ballman added reviewers: erichkeane, cjdb, clang-language-wg, jyknight.
aaron.ballman added a comment.

In D130894#3701749 <https://reviews.llvm.org/D130894#3701749>, @tbaeder wrote:

> For the record, the output now looks something like this:
>   test.cpp:24:1: error: static assertion failed due to requirement 'c != c'
>   static_assert(c != c);
>   ^             ~~~~~~
>   test.cpp:24:17: note: expression evaluates to '('0' != '0')'
>   static_assert(c != c);
>                 ~~^~~~

This looks hard to read to me...

> test.cpp:25:1: error: static assertion failed due to requirement 'c > 'a''
> static_assert(c > 'a');
> ^             ~~~~~~~
> test.cpp:25:17: note: expression evaluates to '('0' > 'a')'

Same confusion here -- it took me a while to realize what's happening is that we're quoting the part outside of the parens and that's throwing me for a loop. We typically quote things that are syntax but in this case, the parens are not part of the syntax and so the surrounding quotes are catching me. Given that parens are being used as a visual delimiter and a single quote serves the same purpose, I would expect something more like:

  test.cpp:25:17: note: expression evaluates to ''0' > 'a''
  test.cpp:26:17: note: expression evaluates to '0 > 'a''
  test.cpp:27:17: note: expression evaluates to '14 > 5'
  test.cpp:28:17: note: expression evaluates to 'true == false'
  test.cpp:29:17: note: expression evaluates to 'nullptr != nullptr'

Adding a few more folks as reviewers to see if there is a consensus position on how to proceed.



More information about the cfe-commits mailing list