[PATCH] D153969: [clang][ExprConstant] Fix crash on uninitialized base class subobject

Takuya Shimizu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 29 08:18:41 PDT 2023


hazohelet added inline comments.


================
Comment at: clang/lib/AST/ExprConstant.cpp:2422
+              << BS.getType();
+          Info.Note(BS.getBeginLoc(), diag::note_constexpr_base_inherited_here);
+          return false;
----------------
tbaeder wrote:
> Can you pass `<< BS.getSourceRange()` here? Does that improve things?
Currently, `DiagLoc` points to the variable declaration and the `BS.getSourceRange` covers the line where the base class is inherited. This causes distant source range and thus unnecessarily many lines of snippet printing.
e.g.
```
struct Base {
  Base() = delete;
};
struct Derived : Base {
  constexpr Derived() {}
};
constexpr Derived dd;
```
Output:
```
source.cpp:7:19: error: constexpr variable 'dd' must be initialized by a constant expression
    7 | constexpr Derived dd;
      |                   ^~
source.cpp:7:19: note: constructor of base class 'Base' is not called
    7 | struct Derived : Base {
      |                  ~~~~
    8 |   constexpr Derived() {}
    9 | };
   10 | constexpr Derived dd;
      |                   ^
source.cpp:4:18: note: base class inherited here
    4 | struct Derived : Base {
      |                  ^
```
(The line numbers seem incorrect but is already reported in https://github.com/llvm/llvm-project/issues/63524)

I think we don't need two notes here because the error is already pointing to the variable declaration. Having something like the following would be succint.
```
source.cpp:7:19: error: constexpr variable 'dd' must be initialized by a constant expression
    7 | constexpr Derived dd;
      |                   ^~
source.cpp:4:18: note: constructor of base class 'Base' is not called
    4 | struct Derived : Base {
      |                  ^~~~
```
Providing source range would be beneficial because the inherited class often spans in a few lines (the code in the crashing report, for example)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D153969



More information about the cfe-commits mailing list