================
@@ -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
+  if (!D || D->isInvalidDecl() || !D->isCompleteDefinition()) {
----------------
AditiRM wrote:

The asserts are correct and remain unchanged. The callers now avoid requesting 
a layout for an invalid declaration in the first place. While laying out the 
parent class `X<int>`, the invalid nested member `X<int>::Y` is skipped.

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

Reply via email to