summaryrefslogtreecommitdiff
path: root/test/Driver/cl-pch-search.cpp
Commit message (Collapse)AuthorAgeFilesLines
* [clang-cl, PCH] Implement support for MS-style PCH through headersErich Keane2018-07-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | Implement support for MS-style PCH through headers. This enables support for /Yc and /Yu where the through header is either on the command line or included in the source. It replaces the current support the requires the header also be specified with /FI. This change adds a -cc1 option -pch-through-header that is used to either start or stop compilation during PCH create or use. When creating a PCH, the compilation ends after compilation of the through header. When using a PCH, tokens are skipped until after the through header is seen. Patch By: mikerice Differential Revision: https://reviews.llvm.org/D46652 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@336379 91177308-0d34-0410-b5e6-96231b3b80d8
* [NFC] fix trivial typos in commentsHiroshi Inoue2018-01-291-1/+1
| | | | | | | | "to to" -> "to" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@323627 91177308-0d34-0410-b5e6-96231b3b80d8
* test: adjust the target for some Windows testsSaleem Abdulrasool2018-01-231-1/+1
| | | | | | | | The tests are targeting Windows but do not specify an environment. When executed on Linux, they would use an ELF output rather than the COFF output. Explicitly provide an environment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@323225 91177308-0d34-0410-b5e6-96231b3b80d8
* [clang-cl] Fix PCH tests to use x86_64 as targetDiana Picus2016-08-021-1/+1
| | | | | | | | | | | | These tests require x86-registered-target, but they don't force the target as x86 on the command line, which means they will be run and they might fail when building the x86 backend on another platform (such as AArch64). Fixes https://llvm.org/bugs/show_bug.cgi?id=28797 Differential Revision: https://reviews.llvm.org/D23054 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@277457 91177308-0d34-0410-b5e6-96231b3b80d8
* clang-cl: Remove -isystem, add -imsvc.Nico Weber2016-04-121-4/+0
| | | | | | | | | | | | | | | | | | r260990 exposed -isystem in clang-cl. -isystem adds a directory to the front of the system include search path. The idea was to use this to point to a hermetic msvc install, but as it turns out this doesn't work: -isystem then adds the hermetic headers in front of clang's builtin headers, and clang's headers that are supposed to wrap msvc headers (say, stdarg.h) aren't picked up at all anymore. So revert that, and instead expose -imsvc which works as if the passed directory was part of %INCLUDE%: The header is treated as a system header, but it is searched after clang's lib/Header headers. Fixes half of PRPR26751. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266108 91177308-0d34-0410-b5e6-96231b3b80d8
* clang-cl: Don't skip i_group flags other than -include when building pchs.Nico Weber2016-04-021-0/+4
| | | | | | | | Before this change, e.g. -isystem flags in front of the /FI corresponding to the pch file would be incorrectly ignored. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265238 91177308-0d34-0410-b5e6-96231b3b80d8
* clang-cl: Enable PCH flags by default.Nico Weber2016-03-041-1/+1
| | | | | | | | | | | | | | Now that pragma comment and pragma detect_mismatch are implemented, this might just work. Some pragmas aren't serialized yet (from the top of my head: code_seg, bss_seg, data_seg, const_seg, init_seg, section, vtordisp), but these are as far as I know usually pushed and popped within the header and usually don't leak out. If it turns out the current PCH support isn't good enough yet, we can turn it off again. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262749 91177308-0d34-0410-b5e6-96231b3b80d8
* clang-cl: Implement initial limited support for precompiled headers.Nico Weber2016-03-011-0/+6
In the gcc precompiled header model, one explicitly runs clang with `-x c++-header` on a .h file to produce a gch file, and then includes the header with `-include foo.h` and if a .gch file exists for that header it gets used. This is documented at http://clang.llvm.org/docs/UsersManual.html#precompiled-headers cl.exe's model is fairly different, and controlled by the two flags /Yc and /Yu. A pch file is generated as a side effect of a regular compilation when /Ycheader.h is passed. While the compilation is running, the compiler keeps track of #include lines in the main translation unit and writes everything up to an `#include "header.h"` line into a pch file. Conversely, /Yuheader.h tells the compiler to skip all code in the main TU up to and including `#include "header.h"` and instead load header.pch. (It's also possible to use /Yc and /Yu without an argument, in that case a `#pragma hrdstop` takes the role of controlling the point where pch ends and real code begins.) This patch implements limited support for this in that it requires the pch header to be passed as a /FI force include flag – with this restriction, it can be implemented almost completely in the driver with fairly small amounts of code. For /Yu, this is trivial, and for /Yc a separate pch action is added that runs before the actual compilation. After r261774, the first failing command makes a compilation stop – this means if the pch fails to build the main compilation won't run, which is what we want. However, in /fallback builds we need to run the main compilation even if the pch build fails so that the main compilation's fallback can run. To achieve this, add a ForceSuccessCommand that pretends that the pch build always succeeded in /fallback builds (the main compilation will then fail to open the pch and run the fallback cl.exe invocation). If /Yc /Yu are used in a setup that clang-cl doesn't implement yet, clang-cl will now emit a "not implemented yet; flag ignored" warning that can be disabled using -Wno-clang-cl-pch. Since clang-cl doesn't yet serialize some important things (most notably `pragma comment(lib, ...)`, this feature is disabled by default and only enabled by an internal driver flag. Once it's more stable, this internal flag will disappear. (The default stdafx.h setup passes stdafx.h as explicit argument to /Yc but not as /FI – instead every single TU has to `#include <stdafx.h>` as first thing it does. Implementing support for this should be possible with the approach in this patch with minimal frontend changes by passing a --stop-at / --start-at flag from the driver to the frontend. This is left for a follow-up. I don't think we ever want to support `#pragma hdrstop`, and supporting it with this approach isn't easy: This approach relies on the driver knowing the pch filename in advance, and `#pragma hdrstop(out.pch)` can set the output filename, so the driver can't know about it in advance.) clang-cl now also honors /Fp and puts pch files in the same spot that cl.exe would put them, but the pch file format is of course incompatible. This has ramifications on /fallback, so /Yc /Yu aren't passed through to cl.exe in /fallback builds. http://reviews.llvm.org/D17695 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262420 91177308-0d34-0410-b5e6-96231b3b80d8