llvm-project/clang/lib/Sema
Olivier Goffart 67049f034d Fix crash parsing invalid code
The code in the test caused a crash with this backtrace:

 RecordLayoutBuilder.cpp:2934: const clang::ASTRecordLayout &clang::ASTContext::getASTRecordLayout(const clang::RecordDecl *) const: Assertion `!D->isInvalidDecl() && "Cannot get layout of invalid decl!"' failed.
 [...]
 #7 0x00007f63963d845a __assert_fail_base (/usr/lib/libc.so.6+0x2c45a)
 #8 0x00007f63963d84d2 (/usr/lib/libc.so.6+0x2c4d2)
 #9 0x00007f63937a0631 clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) const /home/olivier/prog/llvm/tools/clang/lib/AST/RecordLayoutBuilder.cpp:2935:3
 #10 0x00007f63937a1ad5 getFieldOffset(clang::ASTContext const&, clang::FieldDecl const*) /home/olivier/prog/llvm/tools/clang/lib/AST/RecordLayoutBuilder.cpp:3057:37
 #11 0x00007f6391869f14 clang::Sema::RefersToMemberWithReducedAlignment(clang::Expr*, llvm::function_ref<void (clang::Expr*, clang::RecordDecl*, clang::FieldDecl*, clang::CharUnits)>) /home/olivier/prog/llvm/tools/clang/lib/Sema/SemaChecking.cpp:12139:23
 #12 0x00007f639186a2f8 clang::Sema::CheckAddressOfPackedMember(clang::Expr*) /home/olivier/prog/llvm/tools/clang/lib/Sema/SemaChecking.cpp:12190:1
 #13 0x00007f6391a7a81c clang::Sema::CheckAddressOfOperand(clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation) /home/olivier/prog/llvm/tools/clang/lib/Sema/SemaExpr.cpp:11111:10
 #14 0x00007f6391a7f5d2 clang::Sema::CreateBuiltinUnaryOp(clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*) /home/olivier/prog/llvm/tools/clang/lib/Sema/SemaExpr.cpp:11932:18

Fixing by bailing out for invalid classes.

Differential Revision: https://reviews.llvm.org/D35108

llvm-svn: 307371
2017-07-07 09:38:59 +00:00
..
AnalysisBasedWarnings.cpp Address comments that escaped D33333 2017-07-05 16:43:45 +00:00
AttributeList.cpp Add #pragma clang attribute 2017-04-18 14:33:39 +00:00
CMakeLists.txt Enabling the /bigobj flag for SemaDeclAttr.cpp. 2017-05-12 14:30:49 +00:00
CodeCompleteConsumer.cpp Retire llvm::alignOf in favor of C++11 alignof. 2016-10-20 14:27:22 +00:00
CoroutineStmtBuilder.h [coroutines] Fix rebuilding of dependent coroutine parameters 2017-06-03 00:22:18 +00:00
DeclSpec.cpp Recommit r289979 [OpenCL] Allow disabling types and declarations associated with extensions 2016-12-18 05:18:55 +00:00
DelayedDiagnostic.cpp [Sema] Don't allow -Wunguarded-availability to be silenced with redecls 2017-07-05 17:08:56 +00:00
IdentifierResolver.cpp [modules] Separately track whether an identifier's preprocessor information and 2016-02-05 19:03:40 +00:00
JumpDiagnostics.cpp [Sema][ObjC] Disallow jumping into ObjC fast enumeration loops. 2017-04-19 17:54:08 +00:00
MultiplexExternalSemaSource.cpp Modular Codegen: Support homing debug info for types in modular objects 2017-04-11 21:13:37 +00:00
Scope.cpp [Parser] Clear the TemplateParamScope bit of the current scope's flag 2016-04-29 02:24:14 +00:00
ScopeInfo.cpp [coroutines] Fix diagnostics depending on the first coroutine statement. 2017-03-11 02:35:37 +00:00
Sema.cpp [modules ts] Declarations from a module interface unit are only visible outside 2017-07-05 01:42:07 +00:00
SemaAccess.cpp P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991: 2016-06-28 19:03:57 +00:00
SemaAttr.cpp Add support for #pragma clang section 2017-06-05 10:11:57 +00:00
SemaCUDA.cpp Function with unparsed body is a definition 2017-06-21 12:46:57 +00:00
SemaCXXScopeSpec.cpp Add support for editor placeholders to Clang 2017-04-19 08:58:56 +00:00
SemaCast.cpp [clang] Implement -Wcast-qual for C++ 2017-07-03 17:59:22 +00:00
SemaChecking.cpp Fix crash parsing invalid code 2017-07-07 09:38:59 +00:00
SemaCodeComplete.cpp [Completion] Code complete the members for a dependent type after a '::' 2017-06-15 21:40:54 +00:00
SemaConsumer.cpp
SemaCoroutine.cpp [coroutines] Fix co_await for range statement 2017-06-14 03:24:55 +00:00
SemaDecl.cpp [modules ts] Declarations from a module interface unit are only visible outside 2017-07-05 01:42:07 +00:00
SemaDeclAttr.cpp [Sema] Don't allow -Wunguarded-availability to be silenced with redecls 2017-07-05 17:08:56 +00:00
SemaDeclCXX.cpp Recommit r306103: PR26195: Set correct NestedNameSpecifierLoc for the 2017-06-27 10:35:30 +00:00
SemaDeclObjC.cpp [ObjC] Avoid the -Wunguarded-availability warnings for protocol 2017-07-07 09:15:29 +00:00
SemaExceptionSpec.cpp [coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt. 2017-03-06 23:38:15 +00:00
SemaExpr.cpp [ObjC] Avoid the -Wunguarded-availability warnings for protocol 2017-07-07 09:15:29 +00:00
SemaExprCXX.cpp [Sema] Issue diagnostics if a new/delete expression generates a call to 2017-06-29 18:48:40 +00:00
SemaExprMember.cpp [NFC, Scoped Enum] Convert Sema::ExpressionEvaluationContext into a scoped Enum 2017-04-01 21:30:49 +00:00
SemaExprObjC.cpp [Sema][ObjC] Clean up possible null dereference. 2017-05-09 01:54:51 +00:00
SemaFixItUtils.cpp Wire a SourceLocation into IsDerivedFrom and move the RequireCompleteType call 2015-12-18 21:45:41 +00:00
SemaInit.cpp Fix PR 10758: Infinite recursion when dealing with copy-initialization 2017-05-16 10:23:58 +00:00
SemaLambda.cpp fix trivial typos in comments; NFC 2017-07-05 05:37:45 +00:00
SemaLookup.cpp [modules ts] Improve merging of module-private declarations. 2017-07-05 07:47:11 +00:00
SemaObjCProperty.cpp Add a fixit for -Wobjc-protocol-property-synthesis 2017-07-03 10:12:24 +00:00
SemaOpenMP.cpp [OpenMP] Fix mapping of scalars for combined directives 2017-07-01 10:40:50 +00:00
SemaOverload.cpp Customize the SFINAE diagnostics for enable_if to provide the failed condition. 2017-07-05 20:20:14 +00:00
SemaPseudoObject.cpp [Objective-C] Fix "weak-unavailable" warning with -fobjc-weak 2017-03-29 18:09:02 +00:00
SemaStmt.cpp [Sema] Make BreakContinueFinder handle nested loops. 2017-07-04 00:52:24 +00:00
SemaStmtAsm.cpp Added LLVM_FALLTHROUGH to address warning: this statement may fall through. NFC. 2017-06-03 06:35:06 +00:00
SemaStmtAttr.cpp Add [[clang::suppress(rule, ...)]] attribute 2017-03-27 19:45:24 +00:00
SemaTemplate.cpp Fix test case in pre-C++11 mode; address Aaron Ballman's code review. 2017-07-05 21:12:37 +00:00
SemaTemplateDeduction.cpp [c++1z] Support deducing B in noexcept(B). 2017-06-07 21:46:22 +00:00
SemaTemplateInstantiate.cpp PR33552: Distinguish between declarations that are owned by no module and 2017-06-23 01:04:34 +00:00
SemaTemplateInstantiateDecl.cpp PR33552: Distinguish between declarations that are owned by no module and 2017-06-23 01:04:34 +00:00
SemaTemplateVariadic.cpp PR24440: Do not silently discard a fold-expression appearing as the operand of a cast-expression. 2017-02-15 19:57:10 +00:00
SemaType.cpp [Modules] Implement ODR-like semantics for tag types in C/ObjC 2017-07-01 00:06:47 +00:00
TreeTransform.h [coroutines] Fix rebuilding of dependent coroutine parameters 2017-06-03 00:22:18 +00:00
TypeLocBuilder.cpp [Sema] Fix bug in TypeLocBuilder::pushImpl 2016-02-18 21:05:09 +00:00
TypeLocBuilder.h Retire llvm::alignOf in favor of C++11 alignof. 2016-10-20 14:27:22 +00:00