llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

<details>
<summary>Changes</summary>

It will assert.

Fixes https://github.com/llvm/llvm-project/issues/203755

---
Full diff: https://github.com/llvm/llvm-project/pull/203817.diff


3 Files Affected:

- (modified) clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp (+2) 
- (modified) clang/lib/AST/ExprConstant.cpp (+2) 
- (modified) clang/test/AST/ByteCode/builtin-bit-cast.cpp (+8) 


``````````diff
diff --git a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp
index c7379fda30f91..f136301c02912 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp
@@ -131,6 +131,8 @@ static Result enumerateData(PtrView P, const Context &Ctx, 
Bits Offset,
   // Records.
   if (FieldDesc->isRecord()) {
     const Record *R = FieldDesc->ElemRecord;
+    if (R->getDecl()->isInvalidDecl())
+      return Result::Failure;
     const ASTRecordLayout &Layout =
         Ctx.getASTContext().getASTRecordLayout(R->getDecl());
     bool Ok = true;
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 1642c41a99a2f..bc98c0d86bb65 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -8060,6 +8060,8 @@ class BufferToAPValueConverter {
 
   std::optional<APValue> visit(const RecordType *RTy, CharUnits Offset) {
     const RecordDecl *RD = RTy->getAsRecordDecl();
+    if (RD->isInvalidDecl())
+      return std::nullopt;
     const ASTRecordLayout &Layout = Info.Ctx.getASTRecordLayout(RD);
 
     unsigned NumBases = 0;
diff --git a/clang/test/AST/ByteCode/builtin-bit-cast.cpp 
b/clang/test/AST/ByteCode/builtin-bit-cast.cpp
index aea5d9d712c80..368728d00a812 100644
--- a/clang/test/AST/ByteCode/builtin-bit-cast.cpp
+++ b/clang/test/AST/ByteCode/builtin-bit-cast.cpp
@@ -599,3 +599,11 @@ namespace NonNumbers {
   static_assert(fn() == 1); // both-error {{not an integral constant 
expression}} \
                             // ref-note {{in call to}}
 }
+
+namespace InvalidRecordDecl {
+ struct a :; // both-error {{expected class name}} \
+             // both-error {{expected '{' after base class list}}
+  constexpr struct {
+  } b;
+  a c = __builtin_bit_cast(a, b);
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/203817
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to