r335081 - Recommit r335063: [Darwin] Add a warning for missing include path for libstdc++
Alex L via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 6 14:55:43 PST 2018
On Fri, 7 Sep 2018 at 12:02, Alex L <arphaman at gmail.com> wrote:
>
> On Fri, 7 Sep 2018 at 05:41, Nico Weber <thakis at chromium.org> wrote:
>
>> On Wed, Sep 5, 2018 at 9:25 PM Alex L <arphaman at gmail.com> wrote:
>>
>>> Sorry for the late response,
>>>
>>> On Sat, 18 Aug 2018 at 20:10, Nico Weber <thakis at 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 <thakis at 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 at 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 at lists.llvm.org
>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>>
>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181206/523be003/attachment-0001.html>
More information about the cfe-commits
mailing list