https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96003
Bug ID: 96003
Summary: Maybe a false positive for -Werror=nonnull
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: marxin at gcc dot gnu.org
CC: msebor at gcc dot gnu.org
Target Milestone: ---
It's reduced from inkscape project. Happens since r11-1697-g75ff24e1920ea6b1:
$ cat /tmp/folis.ii
class Managed {};
class Anchored {
public:
void release();
Managed _anchor;
};
template <typename R> void release(R r) {
static_cast<Anchored *>(r)->release();
}
class Selection : Managed, public Anchored {};
class AppSelectionModel {
AppSelectionModel() { release(new Selection); }
};
$ g++ /tmp/folis.ii -Werror=nonnull
/tmp/folis.ii: In instantiation of ‘void release(R) [with R = Selection*]’:
/tmp/folis.ii:12:46: required from here
/tmp/folis.ii:8:38: error: ‘this’ pointer null [-Werror=nonnull]
8 | static_cast<Anchored *>(r)->release();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/tmp/folis.ii:4:8: note: in a call to non-static member function ‘void
Anchored::release()’
4 | void release();
| ^~~~~~~
cc1plus: some warnings being treated as errors