[llvm-branch-commits] [clang] release/21.x: [clang] Make sure EvalInfo pointer isn't null (#155563) (PR #155594)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Aug 27 04:03:07 PDT 2025
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/155594
Backport 60cdc3ddeacd1310e8a014b076572c27e4886015
Requested by: @tbaederr
>From fb320a2e0f206f16b0957b8a4addebe94d704896 Mon Sep 17 00:00:00 2001
From: Timm Baeder <tbaeder at redhat.com>
Date: Wed, 27 Aug 2025 12:55:56 +0200
Subject: [PATCH] [clang] Make sure EvalInfo pointer isn't null (#155563)
It can be null, when called via CheckICE().
Accidentally introduced via #119366
Fixes #155507
(cherry picked from commit 60cdc3ddeacd1310e8a014b076572c27e4886015)
---
clang/lib/AST/ExprConstant.cpp | 10 ++++++----
clang/test/Sema/constexpr.c | 7 +++++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 170da16a0cdf8..bfecae972940b 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -7909,8 +7909,9 @@ static bool checkBitCastConstexprEligibilityType(SourceLocation Loc,
// so its layout is unspecified. For now, we'll simply treat these cases
// as unsupported (this should only be possible with OpenCL bool vectors
// whose element count isn't a multiple of the byte size).
- Info->FFDiag(Loc, diag::note_constexpr_bit_cast_invalid_vector)
- << QualType(VTy, 0) << EltSize << NElts << Ctx.getCharWidth();
+ if (Info)
+ Info->FFDiag(Loc, diag::note_constexpr_bit_cast_invalid_vector)
+ << QualType(VTy, 0) << EltSize << NElts << Ctx.getCharWidth();
return false;
}
@@ -7919,8 +7920,9 @@ static bool checkBitCastConstexprEligibilityType(SourceLocation Loc,
// The layout for x86_fp80 vectors seems to be handled very inconsistently
// by both clang and LLVM, so for now we won't allow bit_casts involving
// it in a constexpr context.
- Info->FFDiag(Loc, diag::note_constexpr_bit_cast_unsupported_type)
- << EltTy;
+ if (Info)
+ Info->FFDiag(Loc, diag::note_constexpr_bit_cast_unsupported_type)
+ << EltTy;
return false;
}
}
diff --git a/clang/test/Sema/constexpr.c b/clang/test/Sema/constexpr.c
index 3dcb0b3a7d95f..0987d175c91a8 100644
--- a/clang/test/Sema/constexpr.c
+++ b/clang/test/Sema/constexpr.c
@@ -391,3 +391,10 @@ void ghissue109095() {
_Static_assert(i == c[0]); // expected-error {{static assertion expression is not an integral constant expression}}\
// expected-note {{initializer of 'i' is not a constant expression}}
}
+
+typedef bool __vbool2 __attribute__((ext_vector_type(2)));
+typedef short v2int16_t __attribute__((ext_vector_type(2)));
+
+bool issue155507(v2int16_t a, v2int16_t b) {
+ return __builtin_bit_cast(unsigned char, __builtin_convertvector(a == b, __vbool2)) == 0b11;
+}
More information about the llvm-branch-commits
mailing list