forked from OSchip/llvm-project
Use the expansion location of the file name when finding the module.
The spelling location of stringified strings is not a file location. Optimally, we'll want to solve the problem (as the FIXME states) by handing in the right FileEntry of the #include location. llvm-svn: 204220
This commit is contained in:
parent
8e6829e436
commit
98a9a6c667
|
@ -540,7 +540,7 @@ Module *Preprocessor::getModuleForLocation(SourceLocation FilenameLoc) {
|
||||||
}
|
}
|
||||||
// Try to determine the module of the include directive.
|
// Try to determine the module of the include directive.
|
||||||
// FIXME: Look into directly passing the FileEntry from LookupFile instead.
|
// FIXME: Look into directly passing the FileEntry from LookupFile instead.
|
||||||
FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getSpellingLoc(FilenameLoc));
|
FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getExpansionLoc(FilenameLoc));
|
||||||
if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) {
|
if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) {
|
||||||
// The include comes from a file.
|
// The include comes from a file.
|
||||||
return ModMap.findModuleForHeader(EntryOfIncl).getModule();
|
return ModMap.findModuleForHeader(EntryOfIncl).getModule();
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef J_H
|
||||||
|
#define J_H
|
||||||
|
|
||||||
|
#define STR(x) #x
|
||||||
|
#define HDR(x) STR(x.h)
|
||||||
|
|
||||||
|
#include ALLOWED_INC
|
||||||
|
#include HDR(a)
|
||||||
|
|
||||||
|
const int j = a * a + b;
|
||||||
|
|
||||||
|
// expected-no-diagnostics
|
||||||
|
|
||||||
|
#endif
|
|
@ -37,6 +37,7 @@ module XG {
|
||||||
header "g1.h"
|
header "g1.h"
|
||||||
use XC
|
use XC
|
||||||
use XE
|
use XE
|
||||||
|
use XJ
|
||||||
}
|
}
|
||||||
|
|
||||||
module XH {
|
module XH {
|
||||||
|
@ -47,5 +48,9 @@ module XH {
|
||||||
use XE
|
use XE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module XJ {
|
||||||
|
header "j.h"
|
||||||
|
}
|
||||||
|
|
||||||
module XS {
|
module XS {
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
// RUN: rm -rf %t
|
||||||
|
// RUN: %clang_cc1 -include "g.h" -include "e.h" -include "f.h" -include "i.h" -fmodule-maps -fmodules-cache-path=%t -fmodules-decluse -fmodule-name=XG -I %S/Inputs/declare-use %s -verify
|
||||||
|
// expected-error {{module XG does not depend on a module exporting 'f.h'}}
|
||||||
|
const int g2 = g1 + e + f + aux_i;
|
|
@ -0,0 +1,10 @@
|
||||||
|
// RUN: rm -rf %t
|
||||||
|
// RUN: %clang_cc1 -fmodule-maps -fmodules-cache-path=%t -fmodules-decluse -fmodule-name=XG -I %S/Inputs/declare-use %s -verify
|
||||||
|
|
||||||
|
#define ALLOWED_INC "b.h"
|
||||||
|
|
||||||
|
#include "j.h"
|
||||||
|
|
||||||
|
const int g2 = j;
|
||||||
|
|
||||||
|
// expected-no-diagnostics
|
Loading…
Reference in New Issue