forked from OSchip/llvm-project
[ASTUnit] Fix crash when trying to load a module file via ASTUnit::LoadFromASTFile.
rdar://19997358 llvm-svn: 231060
This commit is contained in:
parent
b1de8c2b73
commit
f0b4cd1ed3
|
@ -714,6 +714,13 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile(
|
|||
*AST->PP, Context, AST->ASTFileLangOpts, AST->TargetOpts, AST->Target,
|
||||
Counter));
|
||||
|
||||
// Attach the AST reader to the AST context as an external AST
|
||||
// source, so that declarations will be deserialized from the
|
||||
// AST file as needed.
|
||||
// We need the external source to be set up before we read the AST, because
|
||||
// eagerly-deserialized declarations may use it.
|
||||
Context.setExternalSource(AST->Reader);
|
||||
|
||||
switch (AST->Reader->ReadAST(Filename, serialization::MK_MainFile,
|
||||
SourceLocation(), ASTReader::ARR_None)) {
|
||||
case ASTReader::Success:
|
||||
|
@ -733,11 +740,6 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile(
|
|||
|
||||
PP.setCounterValue(Counter);
|
||||
|
||||
// Attach the AST reader to the AST context as an external AST
|
||||
// source, so that declarations will be deserialized from the
|
||||
// AST file as needed.
|
||||
Context.setExternalSource(AST->Reader);
|
||||
|
||||
// Create an AST consumer, even though it isn't used.
|
||||
AST->Consumer.reset(new ASTConsumer);
|
||||
|
||||
|
|
|
@ -49,6 +49,11 @@ int glob;
|
|||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: objc-class-method | name: alloc | {{.*}} | loc: [[TMOD_MODULE_H]]:17:1
|
||||
// CHECK-TMOD-NEXT: [importedASTFile]: [[PCM:.*\.cache/Module\.pcm]] | loc: [[TMOD_MODULE_H]]:23:2 | name: "Module.Sub" | isImplicit: 1
|
||||
// CHECK-TMOD-NEXT: [importedASTFile]: [[PCM]] | loc: [[TMOD_MODULE_H]]:24:2 | name: "Module.Buried.Treasure" | isImplicit: 1
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: typedef | name: FILE | {{.*}} | loc: [[TMOD_MODULE_H]]:30:3
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: struct | name: __sFILE | {{.*}} | loc: [[TMOD_MODULE_H]]:28:16
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: field | name: _offset | {{.*}} | loc: [[TMOD_MODULE_H]]:29:7
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: variable | name: myFile | {{.*}} | loc: [[TMOD_MODULE_H]]:32:14
|
||||
// CHECK-TMOD-NEXT: [indexEntityReference]: kind: typedef | name: FILE | {{.*}} | loc: [[TMOD_MODULE_H]]:32:8
|
||||
// CHECK-TMOD-NEXT: [importedASTFile]: [[PCM]] | loc: [[TMODHDR]]Sub.h:1:2 | name: "Module.Sub2" | isImplicit: 1
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: variable | name: Module_Sub | {{.*}} | loc: [[TMODHDR]]Sub.h:2:6
|
||||
// CHECK-TMOD-NEXT: [indexDeclaration]: kind: variable | name: Module_Sub2 | USR: c:@Module_Sub2 | {{.*}} | loc: [[TMODHDR]]Sub2.h:1:6
|
||||
|
|
|
@ -25,4 +25,10 @@ const char *getModuleVersion(void);
|
|||
|
||||
__asm("foo");
|
||||
|
||||
typedef struct __sFILE {
|
||||
int _offset;
|
||||
} FILE;
|
||||
|
||||
extern FILE *myFile;
|
||||
|
||||
#endif // MODULE_H
|
||||
|
|
Loading…
Reference in New Issue