[clang] [Clang] Fix assertion failure in getASTRecordLayout for invalid declarations (PR #208153)

Aditi Medhane via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 11 01:29:42 PDT 2026


================
@@ -3384,9 +3384,30 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
   // not a complete definition (which is what isCompleteDefinition() tests)
   // until we *finish* parsing the definition.
   D = D->getDefinition();
-  assert(D && "Cannot get layout of forward declarations!");
-  assert(!D->isInvalidDecl() && "Cannot get layout of invalid decl!");
-  assert(D->isCompleteDefinition() && "Cannot layout type before complete!");
+
+  // Handle invalid declarations gracefully during error recovery
+  // This can happen when there are template specialization errors
----------------
AditiRM wrote:

The new approach does exactly that. `isInvalidDecl()` is checked before calling `getASTRecordLayout()`, avoiding layout computation for invalid declarations. The checks are added in:
- `CheckConstructorCall()` — skip the alignment check
- `ComputeEmptySubobjectSizes()` — skip invalid bases/fields
- `CanPlaceFieldSubobjectAtOffset()` — return early for invalid declarations

https://github.com/llvm/llvm-project/pull/208153


More information about the cfe-commits mailing list