public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/113047] New: dereferencing a null pointer in a constant expression @ 2023-12-16 21:01 gcc_bz at brnz dot org 2023-12-16 21:02 ` [Bug c++/113047] " gcc_bz at brnz dot org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: gcc_bz at brnz dot org @ 2023-12-16 21:01 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 Bug ID: 113047 Summary: dereferencing a null pointer in a constant expression Product: gcc Version: 13.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc_bz at brnz dot org Target Milestone: --- Should it be possible to dereference a null pointer in a C++20 constant expression? Consider this c++20 code: struct T { constexpr bool isNull() { return !this; } }; static_assert(((T*)nullptr)->isNull()); constexpr T* t = nullptr; static_assert((*t).isNull()); I would expect this to not compile due to the dereferencing of a null pointer in a constant expression. With reference to https://godbolt.org/z/q53rz5d69 By default, gcc-13.2 compiles without warning. -Wall yields a -Wnonnull warning. clang-17.0.1 produces errors and warning, by default. msvc 19.38 compiles without warning. Potentially relevant context: 2748. Accessing static data members via null pointer https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2748 2823. Implicit undefined behavior when dereferencing pointers https://cplusplus.github.io/CWG/issues/2823.html ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113047] dereferencing a null pointer in a constant expression 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org @ 2023-12-16 21:02 ` gcc_bz at brnz dot org 2023-12-16 21:16 ` pinskia at gcc dot gnu.org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: gcc_bz at brnz dot org @ 2023-12-16 21:02 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 --- Comment #1 from gcc_bz at brnz dot org --- I have submitted this same question for clang: https://github.com/llvm/llvm-project/issues/75716 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113047] dereferencing a null pointer in a constant expression 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org 2023-12-16 21:02 ` [Bug c++/113047] " gcc_bz at brnz dot org @ 2023-12-16 21:16 ` pinskia at gcc dot gnu.org 2023-12-19 4:22 ` de34 at live dot cn ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-12-16 21:16 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=102420 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I suspect this is a dup of bug 102420 . ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113047] dereferencing a null pointer in a constant expression 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org 2023-12-16 21:02 ` [Bug c++/113047] " gcc_bz at brnz dot org 2023-12-16 21:16 ` pinskia at gcc dot gnu.org @ 2023-12-19 4:22 ` de34 at live dot cn 2023-12-19 22:31 ` nathanieloshead at gmail dot com 2024-01-18 19:17 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: de34 at live dot cn @ 2023-12-19 4:22 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 Jiang An <de34 at live dot cn> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |de34 at live dot cn --- Comment #3 from Jiang An <de34 at live dot cn> --- CWG2823 has been voted into the standard (see https://wg21.link/p3046r0, https://wg21.link/n4972). > Should it be possible to dereference a null pointer in a C++20 constant expression? Now such derefencing is clearly UB and needs to cause constant evaluation failure (not only in C++20, IMO). ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113047] dereferencing a null pointer in a constant expression 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org ` (2 preceding siblings ...) 2023-12-19 4:22 ` de34 at live dot cn @ 2023-12-19 22:31 ` nathanieloshead at gmail dot com 2024-01-18 19:17 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: nathanieloshead at gmail dot com @ 2023-12-19 22:31 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 Nathaniel Shead <nathanieloshead at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |nathanieloshead at gmail dot com --- Comment #4 from Nathaniel Shead <nathanieloshead at gmail dot com> --- I've pushed a fix for PR102420 (and hence comment #1), but looking at the DR this isn't sufficient for the result of CWG2823, for which presumably all of the following should also start erroring as well (note none of these error in Clang yet either): struct X { static constexpr int f() { return 0; } }; constexpr int g(X* x) { return (*x).f(); } // error constexpr int a = g(nullptr); constexpr int h(X* x) { return x->f(); } // error constexpr int b = h(nullptr); // and similarly constexpr int test() { int* p = nullptr; *p; // error return 0; } constexpr int t = test(); ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113047] dereferencing a null pointer in a constant expression 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org ` (3 preceding siblings ...) 2023-12-19 22:31 ` nathanieloshead at gmail dot com @ 2024-01-18 19:17 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: mpolacek at gcc dot gnu.org @ 2024-01-18 19:17 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113047 Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2024-01-18 CC| |mpolacek at gcc dot gnu.org Status|UNCONFIRMED |NEW Ever confirmed|0 |1 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-01-18 19:17 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-12-16 21:01 [Bug c++/113047] New: dereferencing a null pointer in a constant expression gcc_bz at brnz dot org 2023-12-16 21:02 ` [Bug c++/113047] " gcc_bz at brnz dot org 2023-12-16 21:16 ` pinskia at gcc dot gnu.org 2023-12-19 4:22 ` de34 at live dot cn 2023-12-19 22:31 ` nathanieloshead at gmail dot com 2024-01-18 19:17 ` mpolacek at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).