r335081 - Recommit r335063: [Darwin] Add a warning for missing include path for libstdc++
Alex L via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 7 12:02:08 PDT 2018
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.
>
>
>>
>>
>>
>>>
>>>> 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/20180907/5178b70a/attachment-0001.html>
More information about the cfe-commits
mailing list