[clang] d8f0611 - [clang][Interp] Allow ltor casts for null pointers
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 15 23:29:04 PDT 2024
Author: Timm Bäder
Date: 2024-07-16T08:28:51+02:00
New Revision: d8f0611acc2658ccc54d985044aa115716c6ad34
URL: https://github.com/llvm/llvm-project/commit/d8f0611acc2658ccc54d985044aa115716c6ad34
DIFF: https://github.com/llvm/llvm-project/commit/d8f0611acc2658ccc54d985044aa115716c6ad34.diff
LOG: [clang][Interp] Allow ltor casts for null pointers
We can't read from them but we special-case them later.
Added:
Modified:
clang/lib/AST/Interp/EvalEmitter.cpp
clang/test/CodeGenCXX/nullptr.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/EvalEmitter.cpp b/clang/lib/AST/Interp/EvalEmitter.cpp
index 1a9444d38fdd5..74413baf6fc0c 100644
--- a/clang/lib/AST/Interp/EvalEmitter.cpp
+++ b/clang/lib/AST/Interp/EvalEmitter.cpp
@@ -152,7 +152,7 @@ template <> bool EvalEmitter::emitRet<PT_Ptr>(const SourceInfo &Info) {
// Implicitly convert lvalue to rvalue, if requested.
if (ConvertResultToRValue) {
- if (!Ptr.isDereferencable())
+ if (!Ptr.isZero() && !Ptr.isDereferencable())
return false;
// Never allow reading from a non-const pointer, unless the memory
// has been created in this evaluation.
diff --git a/clang/test/CodeGenCXX/nullptr.cpp b/clang/test/CodeGenCXX/nullptr.cpp
index ca76c55e2122d..0d8837b216bec 100644
--- a/clang/test/CodeGenCXX/nullptr.cpp
+++ b/clang/test/CodeGenCXX/nullptr.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s
#include <typeinfo>
More information about the cfe-commits
mailing list