[PATCH] D85834: [AST] Fix a crash on calling getASTRecordLayout on an invalid RecordDecl.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 12 08:02:24 PDT 2020


sammccall accepted this revision.
sammccall added inline comments.
This revision is now accepted and ready to land.


================
Comment at: clang/lib/AST/ASTContext.cpp:2463
 
-    unsigned PreferredAlign = static_cast<unsigned>(
-        toBits(getASTRecordLayout(RT->getDecl()).PreferredAlignment));
-    assert(PreferredAlign >= ABIAlign &&
-           "PreferredAlign should be at least as large as ABIAlign.");
-    return PreferredAlign;
+    if (!RT->getDecl()->isInvalidDecl()) {
+      unsigned PreferredAlign = static_cast<unsigned>(
----------------
hokein wrote:
> another proper fix might be change the `getPreferredTypeAlign` signature to support error handling (e.g. return a bool), but that would require a large invasive change for its callers, not sure it is worth.
> 
> I think the current implementation is OK, as the result doesn't really matter for an invalid RecordDecl, and we do similar thing int `getTypeInfoImpl` (returning a fake `Align`/`Width` for invalid decl).  
I think this is fine though it could be clearer/more explicit about how the special case is handled.

```
if (RT->getDecl()->isInvalidDecl())
  return ABIAlign;
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85834/new/

https://reviews.llvm.org/D85834



More information about the cfe-commits mailing list