================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits