Author: Nick Desaulniers Date: 2023-07-26T12:53:02-07:00 New Revision: 2c26397f76d9b8d2a0dc8207eeca5b0d3216f3f0
URL: https://github.com/llvm/llvm-project/commit/2c26397f76d9b8d2a0dc8207eeca5b0d3216f3f0 DIFF: https://github.com/llvm/llvm-project/commit/2c26397f76d9b8d2a0dc8207eeca5b0d3216f3f0.diff LOG: [clang][ConstExprEmitter] handle NullToPointer ImplicitCastExpr Consider the following statement: void* foo = ((void *)0); For the sub-AST: | `-ImplicitCastExpr 'const void *' <NullToPointer> | `-CStyleCastExpr 'void *' <NullToPointer> | `-IntegerLiteral 'int' 0 If the subexpression of the cast is itself the NULL constant, then ImplicitCastExpr should emit the NULL pointer constant. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D156175 Added: Modified: clang/lib/CodeGen/CGExprConstant.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 88dde7c9178829..9ad07f7d2220a7 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -1131,6 +1131,10 @@ class ConstExprEmitter : if (const auto *S = dyn_cast<StringLiteral>(subExpr)) return CGM.GetAddrOfConstantStringFromLiteral(S).getPointer(); return nullptr; + case CK_NullToPointer: + if (llvm::Constant *C = Visit(subExpr, destType)) + return CGM.EmitNullConstant(destType); + return nullptr; case CK_IntToOCLSampler: llvm_unreachable("global sampler variables are not generated"); @@ -1187,7 +1191,6 @@ class ConstExprEmitter : case CK_IntegralComplexToFloatingComplex: case CK_PointerToIntegral: case CK_PointerToBoolean: - case CK_NullToPointer: case CK_IntegralCast: case CK_BooleanToSignedIntegral: case CK_IntegralToPointer: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits