forked from OSchip/llvm-project
Revert r272562 for build bot failure (clang-x86-win2008-selfhost)
llvm-svn: 272572
This commit is contained in:
parent
c1ffba5062
commit
cb07d65173
|
@ -275,13 +275,6 @@ def ext_missing_whitespace_after_macro_name : ExtWarn<
|
|||
def warn_missing_whitespace_after_macro_name : Warning<
|
||||
"whitespace recommended after macro name">;
|
||||
|
||||
class NonportablePath : Warning<
|
||||
"non-portable path to file '%0'; specified path differs in case from file"
|
||||
" name on disk">;
|
||||
def pp_nonportable_path : NonportablePath, InGroup<DiagGroup<"nonportable-include-path">>;
|
||||
def pp_nonportable_system_path : NonportablePath, DefaultIgnore,
|
||||
InGroup<DiagGroup<"nonportable-system-include-path">>;
|
||||
|
||||
def pp_pragma_once_in_main_file : Warning<"#pragma once in main file">,
|
||||
InGroup<DiagGroup<"pragma-once-outside-header">>;
|
||||
def pp_pragma_sysheader_in_main_file : Warning<
|
||||
|
|
|
@ -52,7 +52,6 @@ public:
|
|||
/// descriptor for the file.
|
||||
class FileEntry {
|
||||
const char *Name; // Name of the file.
|
||||
std::string RealPathName; // Real path to the file; could be empty.
|
||||
off_t Size; // File size in bytes.
|
||||
time_t ModTime; // Modification time of file.
|
||||
const DirectoryEntry *Dir; // Directory file lives in.
|
||||
|
@ -83,7 +82,6 @@ public:
|
|||
}
|
||||
|
||||
const char *getName() const { return Name; }
|
||||
StringRef tryGetRealPathName() const { return RealPathName; }
|
||||
bool isValid() const { return IsValid; }
|
||||
off_t getSize() const { return Size; }
|
||||
unsigned getUID() const { return UID; }
|
||||
|
|
|
@ -91,13 +91,6 @@ public:
|
|||
virtual ~File();
|
||||
/// \brief Get the status of the file.
|
||||
virtual llvm::ErrorOr<Status> status() = 0;
|
||||
/// \brief Get the name of the file
|
||||
virtual llvm::ErrorOr<std::string> getName() {
|
||||
if (auto Status = status())
|
||||
return Status->getName().str();
|
||||
else
|
||||
return Status.getError();
|
||||
}
|
||||
/// \brief Get the contents of the file as a \p MemoryBuffer.
|
||||
virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
|
||||
getBuffer(const Twine &Name, int64_t FileSize = -1,
|
||||
|
|
|
@ -151,9 +151,6 @@ public:
|
|||
///
|
||||
/// \param HS The header search instance to search with.
|
||||
///
|
||||
/// \param IncludeLoc the source location of the #include or #import
|
||||
/// directive.
|
||||
///
|
||||
/// \param SearchPath If not NULL, will be set to the search path relative
|
||||
/// to which the file was found.
|
||||
///
|
||||
|
@ -175,7 +172,6 @@ public:
|
|||
/// a framework include ("Foo.h" -> "Foo/Foo.h"), set the new name to this
|
||||
/// vector and point Filename to it.
|
||||
const FileEntry *LookupFile(StringRef &Filename, HeaderSearch &HS,
|
||||
SourceLocation IncludeLoc,
|
||||
SmallVectorImpl<char> *SearchPath,
|
||||
SmallVectorImpl<char> *RelativePath,
|
||||
Module *RequestingModule,
|
||||
|
|
|
@ -580,9 +580,8 @@ private:
|
|||
/// \brief Look up the file with the specified name and determine its owning
|
||||
/// module.
|
||||
const FileEntry *
|
||||
getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc,
|
||||
const DirectoryEntry *Dir, bool IsSystemHeaderDir,
|
||||
Module *RequestingModule,
|
||||
getFileAndSuggestModule(StringRef FileName, const DirectoryEntry *Dir,
|
||||
bool IsSystemHeaderDir, Module *RequestingModule,
|
||||
ModuleMap::KnownHeader *SuggestedModule);
|
||||
|
||||
public:
|
||||
|
|
|
@ -312,9 +312,6 @@ const FileEntry *FileManager::getFile(StringRef Filename, bool openFile,
|
|||
UFE.InPCH = Data.InPCH;
|
||||
UFE.File = std::move(F);
|
||||
UFE.IsValid = true;
|
||||
if (UFE.File)
|
||||
if (auto RealPathName = UFE.File->getName())
|
||||
UFE.RealPathName = *RealPathName;
|
||||
return &UFE;
|
||||
}
|
||||
|
||||
|
|
|
@ -140,19 +140,16 @@ namespace {
|
|||
class RealFile : public File {
|
||||
int FD;
|
||||
Status S;
|
||||
std::string RealName;
|
||||
friend class RealFileSystem;
|
||||
RealFile(int FD, StringRef NewName, StringRef NewRealPathName)
|
||||
RealFile(int FD, StringRef NewName)
|
||||
: FD(FD), S(NewName, {}, {}, {}, {}, {},
|
||||
llvm::sys::fs::file_type::status_error, {}),
|
||||
RealName(NewRealPathName.str()) {
|
||||
llvm::sys::fs::file_type::status_error, {}) {
|
||||
assert(FD >= 0 && "Invalid or inactive file descriptor");
|
||||
}
|
||||
|
||||
public:
|
||||
~RealFile() override;
|
||||
ErrorOr<Status> status() override;
|
||||
ErrorOr<std::string> getName() override;
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> getBuffer(const Twine &Name,
|
||||
int64_t FileSize,
|
||||
bool RequiresNullTerminator,
|
||||
|
@ -173,10 +170,6 @@ ErrorOr<Status> RealFile::status() {
|
|||
return S;
|
||||
}
|
||||
|
||||
ErrorOr<std::string> RealFile::getName() {
|
||||
return RealName.empty() ? S.getName().str() : RealName;
|
||||
}
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
RealFile::getBuffer(const Twine &Name, int64_t FileSize,
|
||||
bool RequiresNullTerminator, bool IsVolatile) {
|
||||
|
@ -214,10 +207,9 @@ ErrorOr<Status> RealFileSystem::status(const Twine &Path) {
|
|||
ErrorOr<std::unique_ptr<File>>
|
||||
RealFileSystem::openFileForRead(const Twine &Name) {
|
||||
int FD;
|
||||
SmallString<256> RealName;
|
||||
if (std::error_code EC = sys::fs::openFileForRead(Name, FD, &RealName))
|
||||
if (std::error_code EC = sys::fs::openFileForRead(Name, FD))
|
||||
return EC;
|
||||
return std::unique_ptr<File>(new RealFile(FD, Name.str(), RealName.str()));
|
||||
return std::unique_ptr<File>(new RealFile(FD, Name.str()));
|
||||
}
|
||||
|
||||
llvm::ErrorOr<std::string> RealFileSystem::getCurrentWorkingDirectory() const {
|
||||
|
|
|
@ -250,9 +250,8 @@ const char *DirectoryLookup::getName() const {
|
|||
}
|
||||
|
||||
const FileEntry *HeaderSearch::getFileAndSuggestModule(
|
||||
StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir,
|
||||
bool IsSystemHeaderDir, Module *RequestingModule,
|
||||
ModuleMap::KnownHeader *SuggestedModule) {
|
||||
StringRef FileName, const DirectoryEntry *Dir, bool IsSystemHeaderDir,
|
||||
Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule) {
|
||||
// If we have a module map that might map this header, load it and
|
||||
// check whether we'll have a suggestion for a module.
|
||||
const FileEntry *File = getFileMgr().getFile(FileName, /*OpenFile=*/true);
|
||||
|
@ -273,7 +272,6 @@ const FileEntry *HeaderSearch::getFileAndSuggestModule(
|
|||
const FileEntry *DirectoryLookup::LookupFile(
|
||||
StringRef &Filename,
|
||||
HeaderSearch &HS,
|
||||
SourceLocation IncludeLoc,
|
||||
SmallVectorImpl<char> *SearchPath,
|
||||
SmallVectorImpl<char> *RelativePath,
|
||||
Module *RequestingModule,
|
||||
|
@ -299,7 +297,7 @@ const FileEntry *DirectoryLookup::LookupFile(
|
|||
RelativePath->append(Filename.begin(), Filename.end());
|
||||
}
|
||||
|
||||
return HS.getFileAndSuggestModule(TmpDir, IncludeLoc, getDir(),
|
||||
return HS.getFileAndSuggestModule(TmpDir, getDir(),
|
||||
isSystemHeaderDirectory(),
|
||||
RequestingModule, SuggestedModule);
|
||||
}
|
||||
|
@ -587,7 +585,7 @@ const FileEntry *HeaderSearch::LookupFile(
|
|||
RelativePath->append(Filename.begin(), Filename.end());
|
||||
}
|
||||
// Otherwise, just return the file.
|
||||
return getFileAndSuggestModule(Filename, IncludeLoc, nullptr,
|
||||
return getFileAndSuggestModule(Filename, nullptr,
|
||||
/*IsSystemHeaderDir*/false,
|
||||
RequestingModule, SuggestedModule);
|
||||
}
|
||||
|
@ -624,7 +622,7 @@ const FileEntry *HeaderSearch::LookupFile(
|
|||
Includer ? getFileInfo(Includer).DirInfo != SrcMgr::C_User :
|
||||
BuildSystemModule;
|
||||
if (const FileEntry *FE = getFileAndSuggestModule(
|
||||
TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader,
|
||||
TmpDir, IncluderAndDir.second, IncluderIsSystemHeader,
|
||||
RequestingModule, SuggestedModule)) {
|
||||
if (!Includer) {
|
||||
assert(First && "only first includer can have no file");
|
||||
|
@ -715,7 +713,7 @@ const FileEntry *HeaderSearch::LookupFile(
|
|||
bool InUserSpecifiedSystemFramework = false;
|
||||
bool HasBeenMapped = false;
|
||||
const FileEntry *FE = SearchDirs[i].LookupFile(
|
||||
Filename, *this, IncludeLoc, SearchPath, RelativePath, RequestingModule,
|
||||
Filename, *this, SearchPath, RelativePath, RequestingModule,
|
||||
SuggestedModule, InUserSpecifiedSystemFramework, HasBeenMapped,
|
||||
MappedName);
|
||||
if (HasBeenMapped) {
|
||||
|
|
|
@ -24,10 +24,6 @@
|
|||
#include "clang/Lex/ModuleLoader.h"
|
||||
#include "clang/Lex/Pragma.h"
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/SaveAndRestore.h"
|
||||
|
@ -141,84 +137,6 @@ static MacroDiag shouldWarnOnMacroUndef(Preprocessor &PP, IdentifierInfo *II) {
|
|||
return MD_NoWarn;
|
||||
}
|
||||
|
||||
// Return true if we want to issue a diagnostic by default if we
|
||||
// encounter this name in a #include with the wrong case. For now,
|
||||
// this includes the standard C and C++ headers, Posix headers,
|
||||
// and Boost headers. Improper case for these #includes is a
|
||||
// potential portability issue.
|
||||
static bool warnByDefaultOnWrongCase(StringRef Include) {
|
||||
// If the first component of the path is "boost", treat this like a standard header
|
||||
// for the purposes of diagnostics.
|
||||
if (::llvm::sys::path::begin(Include)->equals_lower("boost"))
|
||||
return true;
|
||||
|
||||
// "condition_variable" is the longest standard header name at 18 characters.
|
||||
// If the include file name is longer than that, it can't be a standard header.
|
||||
static constexpr std::size_t MaxStdHeaderNameLen = 18u;
|
||||
if (Include.size() > MaxStdHeaderNameLen)
|
||||
return false;
|
||||
|
||||
// Lowercase and normalize the search string.
|
||||
SmallString<32> LowerInclude{Include};
|
||||
for (char &Ch : LowerInclude) {
|
||||
// In the ASCII range?
|
||||
if (Ch < 0 || Ch > 0x7f)
|
||||
return false; // Can't be a standard header
|
||||
// ASCII lowercase:
|
||||
if (Ch >= 'A' && Ch <= 'Z')
|
||||
Ch += 'a' - 'A';
|
||||
// Normalize path separators for comparison purposes.
|
||||
else if (::llvm::sys::path::is_separator(Ch))
|
||||
Ch = '/';
|
||||
}
|
||||
|
||||
// The standard C/C++ and Posix headers
|
||||
return llvm::StringSwitch<bool>(LowerInclude)
|
||||
// C library headers
|
||||
.Cases("assert.h", "complex.h", "ctype.h", "errno.h", "fenv.h", true)
|
||||
.Cases("float.h", "inttypes.h", "iso646.h", "limits.h", "locale.h", true)
|
||||
.Cases("math.h", "setjmp.h", "signal.h", "stdalign.h", "stdarg.h", true)
|
||||
.Cases("stdatomic.h", "stdbool.h", "stddef.h", "stdint.h", "stdio.h", true)
|
||||
.Cases("stdlib.h", "stdnoreturn.h", "string.h", "tgmath.h", "threads.h", true)
|
||||
.Cases("time.h", "uchar.h", "wchar.h", "wctype.h", true)
|
||||
|
||||
// C++ headers for C library facilities
|
||||
.Cases("cassert", "ccomplex", "cctype", "cerrno", "cfenv", true)
|
||||
.Cases("cfloat", "cinttypes", "ciso646", "climits", "clocale", true)
|
||||
.Cases("cmath", "csetjmp", "csignal", "cstdalign", "cstdarg", true)
|
||||
.Cases("cstdbool", "cstddef", "cstdint", "cstdio", "cstdlib", true)
|
||||
.Cases("cstring", "ctgmath", "ctime", "cuchar", "cwchar", true)
|
||||
.Case("cwctype", true)
|
||||
|
||||
// C++ library headers
|
||||
.Cases("algorithm", "fstream", "list", "regex", "thread", true)
|
||||
.Cases("array", "functional", "locale", "scoped_allocator", "tuple", true)
|
||||
.Cases("atomic", "future", "map", "set", "type_traits", true)
|
||||
.Cases("bitset", "initializer_list", "memory", "shared_mutex", "typeindex", true)
|
||||
.Cases("chrono", "iomanip", "mutex", "sstream", "typeinfo", true)
|
||||
.Cases("codecvt", "ios", "new", "stack", "unordered_map", true)
|
||||
.Cases("complex", "iosfwd", "numeric", "stdexcept", "unordered_set", true)
|
||||
.Cases("condition_variable", "iostream", "ostream", "streambuf", "utility", true)
|
||||
.Cases("deque", "istream", "queue", "string", "valarray", true)
|
||||
.Cases("exception", "iterator", "random", "strstream", "vector", true)
|
||||
.Cases("forward_list", "limits", "ratio", "system_error", true)
|
||||
|
||||
// POSIX headers (which aren't also C headers)
|
||||
.Cases("aio.h", "arpa/inet.h", "cpio.h", "dirent.h", "dlfcn.h", true)
|
||||
.Cases("fcntl.h", "fmtmsg.h", "fnmatch.h", "ftw.h", "glob.h", true)
|
||||
.Cases("grp.h", "iconv.h", "langinfo.h", "libgen.h", "monetary.h", true)
|
||||
.Cases("mqueue.h", "ndbm.h", "net/if.h", "netdb.h", "netinet/in.h", true)
|
||||
.Cases("netinet/tcp.h", "nl_types.h", "poll.h", "pthread.h", "pwd.h", true)
|
||||
.Cases("regex.h", "sched.h", "search.h", "semaphore.h", "spawn.h", true)
|
||||
.Cases("strings.h", "stropts.h", "sys/ipc.h", "sys/mman.h", "sys/msg.h", true)
|
||||
.Cases("sys/resource.h", "sys/select.h", "sys/sem.h", "sys/shm.h", "sys/socket.h", true)
|
||||
.Cases("sys/stat.h", "sys/statvfs.h", "sys/time.h", "sys/times.h", "sys/types.h", true)
|
||||
.Cases("sys/uio.h", "sys/un.h", "sys/utsname.h", "sys/wait.h", "syslog.h", true)
|
||||
.Cases("tar.h", "termios.h", "trace.h", "ulimit.h", true)
|
||||
.Cases("unistd.h", "utime.h", "utmpx.h", "wordexp.h", true)
|
||||
.Default(false);
|
||||
}
|
||||
|
||||
bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef,
|
||||
bool *ShadowFlag) {
|
||||
// Missing macro name?
|
||||
|
@ -1638,39 +1556,6 @@ static void diagnoseAutoModuleImport(
|
|||
("@import " + PathString + ";").str());
|
||||
}
|
||||
|
||||
// Given a vector of path components and a string containing the real
|
||||
// path to the file, build a properly-cased replacement in the vector,
|
||||
// and return true if the replacement should be suggested.
|
||||
static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components,
|
||||
StringRef RealPathName) {
|
||||
auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName);
|
||||
auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName);
|
||||
int Cnt = 0;
|
||||
bool SuggestReplacement = false;
|
||||
// Below is a best-effort to handle ".." in paths. It is admittedly
|
||||
// not 100% correct in the presence of symlinks.
|
||||
for (auto &Component : llvm::reverse(Components)) {
|
||||
if ("." == Component) {
|
||||
} else if (".." == Component) {
|
||||
++Cnt;
|
||||
} else if (Cnt) {
|
||||
--Cnt;
|
||||
} else if (RealPathComponentIter != RealPathComponentEnd) {
|
||||
if (Component != *RealPathComponentIter) {
|
||||
// If these path components differ by more than just case, then we
|
||||
// may be looking at symlinked paths. Bail on this diagnostic to avoid
|
||||
// noisy false positives.
|
||||
SuggestReplacement = RealPathComponentIter->equals_lower(Component);
|
||||
if (!SuggestReplacement)
|
||||
break;
|
||||
Component = *RealPathComponentIter;
|
||||
}
|
||||
++RealPathComponentIter;
|
||||
}
|
||||
}
|
||||
return SuggestReplacement;
|
||||
}
|
||||
|
||||
/// HandleIncludeDirective - The "\#include" tokens have just been read, read
|
||||
/// the file to be included from the lexer, then include it! This is a common
|
||||
/// routine with functionality shared between \#include, \#include_next and
|
||||
|
@ -1946,39 +1831,6 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
|
|||
// FIXME: If we have a suggested module, and we've already visited this file,
|
||||
// don't bother entering it again. We know it has no further effect.
|
||||
|
||||
// Issue a diagnostic if the name of the file on disk has a different case
|
||||
// than the one we're about to open.
|
||||
const bool CheckIncludePathPortability =
|
||||
File && !File->tryGetRealPathName().empty();
|
||||
|
||||
if (CheckIncludePathPortability) {
|
||||
StringRef Name = LangOpts.MSVCCompat ? NormalizedPath.str() : Filename;
|
||||
StringRef RealPathName = File->tryGetRealPathName();
|
||||
SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name),
|
||||
llvm::sys::path::end(Name));
|
||||
|
||||
if (trySimplifyPath(Components, RealPathName)) {
|
||||
SmallString<128> Path;
|
||||
Path.reserve(Name.size()+2);
|
||||
Path.push_back(isAngled ? '<' : '"');
|
||||
for (auto Component : Components) {
|
||||
Path.append(Component);
|
||||
// Append the separator the user used, or the close quote
|
||||
Path.push_back(
|
||||
Path.size() <= Filename.size() ? Filename[Path.size()-1] :
|
||||
(isAngled ? '>' : '"'));
|
||||
}
|
||||
auto Replacement = Path.str().str();
|
||||
// For user files and known standard headers, by default we issue a diagnostic.
|
||||
// For other system headers, we don't. They can be controlled separately.
|
||||
auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ?
|
||||
diag::pp_nonportable_path : diag::pp_nonportable_system_path;
|
||||
SourceRange Range(FilenameTok.getLocation(), CharEnd);
|
||||
Diag(FilenameTok, DiagId) << Replacement <<
|
||||
FixItHint::CreateReplacement(Range, Replacement);
|
||||
}
|
||||
}
|
||||
|
||||
// Ask HeaderInfo if we should enter this #include file. If not, #including
|
||||
// this file will have no effect.
|
||||
if (ShouldEnter &&
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef CASE_INSENSITIVE_INCLUDE_H
|
||||
#define CASE_INSENSITIVE_INCLUDE_H
|
||||
|
||||
struct S {
|
||||
int x;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,18 +0,0 @@
|
|||
// REQUIRES: case-insensitive-filesystem
|
||||
|
||||
// RUN: mkdir -p %T/apath
|
||||
// RUN: cp %S/Inputs/case-insensitive-include.h %T
|
||||
// RUN: cd %T
|
||||
// RUN: %clang_cc1 -fsyntax-only -fms-compatibility %s -include %s -I %T -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only -fms-compatibility -fdiagnostics-parseable-fixits %s -include %s -I %T 2>&1 | FileCheck %s
|
||||
|
||||
#include "..\Output\.\case-insensitive-include.h"
|
||||
#include "..\Output\.\Case-Insensitive-Include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:50}:"\"..\\Output\\.\\case-insensitive-include.h\""
|
||||
#include "..\output\.\case-insensitive-include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:50}:"\"..\\Output\\.\\case-insensitive-include.h\""
|
||||
|
||||
#include "apath\..\.\case-insensitive-include.h"
|
||||
#include "apath\..\.\Case-Insensitive-Include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:49}:"\"apath\\..\\.\\case-insensitive-include.h\""
|
||||
#include "APath\..\.\case-insensitive-include.h" // For the sake of efficiency, this case is not diagnosed. :-(
|
|
@ -1,35 +0,0 @@
|
|||
// REQUIRES: case-insensitive-filesystem
|
||||
|
||||
// RUN: mkdir -p %T/apath
|
||||
// RUN: mkdir -p %T/asystempath
|
||||
// RUN: cp %S/Inputs/case-insensitive-include.h %T
|
||||
// RUN: cp %S/Inputs/case-insensitive-include.h %T/asystempath/case-insensitive-include2.h
|
||||
// RUN: cd %T
|
||||
// RUN: %clang_cc1 -fsyntax-only %s -include %s -I %T -isystem %T/asystempath -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s -include %s -I %T -isystem %T/asystempath 2>&1 | FileCheck %s
|
||||
|
||||
// Known standard header, so warn:
|
||||
#include <StdDef.h> // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:20}:"<stddef.h>"
|
||||
|
||||
#include "case-insensitive-include.h"
|
||||
#include "Case-Insensitive-Include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:38}:"\"case-insensitive-include.h\""
|
||||
|
||||
#include "../Output/./case-insensitive-include.h"
|
||||
#include "../Output/./Case-Insensitive-Include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:50}:"\"../Output/./case-insensitive-include.h\""
|
||||
#include "../output/./case-insensitive-include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:50}:"\"../Output/./case-insensitive-include.h\""
|
||||
|
||||
#include "apath/.././case-insensitive-include.h"
|
||||
#include "apath/.././Case-Insensitive-Include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:49}:"\"apath/.././case-insensitive-include.h\""
|
||||
#include "APath/.././case-insensitive-include.h" // For the sake of efficiency, this case is not diagnosed. :-(
|
||||
|
||||
#include "../Output/./apath/.././case-insensitive-include.h"
|
||||
#include "../Output/./APath/.././case-insensitive-include.h" // For the sake of efficiency, this case is not diagnosed. :-(
|
||||
#include "../output/./apath/.././case-insensitive-include.h" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:61}:"\"../Output/./apath/.././case-insensitive-include.h\""
|
||||
|
||||
#include "CASE-INSENSITIVE-INCLUDE2.H" // Found in an -isystem directory. No warning.
|
|
@ -1,10 +0,0 @@
|
|||
// REQUIRES: case-insensitive-filesystem
|
||||
|
||||
// RUN: mkdir -p %T/asystempath
|
||||
// RUN: cp %S/Inputs/case-insensitive-include.h %T/asystempath/
|
||||
// RUN: cd %T
|
||||
// RUN: %clang_cc1 -fsyntax-only %s -include %s -isystem %T/asystempath -verify -Wnonportable-system-include-path
|
||||
// RUN: %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s -include %s -isystem %T/asystempath -Wnonportable-system-include-path 2>&1 | FileCheck %s
|
||||
|
||||
#include "CASE-INSENSITIVE-INCLUDE.H" // expected-warning {{non-portable path}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:10-[[@LINE-1]]:38}:"\"case-insensitive-include.h\""
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// Test this without pch.
|
||||
// RUN: cp %S/Inputs/case-insensitive-include.h %T
|
||||
// RUN: %clang_cc1 -Wno-nonportable-include-path -fsyntax-only %s -include %s -I %T -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only %s -include %s -I %T -verify
|
||||
|
||||
// Test with pch.
|
||||
// RUN: %clang_cc1 -emit-pch -o %t.pch %s -I %T
|
||||
|
|
Loading…
Reference in New Issue