[PATCH] D146358: [clang][AST] Print name instead of type when diagnosing uninitialized subobject in constexpr variables

Takuya Shimizu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 17 06:19:27 PDT 2023


hazohelet added a comment.

In D146358#4268327 <https://reviews.llvm.org/D146358#4268327>, @tbaeder wrote:

> So, if I understand the code correctly, we call `CheckEvaluationResult` with `SubObjectDecl=nullptr` when we're not checking an actual field but just an array/record, so we can't run into this problem anyway, so the assert seems fine.
>
> I don't fully understand the problem with the `gnu::weak` stuff, in any case, adding it to  this patch seems wrong. https://godbolt.org/z/qn997n85n //does// emit a note, but it's not the one this patch is about, so is that even relevant?

Thanks. I opened another differential for the `gnu::weak` stuff (D148419 <https://reviews.llvm.org/D148419>).
If my understanding is correct, `Info.FFDiag` displays only the note of its first call and discard the notes after it. So, the uninitialized-note is not displayed.
You can confirm this by deleting only the FFDiag call (https://github.com/llvm/llvm-project/blob/6f7e5c0f1ac6cc3349a2e1479ac4208465b272c6/clang/lib/AST/ExprConstant.cpp#L13143-L13144) from the clang trunk and compile my godbolt code to see the note (`note: subobject of type 'const bool' is not initialized`)
Although the `return true` says the `[[gnu::weak]]` member pointer comparison is valid, constexpr engine considers the constant initialization has failed if there is note emitted during the initializer evaluation(https://github.com/llvm/llvm-project/blob/6f7e5c0f1ac6cc3349a2e1479ac4208465b272c6/clang/lib/AST/Decl.cpp#L2591-L2592) and it's why `[[gnu::weak]]` comparison note is actually emitted in spite of the wrong signal about the validness of the expression.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146358/new/

https://reviews.llvm.org/D146358



More information about the cfe-commits mailing list