diff options
-rw-r--r-- | clang/include/clang/Basic/SourceManager.h | 3 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 19 |
2 files changed, 5 insertions, 17 deletions
diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h index 7cc4087db8b..770ac803aee 100644 --- a/clang/include/clang/Basic/SourceManager.h +++ b/clang/include/clang/Basic/SourceManager.h @@ -432,8 +432,7 @@ public: /// isInSystemHeader - Returns if a SourceLocation is in a system header. bool isInSystemHeader(SourceLocation Loc) const { - assert (Loc.isFileID() && "method only valid for file ids"); - return getFIDInfo(Loc.getFileID())->isSystemHeader(); + return getFIDInfo(getPhysicalLoc(Loc).getFileID())->isSystemHeader(); } /// PrintStats - Print statistics to stderr. diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index c6f8c22b087..599f0ba61b2 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -264,21 +264,10 @@ TypedefDecl *Sema::MergeTypeDefDecl(TypedefDecl *New, Decl *OldD) { // this adhoc compatibility rule. FIXME: The following code will not // work properly when compiling ".i" files (containing preprocessed output). SourceManager &SrcMgr = Context.getSourceManager(); - HeaderSearch &HdrInfo = PP.getHeaderSearchInfo(); - const FileEntry *OldDeclFile = SrcMgr.getFileEntryForLoc(Old->getLocation()); - if (OldDeclFile) { - DirectoryLookup::DirType OldDirType = HdrInfo.getFileDirFlavor(OldDeclFile); - // Allow reclarations in both SystemHeaderDir and ExternCSystemHeaderDir. - if (OldDirType != DirectoryLookup::NormalHeaderDir) - return New; - } - const FileEntry *NewDeclFile = SrcMgr.getFileEntryForLoc(New->getLocation()); - if (NewDeclFile) { - DirectoryLookup::DirType NewDirType = HdrInfo.getFileDirFlavor(NewDeclFile); - // Allow reclarations in both SystemHeaderDir and ExternCSystemHeaderDir. - if (NewDirType != DirectoryLookup::NormalHeaderDir) - return New; - } + if (SrcMgr.isInSystemHeader(Old->getLocation())) + return New; + if (SrcMgr.isInSystemHeader(New->getLocation())) + return New; Diag(New->getLocation(), diag::err_redefinition, New->getName()); Diag(Old->getLocation(), diag::err_previous_definition); |