On Wed, Sep 5, 2018 at 9:25 PM Alex L <arpha...@gmail.com> wrote: > Sorry for the late response, > > On Sat, 18 Aug 2018 at 20:10, Nico Weber <tha...@chromium.org> wrote: > >> Also, the diag text should probably say "pass '-stdlib=libc++' " not >> "pass '-std=libc++' "? >> > > Good catch, thanks! I'll commit a fixup for it. > > >> >> On Sat, Aug 18, 2018 at 11:06 PM Nico Weber <tha...@chromium.org> wrote: >> >>> Should this maybe not be emitted when compiling e.g. .ii files >>> (preprocessed output)? I just got this when I built a standalone .ii file >>> with some bug repro after I deleted all -I and -isysroot flags and whatnot, >>> since they aren't needed for preprocessed files. >>> >> > That would make sense, but I'm not sure how easy it is to determine if a > file is already preprocessed. I'll try to create a patch for this fixup. >
Probably you'd want something like http://llvm-cs.pcc.me.uk/tools/clang/lib/Driver/Types.cpp#123 that returns true for all (or most) of the TY_PP_ types, and then just rely on lookupTypeForExtension. > > > >> >>> On Tue, Jun 19, 2018 at 6:52 PM Alex Lorenz via cfe-commits < >>> cfe-commits@lists.llvm.org> wrote: >>> >>>> Author: arphaman >>>> Date: Tue Jun 19 15:47:53 2018 >>>> New Revision: 335081 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=335081&view=rev >>>> Log: >>>> Recommit r335063: [Darwin] Add a warning for missing include path for >>>> libstdc++ >>>> >>>> The recommit ensures that the tests that failed on bots don't trigger >>>> the warning. >>>> >>>> Xcode 10 removes support for libstdc++, but the users just get a >>>> confusing >>>> include not file warning when including an STL header (when building >>>> for iOS6 >>>> which uses libstdc++ by default for example). >>>> This patch adds a new warning that lets the user know that the >>>> libstdc++ include >>>> path was not found to ensure that the user is more aware of why the >>>> error occurs. >>>> >>>> rdar://40830462 >>>> >>>> Differential Revision: https://reviews.llvm.org/D48297 >>>> >>>> Added: >>>> cfe/trunk/test/Frontend/warning-stdlibcxx-darwin.cpp >>>> Modified: >>>> cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td >>>> cfe/trunk/include/clang/Lex/HeaderSearch.h >>>> cfe/trunk/lib/Frontend/InitHeaderSearch.cpp >>>> cfe/trunk/test/CodeGenCXX/apple-kext-guard-variable.cpp >>>> cfe/trunk/test/Misc/backend-stack-frame-diagnostics.cpp >>>> >>>> Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=335081&r1=335080&r2=335081&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original) >>>> +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Tue Jun 19 >>>> 15:47:53 2018 >>>> @@ -236,4 +236,9 @@ def err_invalid_vfs_overlay : Error< >>>> >>>> def warn_option_invalid_ocl_version : Warning< >>>> "OpenCL version %0 does not support the option '%1'">, >>>> InGroup<Deprecated>; >>>> + >>>> +def warn_stdlibcxx_not_found : Warning< >>>> + "include path for stdlibc++ headers not found; pass '-std=libc++' on >>>> the " >>>> + "command line to use the libc++ standard library instead">, >>>> + InGroup<DiagGroup<"stdlibcxx-not-found">>; >>>> } >>>> >>>> Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearch.h?rev=335081&r1=335080&r2=335081&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/include/clang/Lex/HeaderSearch.h (original) >>>> +++ cfe/trunk/include/clang/Lex/HeaderSearch.h Tue Jun 19 15:47:53 2018 >>>> @@ -272,6 +272,8 @@ public: >>>> >>>> FileManager &getFileMgr() const { return FileMgr; } >>>> >>>> + DiagnosticsEngine &getDiags() const { return Diags; } >>>> + >>>> /// Interface for setting the file search paths. >>>> void SetSearchPaths(const std::vector<DirectoryLookup> &dirs, >>>> unsigned angledDirIdx, unsigned systemDirIdx, >>>> >>>> Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=335081&r1=335080&r2=335081&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original) >>>> +++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Tue Jun 19 15:47:53 2018 >>>> @@ -14,6 +14,7 @@ >>>> #include "clang/Basic/FileManager.h" >>>> #include "clang/Basic/LangOptions.h" >>>> #include "clang/Config/config.h" // C_INCLUDE_DIRS >>>> +#include "clang/Frontend/FrontendDiagnostic.h" >>>> #include "clang/Frontend/Utils.h" >>>> #include "clang/Lex/HeaderMap.h" >>>> #include "clang/Lex/HeaderSearch.h" >>>> @@ -55,11 +56,13 @@ public: >>>> >>>> /// AddPath - Add the specified path to the specified group list, >>>> prefixing >>>> /// the sysroot if used. >>>> - void AddPath(const Twine &Path, IncludeDirGroup Group, bool >>>> isFramework); >>>> + /// Returns true if the path exists, false if it was ignored. >>>> + bool AddPath(const Twine &Path, IncludeDirGroup Group, bool >>>> isFramework); >>>> >>>> /// AddUnmappedPath - Add the specified path to the specified group >>>> list, >>>> /// without performing any sysroot remapping. >>>> - void AddUnmappedPath(const Twine &Path, IncludeDirGroup Group, >>>> + /// Returns true if the path exists, false if it was ignored. >>>> + bool AddUnmappedPath(const Twine &Path, IncludeDirGroup Group, >>>> bool isFramework); >>>> >>>> /// AddSystemHeaderPrefix - Add the specified prefix to the system >>>> header >>>> @@ -70,10 +73,9 @@ public: >>>> >>>> /// AddGnuCPlusPlusIncludePaths - Add the necessary paths to support >>>> a gnu >>>> /// libstdc++. >>>> - void AddGnuCPlusPlusIncludePaths(StringRef Base, >>>> - StringRef ArchDir, >>>> - StringRef Dir32, >>>> - StringRef Dir64, >>>> + /// Returns true if the \p Base path was found, false if it does not >>>> exist. >>>> + bool AddGnuCPlusPlusIncludePaths(StringRef Base, StringRef ArchDir, >>>> + StringRef Dir32, StringRef Dir64, >>>> const llvm::Triple &triple); >>>> >>>> /// AddMinGWCPlusPlusIncludePaths - Add the necessary paths to >>>> support a MinGW >>>> @@ -88,7 +90,8 @@ public: >>>> >>>> // AddDefaultCPlusPlusIncludePaths - Add paths that should be >>>> searched when >>>> // compiling c++. >>>> - void AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, >>>> + void AddDefaultCPlusPlusIncludePaths(const LangOptions &LangOpts, >>>> + const llvm::Triple &triple, >>>> const HeaderSearchOptions >>>> &HSOpts); >>>> >>>> /// AddDefaultSystemIncludePaths - Adds the default system include >>>> paths so >>>> @@ -112,7 +115,7 @@ static bool CanPrefixSysroot(StringRef P >>>> #endif >>>> } >>>> >>>> -void InitHeaderSearch::AddPath(const Twine &Path, IncludeDirGroup >>>> Group, >>>> +bool InitHeaderSearch::AddPath(const Twine &Path, IncludeDirGroup >>>> Group, >>>> bool isFramework) { >>>> // Add the path with sysroot prepended, if desired and this is a >>>> system header >>>> // group. >>>> @@ -120,15 +123,14 @@ void InitHeaderSearch::AddPath(const Twi >>>> SmallString<256> MappedPathStorage; >>>> StringRef MappedPathStr = Path.toStringRef(MappedPathStorage); >>>> if (CanPrefixSysroot(MappedPathStr)) { >>>> - AddUnmappedPath(IncludeSysroot + Path, Group, isFramework); >>>> - return; >>>> + return AddUnmappedPath(IncludeSysroot + Path, Group, >>>> isFramework); >>>> } >>>> } >>>> >>>> - AddUnmappedPath(Path, Group, isFramework); >>>> + return AddUnmappedPath(Path, Group, isFramework); >>>> } >>>> >>>> -void InitHeaderSearch::AddUnmappedPath(const Twine &Path, >>>> IncludeDirGroup Group, >>>> +bool InitHeaderSearch::AddUnmappedPath(const Twine &Path, >>>> IncludeDirGroup Group, >>>> bool isFramework) { >>>> assert(!Path.isTriviallyEmpty() && "can't handle empty path here"); >>>> >>>> @@ -150,7 +152,7 @@ void InitHeaderSearch::AddUnmappedPath(c >>>> if (const DirectoryEntry *DE = FM.getDirectory(MappedPathStr)) { >>>> IncludePath.push_back( >>>> std::make_pair(Group, DirectoryLookup(DE, Type, isFramework))); >>>> - return; >>>> + return true; >>>> } >>>> >>>> // Check to see if this is an apple-style headermap (which are not >>>> allowed to >>>> @@ -162,7 +164,7 @@ void InitHeaderSearch::AddUnmappedPath(c >>>> IncludePath.push_back( >>>> std::make_pair(Group, >>>> DirectoryLookup(HM, Type, Group == >>>> IndexHeaderMap))); >>>> - return; >>>> + return true; >>>> } >>>> } >>>> } >>>> @@ -170,15 +172,16 @@ void InitHeaderSearch::AddUnmappedPath(c >>>> if (Verbose) >>>> llvm::errs() << "ignoring nonexistent directory \"" >>>> << MappedPathStr << "\"\n"; >>>> + return false; >>>> } >>>> >>>> -void InitHeaderSearch::AddGnuCPlusPlusIncludePaths(StringRef Base, >>>> +bool InitHeaderSearch::AddGnuCPlusPlusIncludePaths(StringRef Base, >>>> StringRef ArchDir, >>>> StringRef Dir32, >>>> StringRef Dir64, >>>> const llvm::Triple >>>> &triple) { >>>> // Add the base dir >>>> - AddPath(Base, CXXSystem, false); >>>> + bool IsBaseFound = AddPath(Base, CXXSystem, false); >>>> >>>> // Add the multilib dirs >>>> llvm::Triple::ArchType arch = triple.getArch(); >>>> @@ -190,6 +193,7 @@ void InitHeaderSearch::AddGnuCPlusPlusIn >>>> >>>> // Add the backward dir >>>> AddPath(Base + "/backward", CXXSystem, false); >>>> + return IsBaseFound; >>>> } >>>> >>>> void InitHeaderSearch::AddMinGWCPlusPlusIncludePaths(StringRef Base, >>>> @@ -354,46 +358,55 @@ void InitHeaderSearch::AddDefaultCInclud >>>> } >>>> } >>>> >>>> -void InitHeaderSearch:: >>>> -AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const >>>> HeaderSearchOptions &HSOpts) { >>>> +void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths( >>>> + const LangOptions &LangOpts, const llvm::Triple &triple, >>>> + const HeaderSearchOptions &HSOpts) { >>>> llvm::Triple::OSType os = triple.getOS(); >>>> // FIXME: temporary hack: hard-coded paths. >>>> >>>> if (triple.isOSDarwin()) { >>>> + bool IsBaseFound = true; >>>> switch (triple.getArch()) { >>>> default: break; >>>> >>>> case llvm::Triple::ppc: >>>> case llvm::Triple::ppc64: >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> - "powerpc-apple-darwin10", "", >>>> "ppc64", >>>> - triple); >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0", >>>> - "powerpc-apple-darwin10", "", >>>> "ppc64", >>>> - triple); >>>> + IsBaseFound = >>>> AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> + >>>> "powerpc-apple-darwin10", "", >>>> + "ppc64", triple); >>>> + IsBaseFound |= >>>> AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0", >>>> + >>>> "powerpc-apple-darwin10", "", >>>> + "ppc64", triple); >>>> break; >>>> >>>> case llvm::Triple::x86: >>>> case llvm::Triple::x86_64: >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> - "i686-apple-darwin10", "", "x86_64", >>>> triple); >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0", >>>> - "i686-apple-darwin8", "", "", >>>> triple); >>>> + IsBaseFound = >>>> AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> + "i686-apple-darwin10", >>>> "", >>>> + "x86_64", triple); >>>> + IsBaseFound |= AddGnuCPlusPlusIncludePaths( >>>> + "/usr/include/c++/4.0.0", "i686-apple-darwin8", "", "", >>>> triple); >>>> break; >>>> >>>> case llvm::Triple::arm: >>>> case llvm::Triple::thumb: >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> - "arm-apple-darwin10", "v7", "", >>>> triple); >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> - "arm-apple-darwin10", "v6", "", >>>> triple); >>>> + IsBaseFound = AddGnuCPlusPlusIncludePaths( >>>> + "/usr/include/c++/4.2.1", "arm-apple-darwin10", "v7", "", >>>> triple); >>>> + IsBaseFound |= AddGnuCPlusPlusIncludePaths( >>>> + "/usr/include/c++/4.2.1", "arm-apple-darwin10", "v6", "", >>>> triple); >>>> break; >>>> >>>> case llvm::Triple::aarch64: >>>> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1", >>>> - "arm64-apple-darwin10", "", "", >>>> triple); >>>> + IsBaseFound = AddGnuCPlusPlusIncludePaths( >>>> + "/usr/include/c++/4.2.1", "arm64-apple-darwin10", "", "", >>>> triple); >>>> break; >>>> } >>>> + // Warn when compiling pure C++ / Objective-C++ only. >>>> + if (!IsBaseFound && >>>> + !(LangOpts.CUDA || LangOpts.OpenCL || LangOpts.RenderScript)) { >>>> + Headers.getDiags().Report(SourceLocation(), >>>> + diag::warn_stdlibcxx_not_found); >>>> + } >>>> return; >>>> } >>>> >>>> @@ -478,7 +491,7 @@ void InitHeaderSearch::AddDefaultInclude >>>> } >>>> AddPath("/usr/include/c++/v1", CXXSystem, false); >>>> } else { >>>> - AddDefaultCPlusPlusIncludePaths(triple, HSOpts); >>>> + AddDefaultCPlusPlusIncludePaths(Lang, triple, HSOpts); >>>> } >>>> } >>>> >>>> >>>> Modified: cfe/trunk/test/CodeGenCXX/apple-kext-guard-variable.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/apple-kext-guard-variable.cpp?rev=335081&r1=335080&r2=335081&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/test/CodeGenCXX/apple-kext-guard-variable.cpp (original) >>>> +++ cfe/trunk/test/CodeGenCXX/apple-kext-guard-variable.cpp Tue Jun 19 >>>> 15:47:53 2018 >>>> @@ -1,4 +1,4 @@ >>>> -// RUN: %clang -target x86_64-apple-darwin10 -S -o %t.s -mkernel >>>> -Xclang -verify %s >>>> +// RUN: %clang -target x86_64-apple-darwin10 -S -o %t.s >>>> -Wno-stdlibcxx-not-found -mkernel -Xclang -verify %s >>>> >>>> // rdar://problem/9143356 >>>> >>>> >>>> Added: cfe/trunk/test/Frontend/warning-stdlibcxx-darwin.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/warning-stdlibcxx-darwin.cpp?rev=335081&view=auto >>>> >>>> ============================================================================== >>>> --- cfe/trunk/test/Frontend/warning-stdlibcxx-darwin.cpp (added) >>>> +++ cfe/trunk/test/Frontend/warning-stdlibcxx-darwin.cpp Tue Jun 19 >>>> 15:47:53 2018 >>>> @@ -0,0 +1,5 @@ >>>> +// RUN: %clang -cc1 -triple arm64-apple-ios6.0.0 -isysroot >>>> %S/doesnotexist %s 2>&1 | FileCheck %s >>>> +// RUN: %clang -cc1 -triple arm64-apple-ios6.0.0 -isysroot >>>> %S/doesnotexist -stdlib=libc++ %s -verify >>>> +// CHECK: include path for stdlibc++ headers not found; pass >>>> '-std=libc++' on the command line to use the libc++ standard library >>>> instead >>>> + >>>> +// expected-no-diagnostics >>>> >>>> Modified: cfe/trunk/test/Misc/backend-stack-frame-diagnostics.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/backend-stack-frame-diagnostics.cpp?rev=335081&r1=335080&r2=335081&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/test/Misc/backend-stack-frame-diagnostics.cpp (original) >>>> +++ cfe/trunk/test/Misc/backend-stack-frame-diagnostics.cpp Tue Jun 19 >>>> 15:47:53 2018 >>>> @@ -1,6 +1,6 @@ >>>> // REQUIRES: x86-registered-target >>>> -// RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks >>>> -Wframe-larger-than=70 -Xclang -verify -o /dev/null -c %s >>>> -// RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks >>>> -Wframe-larger-than=70 -Xclang -verify -o /dev/null -c %s -DIS_SYSHEADER >>>> +// RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks >>>> -Wframe-larger-than=70 -Wno-stdlibcxx-not-found -Xclang -verify -o >>>> /dev/null -c %s >>>> +// RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks >>>> -Wframe-larger-than=70 -Wno-stdlibcxx-not-found -Xclang -verify -o >>>> /dev/null -c %s -DIS_SYSHEADER >>>> >>>> // Test that: >>>> // * The driver passes the option through to the backend. >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> cfe-commits@lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>> >>>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits