qdelacru updated this revision to Diff 356836. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105451/new/
https://reviews.llvm.org/D105451 Files: clang/lib/Sema/SemaChecking.cpp clang/test/Sema/warn-cast-align.c Index: clang/test/Sema/warn-cast-align.c =================================================================== --- clang/test/Sema/warn-cast-align.c +++ clang/test/Sema/warn-cast-align.c @@ -67,3 +67,11 @@ FnTy test5(void) { return (FnTy)&func5; } + +void test6() { + struct { + int hello; + doesnotexist world; // expected-error {{unknown type name 'doesnotexist'}} + } foo; + void **repro = (void **)&foo.hello; // expected-warning {{cast from 'int *' to 'void **' increases required alignment from 4 to 8}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -14475,7 +14475,8 @@ case Stmt::MemberExprClass: { auto *ME = cast<MemberExpr>(E); auto *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()); - if (!FD || FD->getType()->isReferenceType()) + if (!FD || FD->getType()->isReferenceType() || + FD->getParent()->isInvalidDecl()) break; Optional<std::pair<CharUnits, CharUnits>> P; if (ME->isArrow())
Index: clang/test/Sema/warn-cast-align.c =================================================================== --- clang/test/Sema/warn-cast-align.c +++ clang/test/Sema/warn-cast-align.c @@ -67,3 +67,11 @@ FnTy test5(void) { return (FnTy)&func5; } + +void test6() { + struct { + int hello; + doesnotexist world; // expected-error {{unknown type name 'doesnotexist'}} + } foo; + void **repro = (void **)&foo.hello; // expected-warning {{cast from 'int *' to 'void **' increases required alignment from 4 to 8}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -14475,7 +14475,8 @@ case Stmt::MemberExprClass: { auto *ME = cast<MemberExpr>(E); auto *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()); - if (!FD || FD->getType()->isReferenceType()) + if (!FD || FD->getType()->isReferenceType() || + FD->getParent()->isInvalidDecl()) break; Optional<std::pair<CharUnits, CharUnits>> P; if (ME->isArrow())
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits