Commit Graph

535 Commits

Author SHA1 Message Date
David Blaikie 2dac430432 Move PreprocessorOptions to std::shared_ptr from IntrusiveRefCntPtr
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291160 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 19:11:36 +00:00
David Blaikie f6f617aeff Use shared_ptr instead of IntrusiveRefCntPtr for ModuleFileExtension
The intrusiveness wasn't needed here, so this simplifies/clarifies the
ownership model.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291150 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 18:23:18 +00:00
Pavel Labath 7a8f655927 [VFS] Replace TimeValue usage with std::chrono
Summary: NFCI

Reviewers: benlangmuir, zturner

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D25948

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286356 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-09 10:52:22 +00:00
Richard Smith d605534140 C++ Modules TS: add frontend support for building pcm files from module
interface files. At the moment, all declarations (and no macros) are exported,
and 'export' declarations are not supported yet.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279794 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-26 00:14:38 +00:00
Richard Smith cefb5a03fb Refactor to remove the assumption that we know the name of the module we're emitting at the point when we create a PCHGenerator (with the C++ modules TS, we find that out part way through parsing the input).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279766 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-25 18:26:30 +00:00
Manman Ren 8c1ac8c452 Module: add -fprebuilt-module-path to support loading prebuilt modules.
In this mode, there is no need to load any module map and the programmer can
simply use "@import" syntax to load the module directly from a prebuilt
module path. When loading from prebuilt module path, we don't support
rebuilding of the module files and we ignore compatible configuration
mismatches.

rdar://27290316
Differential Revision: http://reviews.llvm.org/D23125


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279096 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-18 17:42:15 +00:00
Mehdi Amini 2e23251d3e [NFC] Header cleanup
Summary: Removed unused headers, replaced some headers with forward class declarations

Patch by: Eugene <claprix@yandex.ru>

Differential Revision: https://reviews.llvm.org/D20100

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275882 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-18 19:02:11 +00:00
Peter Collingbourne f1bc23840f Frontend: Simplify ownership model for clang's output streams.
This changes the CompilerInstance::createOutputFile function to return
a std::unique_ptr<llvm::raw_ostream>, rather than an llvm::raw_ostream
implicitly owned by the CompilerInstance. This in most cases required that
I move ownership of the output stream to the relevant ASTConsumer.

The motivation for this change is to allow BackendConsumer to be a client
of interfaces such as D20268 which take ownership of the output stream.

Differential Revision: http://reviews.llvm.org/D21537

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275507 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-15 00:55:40 +00:00
Argyrios Kyrtzidis dc0545b300 [PCH/preamble] Make sure that if the preamble/PCH was serialized with errors that we set diagnostic engine state appropriately.
Otherwise there can be a crash with CFG analysis warnings doing work on invalid AST.

Fixes crash of rdar://26224134

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275313 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 20:35:26 +00:00
Benjamin Kramer 2a965aedd3 Add some std::move where the value is only read otherwise.
This mostly affects smart pointers. No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272520 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-12 20:05:23 +00:00
Cameron Desrochers e5e8f50110 [PCH] Fixed bug with preamble invalidation when overridden files change
When remapped files were changed, they would not always cause the preamble's PCH to be invalidated, because the remapped path didn't necessarily match the include path (e.g. slash direction -- this happens a lot on Windows). I fixed this by moving to a llvm::sys::fs::UniqueID-based map instead of comparing paths stringwise.

Differential Revision: http://reviews.llvm.org/D20137

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@269769 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 14:34:53 +00:00
Saleem Abdulrasool fdc51a5580 revert SVN r265702, r265640
Revert the two changes to thread CodeGenOptions into the TargetInfo allocation
and to fix the layering violation by moving CodeGenOptions into Basic.
Code Generation is arguably not particularly "basic".  This addresses Richard's
post-commit review comments.  This change purely does the mechanical revert and
will be followed up with an alternate approach to thread the desired information
into TargetInfo.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265806 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-08 16:52:00 +00:00
Saleem Abdulrasool e5d3bf167a Basic: thread CodeGenOptions into TargetInfo
This threads CodeGenOptions into the TargetInfo hierarchy.  This is motivated by
ARM which can change some target information based on the EABI selected
(-meabi).  Similar options exist for other platforms (e.g. MIPS) and thus is
generally useful.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265640 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-07 05:41:11 +00:00
Richard Smith 99106d0871 Delete dead variable.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264464 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-25 21:46:44 +00:00
Richard Smith 378d67ec54 [modules] Flatten -fmodule-name= and -fmodule-implementation-of= into a single
option. Previously these options could both be used to specify that you were
compiling the implementation file of a module, with a different set of minor
bugs in each case.

This change removes -fmodule-implementation-of, and instead tracks a flag to
determine whether we're currently building a module. -fmodule-name now behaves
the same way that -fmodule-implementation-of previously did.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261372 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-19 22:25:36 +00:00
Argyrios Kyrtzidis 63aabf17df [ASTUnit] Change the parameter of ASTUnit::LoadFromCompilerInvocationAction to accept a more general FrontendAction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260251 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-09 19:07:13 +00:00
Benjamin Kramer bdb673743a [libclang] Add a flag to create the precompiled preamble on the first parse.
Summary:
The current default is to create the preamble on the first reparse, aka
second parse. This is useful for clients that do not want to block when
opening a file because serializing the preamble takes a bit of time.
However, this makes the reparse much more expensive and that may be on the
critical path as it's the first interaction a user has with the source code.

YouCompleteMe currently optimizes for the first code interaction by parsing
the file twice when loaded. That's just unnecessarily slow and this flag
helps to avoid that.

Reviewers: doug.gregor, klimek

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D15490

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255635 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-15 09:30:31 +00:00
Argyrios Kyrtzidis 96d406d68d [libclang] Make sure to use the raw module format for libclang parsing.
Fixes crash when passing '-gmodules' in the compiler options.
rdar://23588717

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253645 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-20 03:36:21 +00:00
Douglas Gregor 07f81283a4 Introduce module file extensions to piggy-back data onto module files.
Introduce the notion of a module file extension, which introduces
additional information into a module file at the time it is built that
can then be queried when the module file is read. Module file
extensions are identified by a block name (which must be unique to the
extension) and can write any bitstream records into their own
extension block within the module file. When a module file is loaded,
any extension blocks are matched up with module file extension
readers, that are per-module-file and are given access to the input
bitstream.

Note that module file extensions can only be introduced by
programmatic clients that have access to the CompilerInvocation. There
is only one such extension at the moment, which is used for testing
the module file extension harness. As a future direction, one could
imagine allowing the plugin mechanism to introduce new module file
extensions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251955 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-03 18:33:07 +00:00
Angel Garcia Gomez d162035b9b Roll-back r250822.
Summary: It breaks the build for the ASTMatchers

Subscribers: klimek, cfe-commits

Differential Revision: http://reviews.llvm.org/D13893

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250827 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-20 13:23:58 +00:00
Angel Garcia Gomez e83bf34da9 Apply modernize-use-default to clang.
Summary: Replace empty bodies of default constructors and destructors with '= default'.

Reviewers: bkramer, klimek

Subscribers: klimek, alexfh, cfe-commits

Differential Revision: http://reviews.llvm.org/D13890

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250822 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-20 12:52:55 +00:00
Hans Wennborg 94faed6137 Fix Clang-tidy modernize-use-nullptr warnings in source directories; other minor cleanups
Patch by Eugene Zelenko!

Differential Revision: http://reviews.llvm.org/D13406

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249484 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-06 23:40:43 +00:00
Benjamin Kramer 3b3ccc8051 [Tooling] Reuse FileManager in ASTUnit.
ASTUnit was creating multiple FileManagers and throwing them away. Reuse
the one from Tooling. No functionality change now but necessary for
VFSifying tooling.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249410 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-06 14:45:20 +00:00
Adrian Prantl 7bbf57e36a Add a -gmodules option to the driver and a -dwarf-ext-refs to cc1
to enable the use of external type references in the debug info
(a.k.a. module debugging).

The driver expands -gmodules to "-g -fmodule-format=obj -dwarf-ext-refs"
and passes that to cc1. All this does at the moment is set a flag
codegenopts.

http://reviews.llvm.org/D11958

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246192 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 19:46:20 +00:00
Benjamin Kramer 6a286985e5 [Modules] Wrap the main ModuleManager visitor in a function_ref.
Avoids the awkward passing of an opaque void *UserData argument. No
functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243213 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-25 12:14:04 +00:00
Adrian Prantl 1e6cac6da0 Make the clang module container format selectable from the command line.
- introduces a new cc1 option -fmodule-format=[raw,obj]
  with 'raw' being the default
- supports arbitrary module container formats that libclang is agnostic to
- adds the format to the module hash to avoid collisions
- splits the old PCHContainerOperations into PCHContainerWriter and
  a PCHContainerReader.

Thanks to Richard Smith for reviewing this patch!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@242499 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-17 01:19:54 +00:00
Douglas Gregor 11354e9dc8 [libclang] Replace ObjC generic parameters in code-completion results.
rdar://19369529

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241557 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-07 06:20:19 +00:00
Alexander Kornienko 8ca7705aa3 Revert r240270 ("Fixed/added namespace ending comments using clang-tidy").
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240353 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-22 23:07:51 +00:00
Alexander Kornienko ac58acc7f2 Fixed/added namespace ending comments using clang-tidy. NFC
The patch is generated using this command:

  $ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \
      -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \
      work/llvm/tools/clang

To reduce churn, not touching namespaces spanning less than 10 lines.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240270 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-22 09:47:44 +00:00
Adrian Prantl 5f4be954a1 Introduce a PCHContainerOperations interface (NFC).
A PCHContainerOperations abstract interface provides operations for
creating and unwrapping containers for serialized ASTs (precompiled
headers and clang modules). The default implementation is
RawPCHContainerOperations, which uses a flat file for the output.

The main application for this interface will be an
ObjectFilePCHContainerOperations implementation that uses LLVM to
wrap the module in an ELF/Mach-O/COFF container to store debug info
alongside the AST.

rdar://problem/20091852

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240225 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-20 18:53:08 +00:00
Benjamin Kramer b7b56528f9 Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types
If the type isn't trivially moveable emplace can skip a potentially
expensive move. It also saves a couple of characters.


Call sites were found with the ASTMatcher + some semi-automated cleanup.

memberCallExpr(
    argumentCountIs(1), callee(methodDecl(hasName("push_back"))),
    on(hasType(recordDecl(has(namedDecl(hasName("emplace_back")))))),
    hasArgument(0, bindTemporaryExpr(
                       hasType(recordDecl(hasNonTrivialDestructor())),
                       has(constructExpr()))),
    unless(isInTemplateInstantiation()))

No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@238601 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-29 19:42:19 +00:00
Rafael Espindola 3245112474 Return a pointer instead of having a pointer outparam and a bool return.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234590 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-10 12:54:53 +00:00
Yaron Keren 9bd91b686a Remove many superfluous SmallString::str() calls.
Now that SmallString is a first-class citizen, most SmallString::str()
calls are not required. This patch removes a whole bunch of them, yet
there are lots more.

There are two use cases where str() is really needed:
1) To use one of StringRef member functions which is not available in
SmallString.
2) To convert to std::string, as StringRef implicitly converts while 
SmallString do not. We may wish to change this, but it may introduce
ambiguity.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232622 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-18 10:17:07 +00:00
Chandler Carruth b80f819ba5 [modules] Teach the AST reader to handle the case of importing a module
with a subset of the existing target CPU features or mismatched CPU
names.

While we can't check that the CPU name used to build the module will end
up being able to codegen correctly for the translation unit, we actually
check that the imported features are a subset of the existing features.

While here, rewrite the code to use std::set_difference and have it
diagnose all of the differences found.

Test case added which walks the set relationships and ensures we
diagnose all the right cases and accept the others.

No functional change for implicit modules here, just better diagnostics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232248 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-14 04:47:43 +00:00
Argyrios Kyrtzidis fb70944683 [ASTUnit] Fix crash when trying to load a module file via ASTUnit::LoadFromASTFile.
rdar://19997358

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@231060 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-03 08:04:19 +00:00
Adrian Prantl 9f65c56340 Revert "Wrap clang module files in a Mach-O, ELF, or COFF container."
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230454 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-25 02:44:04 +00:00
Adrian Prantl 407c31db6c Wrap clang module files in a Mach-O, ELF, or COFF container.
This is a necessary prerequisite for debugging with modules.
The .pcm files become containers that hold the serialized AST which allows
us to store debug information in the module file that can be shared by all
object files that were built importing the module.

This reapplies r230044 with a fixed configure+make build and updated
dependencies and testcase requirements. Over the last iteration this
version adds
- missing target requirements for testcases that specify an x86 triple,
- a missing clangCodeGen.a dependency to libClang.a in the make build.

rdar://problem/19104245

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230423 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-25 01:31:45 +00:00
Adrian Prantl 947bca71d3 Revert "Wrap clang module files in a Mach-O, ELF, or COFF container."
This reverts commit r230305.
Off to fix another round of missing dependencies on various platforms.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230309 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-24 05:14:17 +00:00
Adrian Prantl b114a1de0a Wrap clang module files in a Mach-O, ELF, or COFF container.
This is a necessary prerequisite for debugging with modules.
The .pcm files become containers that hold the serialized AST which allows
us to store debug information in the module file that can be shared by all
object files that were built importing the module.

rdar://problem/19104245

This reapplies r230044 with a fixed configure+make build and updated
dependencies. Take 3.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230305 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-24 04:25:59 +00:00
Adrian Prantl 59fc8c4fb6 Revert "Wrap clang module files in a Mach-O, ELF, or COFF container."
This reverts commit 230099.

The Linux configure+make build variant still needs some work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230103 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-21 00:29:14 +00:00
Adrian Prantl 4d355e22e1 Wrap clang module files in a Mach-O, ELF, or COFF container.
This is a necessary prerequisite for debugging with modules.
The .pcm files become containers that hold the serialized AST which allows
us to store debug information in the module file that can be shared by all
object files that were built importing the module.

rdar://problem/19104245

This reapplies r230044 with a fixed configure+make build and updated
dependencies. Take 2.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230089 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-20 23:34:26 +00:00
Adrian Prantl ff780299d2 Revert "Wrap clang module files in a Mach-O, ELF, or COFF container."
This reverts commit r230067.

Investigating another batch of problems found by the bots.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230073 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-20 22:12:19 +00:00
Adrian Prantl d9468a7cf5 Wrap clang module files in a Mach-O, ELF, or COFF container.
This is a necessary prerequisite for debugging with modules.
The .pcm files become containers that hold the serialized AST which allows
us to store debug information in the module file that can be shared by all
object files that were built importing the module.

rdar://problem/19104245

This reapplies r230044 with a fixed configure+make build and updated
dependencies.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230067 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-20 21:53:12 +00:00
Adrian Prantl 01ec5f2564 Revert "Wrap clang module files in a Mach-O, ELF, or COFF container."
This reverts commit r230044 while dealing with buildbot breakage.

Conflicts:
	test/Modules/module_container.m

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230052 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-20 20:00:27 +00:00
Adrian Prantl 979ac58e46 Wrap clang module files in a Mach-O, ELF, or COFF container.
This is a necessary prerequisite for debugging with modules.
The .pcm files become containers that hold the serialized AST which allows
us to store debug information in the module file that can be shared by all
object files that were built importing the module.

rdar://problem/19104245

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230044 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-20 19:44:52 +00:00
Benjamin Kramer 7a710529a3 ASTUnit: Fix a name clash in GCC builds.
Should fix the build. Looks like GCC 4.9 is using different scoping rules for
range-based for loops.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228424 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-06 18:58:04 +00:00
Benjamin Kramer a5ef983c7e ASTUnit: Use range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228420 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-06 18:36:04 +00:00
Benjamin Kramer 7daf211f6c Update APIs that return a pair of iterators to return an iterator_range instead.
Convert uses of those APIs into ranged for loops. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228404 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-06 17:25:10 +00:00
Alexander Kornienko f98071d4ea Make DiagnosticsEngine::takeClient return std::unique_ptr<>
Summary:
Make DiagnosticsEngine::takeClient return std::unique_ptr<>. Updated
callers to store conditional ownership using a pair of pointer and unique_ptr
instead of a pointer + bool. Updated code that temporarily registers clients to
use the non-owning registration (+ removed extra calls to takeClient).

Reviewers: dblaikie

Reviewed By: dblaikie

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6294

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222193 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-17 23:46:02 +00:00
Argyrios Kyrtzidis a155890d1f [libclang] Disable spell-checking and warnings during code-completion since they are not needed.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220966 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-31 16:44:32 +00:00
Richard Smith 78c81e530e [modules] When a .pcm file is explicitly built separately from the translation
unit, allow the -O settings of the two compilations to differ.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220943 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-31 02:28:58 +00:00
Benjamin Kramer 0273eb0d7a Make VFS and FileManager match the current MemoryBuffer API.
This eliminates converting back and forth between the 3 formats and
gives us a more homogeneous interface.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220657 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-26 22:44:13 +00:00
Richard Smith 732cea5e28 [modules] Initial support for explicitly loading .pcm files.
Implicit module builds are not well-suited to a lot of build systems. In
particular, they fare badly in distributed build systems, and they lead to
build artifacts that are not tracked as part of the usual dependency management
process. This change allows explicitly-built module files (which are already
supported through the -emit-module flag) to be explicitly loaded into a build,
allowing build systems to opt to manage module builds and dependencies
themselves.

This is only the first step in supporting such configurations, and it should
be considered experimental and subject to change or removal for now.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220359 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-22 02:05:46 +00:00
Justin Bogner 41ed5a7362 Frontend: Don't accept null DiagnosticsEngines when building ASTUnits
The various ways to create an ASTUnit all take a refcounted pointer to
a diagnostics engine as an argument, and if it isn't pointing at
anything they initialize it. This is a pretty confusing API, and it
really makes more sense for the caller to initialize the thing since
they control the lifetime anyway.

This fixes the one caller that didn't bother initializing the pointer
and asserts that the argument is initialized.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219752 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-15 00:33:06 +00:00
Justin Bogner a02506a1da Frontend: Remove some unused arguments in ASTUnit (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219747 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-14 23:36:06 +00:00
Benjamin Kramer 71dc046d3c ASTUnit: Replace out parameter with return value, we have NRVO for this.
And elide the copy when pushing the return value into a vector. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219001 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-03 18:52:54 +00:00
Craig Topper c6da4d1d6c Unique_ptrify PPCallbacks ownership.
Unique_ptr creation stil needs to be moved earlier at some of the call sites.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217474 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-10 04:53:53 +00:00
David Blaikie a0a1a1e037 Improve unique_ptr-y ownership in ASTUnit::ComputePreamble
Rather than having a pair of pairs and a reference out parameter, build
a structure with everything together and named. A raw pointer and a
unique_ptr, rather than a raw pointer and a boolean, are used to
communicate ownership transfer.

It's possible one day we'll end up with a conditional pointer (probably
represented by a raw pointer and a boolean) abstraction to use in places
like this. Conditional ownership seems to be coming up more often than
I'd hoped...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216712 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-29 06:34:53 +00:00
Alexey Samsonov efc6cb24dd Don't create a null reference in ASTUnit::LoadFromCommandLine.
This change is the last in the pack of five commits
(also see r216691, r216694, r216695, and r216696) that reduces the number
of test failures in "check-clang" invocation in UBSan bootstrap
from 2443 down to 5.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216697 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-28 23:51:01 +00:00
Rafael Espindola d92e74d96e Update for LLVM api change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216585 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-27 20:03:29 +00:00
Rafael Espindola 50f7732bbb Return a std::unique_ptr from getBufferForFile. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216478 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-26 20:17:44 +00:00
Rafael Espindola 490fd36bd1 Return a std::unique_ptr from getBufferForFile. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216476 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-26 19:54:40 +00:00
Dylan Noblesmith 8b2795c397 Frontend: unique_ptr-ify
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216347 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-24 18:59:52 +00:00
Rafael Espindola 623a4f45c0 return a std::unique_ptr from getMainBufferWithPrecompiledPreamble. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215927 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-18 18:47:08 +00:00
Rafael Espindola 2166e87fec Simplify ASTUnit::Parse a bit by passing a std::unique_ptr to it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215900 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-18 16:23:45 +00:00
Rafael Espindola 9cda133757 Small cleanup: Don't duplicate default behavior.
std::unique_ptr is null initialized and reset default to null.

Thanks to David Blaikie for noticing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215560 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-13 17:08:22 +00:00
Rafael Espindola 48bd21767d Use std::unique_ptr to simplify memory management a bit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215559 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-13 16:47:00 +00:00
Rafael Espindola 1cb6d934f5 Use StringRef instead of MemoryBuffer&.
This code doesn't care where the data it is processing comes from, so a
StringRef is probably the most natural interface.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215448 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-12 15:46:24 +00:00
David Blaikie 9febd24345 Change MemoryBuffer* to MemoryBuffer& parameter to Lexer::ComputePreamble
(dropping const from the reference as MemoryBuffer is immutable already,
so const is just redundant - and while I'd personally put const
everywhere, that's not the LLVM Way (see llvm::Type for another example
of an immutable type where "const" is omitted for brevity))

Changing the pointer argument to a reference parameter makes call sites
identical between callers with unique_ptrs or raw pointers, minimizing
the churn in a pending unique_ptr migrations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215391 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-11 22:08:06 +00:00
David Blaikie b53da86048 Recommit 213307: unique_ptr-ify ownership of ASTConsumers (reverted in r213325)
After post-commit review and community discussion, this seems like a
reasonable direction to continue, making ownership semantics explicit in
the source using the type system.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215323 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-10 19:56:51 +00:00
David Blaikie b4c407791d unique_ptr-ify CompilerInstance::takeSema
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215321 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-10 19:14:48 +00:00
David Blaikie 04a5a7f94b std::unique_ptr-ify the result of ASTUnit::LoadFromASTFile
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215320 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-10 19:08:04 +00:00
David Blaikie cde40130ce unique_ptr-ify ASTReaderListener in the ASTReader
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215317 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-10 16:54:39 +00:00
David Blaikie 80bfbba822 Revert "unique_ptr-ify ownership of ASTConsumers"
This reverts commit r213307.

Reverting to have some on-list discussion/confirmation about the ongoing
direction of smart pointer usage in the LLVM project.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213325 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-17 22:34:12 +00:00
David Blaikie 4d15e347a0 unique_ptr-ify ownership of ASTConsumers
(after fixing a bug in MultiplexConsumer I noticed the ownership of the
nested consumers was implemented with raw pointers - so this fixes
that... and follows the source back to its origin pushing unique_ptr
ownership up through there too)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213307 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-17 20:40:36 +00:00
Alp Toker 5676ff327f Remove unused sys/stat.h includes
The facility was abstracted to LLVM in r187364.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212441 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 08:37:15 +00:00
Alp Toker 57b86d027b Peel away old-style file remapping typedefs and cruft
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212438 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 07:47:20 +00:00
Alp Toker 1088db3c87 Use non-intrusive refcounting for TargetOptions
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212388 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-06 05:26:44 +00:00
Alp Toker 3e84eb7db6 Use non-intrusive refcounting for LangOptions
This type is only refcounted in a couple of places so making ownership explicit
improves clarity.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212387 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-06 05:26:07 +00:00
Alp Toker f7445e6c6f Constify a read-only parameter and give function a better name
This makes it clear that TargetInfo doesn't capture the LangOptions object,
rather uses it to apply adjustments.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212386 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-06 05:14:24 +00:00
Alp Toker c556f81241 Track IntrusiveRefCntPtr::get() changes from LLVM r212366
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212369 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-05 03:08:06 +00:00
Ben Langmuir f4f9e50a67 Consider module depedencies when checking a preamble in libclang
Add module dependencies (header files, module map files) to the list of
files to check when deciding whether to rebuild a preamble. That fixes
using preambles with module imports so long as they are in
non-overridden files.

My intent is to use to unify the existing dependency collectors to the
new “DependencyCollectory” interface from this commit, starting with the
DependencyFileGenerator.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212060 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-30 20:04:14 +00:00
Ben Langmuir c45bb9c80c Stop sharing the FileManager in ASTUnit::Parse
We were using old stat values for any files that had previously been
looked up, leading to badness. There might be a more elegant solution in
invalidating the cache for those file (since we already know which ones
they are), but it seems too likely there are existing references to
them hiding somewhere.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211504 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-23 16:36:40 +00:00
Craig Topper d24fb6c947 [C++11] Use 'nullptr'. Frontend edition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209389 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-22 04:46:25 +00:00
Alp Toker 1e0ab3f294 Eliminate ASTContext's DelayInitialization flag
Having various possible states of initialization following construction doesn't
add value here.

Also remove the unused size_reserve parameter.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207897 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-03 03:46:04 +00:00
Alp Toker ad0a05027b Reformat code following Preprocessor constructor updates
Landing this separately to make the previous commits easy to follow at home.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207826 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-02 03:43:38 +00:00
Alp Toker e36c959c4d Factor TargetInfo pointer/DelayInitialization bool pair out of Preprocessor ctor
The Preprocessor::Initialize() function already offers a clear interface to
achieve this, further reducing the confusing number of states a newly
constructed preprocessor can have.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207825 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-02 03:43:30 +00:00
Nico Weber 6f6c038a8f Remove unused using statement.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207427 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-28 17:54:37 +00:00
David Blaikie 266c0c986e Push unique_ptr ownership of ASTUnits further back into their factories.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207237 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-25 17:01:33 +00:00
Ben Langmuir 13e41baf78 Attempt to fix null ASTContext in ASTUnit error path
We don't need the ASTContext for the diagnostics, only the language
options, which we can get from the compiler invocation. It worries me
how many categorically different states the ASTUnit class can be in
depending on how it is being constructed/used.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206909 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-22 17:40:12 +00:00
Ben Langmuir f05ef17032 Don't read CompilerInstance fields that don't exist in ASTUnit
When transferring data from a CompilerInstance in an error path we need
to consider cases where the various fields are uninitialized.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206644 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-18 20:39:48 +00:00
Ben Langmuir 426bfa0c45 Honour -ivfsoverlay in ASTUnit to match clang
This allows code indexing, etc. to use the VFS in the same way as the
compiler.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206309 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-15 18:16:25 +00:00
Craig Topper 85bba31eb7 [C++11] Add 'override' keyword to virtual methods that override their base class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203758 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-13 06:07:04 +00:00
Argyrios Kyrtzidis 8f6e31469d [libclang] Don't pad the main buffer for the preamble.
Padding does not seem to be useful currently, and it leads to bogus location if an error
points to the end of the file.

rdar://15836513

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203370 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-09 04:24:57 +00:00
Aaron Ballman 0ce08a0739 [C++11] Replacing EnumDecl iterators enumerator_begin() and enumerator_end() with iterator_range enumerators(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203353 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-08 18:45:14 +00:00
Ahmed Charles 70639e8de3 Replace OwningPtr with std::unique_ptr.
This compiles cleanly with lldb/lld/clang-tools-extra/llvm.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203279 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-07 20:03:18 +00:00
Aaron Ballman caabaa8e4b [C++11] Replacing DeclBase iterators decls_begin() and decls_end() with iterator_range decls(). The same is true for the noload versions of these APIs. Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203278 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-07 19:56:05 +00:00
Ahmed Charles 789a4f820d Change OwningPtr::take() to OwningPtr::release().
This is a precursor to moving to std::unique_ptr.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203275 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-07 19:33:25 +00:00
Benjamin Kramer 3135d45300 [C++11] Use std::atomic instead of LLVM's.
No intended functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202652 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-02 17:08:31 +00:00
Benjamin Kramer ba9fd9e97e [C++11] Replace llvm::tie with std::tie.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202639 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-02 13:01:17 +00:00