On Fri, 7 Sep 2018 at 12:02, Alex L <arpha...@gmail.com> wrote: > > On Fri, 7 Sep 2018 at 05:41, Nico Weber <tha...@chromium.org> wrote: > >> 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. >>> >> > Fixed in r341697. > > >> >>> >>>> >>>> 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. >> > > Good idea, I'll try it out. >
Apologies for the delay, I fixed the issue with preprocessed inputs in r348540. Cheers, Alex > > >> >> >>> >>> >>> >>>> >>>>> 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