https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/113885
Reject them if the base is null, not only if the entire pointer is null. >From 66d42412ddd22e0e4da293990d16a4d7692f973c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Mon, 28 Oct 2024 10:04:46 +0100 Subject: [PATCH] [clang][ExprConst] Reject field access with nullptr base --- clang/lib/AST/ExprConstant.cpp | 2 +- clang/test/CXX/expr/expr.const/p2-0x.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 8e36cad2d2c6e7..a6694bc0641508 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -1703,7 +1703,7 @@ namespace { bool checkNullPointerDiagnosingWith(const GenDiagType &GenDiag) { if (Designator.Invalid) return false; - if (IsNullPtr) { + if (getLValueBase().isNull()) { GenDiag(); Designator.setInvalid(); return false; diff --git a/clang/test/CXX/expr/expr.const/p2-0x.cpp b/clang/test/CXX/expr/expr.const/p2-0x.cpp index 767eee1c74f054..67160ba571f33c 100644 --- a/clang/test/CXX/expr/expr.const/p2-0x.cpp +++ b/clang/test/CXX/expr/expr.const/p2-0x.cpp @@ -188,7 +188,7 @@ namespace UndefinedBehavior { namespace Ptr { struct A {}; - struct B : A { int n; }; + struct B : A { int n; int m; }; B a[3][3]; constexpr B *p = a[0] + 4; // expected-error {{constant expression}} expected-note {{element 4 of array of 3 elements}} B b = {}; @@ -204,6 +204,7 @@ namespace UndefinedBehavior { static_assert((A*)nb == 0, ""); static_assert((B*)na == 0, ""); constexpr const int &nf = nb->n; // expected-error {{constant expression}} expected-note {{cannot access field of null pointer}} + constexpr const int &mf = nb->m; // expected-error {{constant expression}} expected-note {{cannot access field of null pointer}} constexpr const int *np1 = (int*)nullptr + 0; // ok constexpr const int *np2 = &(*(int(*)[4])nullptr)[0]; // ok constexpr const int *np3 = &(*(int(*)[4])nullptr)[2]; // expected-error {{constant expression}} expected-note {{cannot perform pointer arithmetic on null pointer}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits