summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/PCHWriter.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Support C++ friend declarations for PCH.Argyrios Kyrtzidis2010-06-291-5/+10
| | | | | | | | | | | | This commit 'introduces' a slightly different way to restore the state of the AST object. It makes PCHDeclReader/PCHDeclWriter friends and gives them access to the private members of the object. The rationale is to avoid using/modifying the AST interfaces for PCH read/write so that to: -Avoid complications with objects that have side-effects during creation or when using some setters. -Not 'pollute' the AST interface with methods only used by the PCH reader/writer -Allow AST objects to be read-only. llvm-svn: 107219
* Modify the way sub-statements are stored and retrieved from PCH.Argyrios Kyrtzidis2010-06-281-2/+2
| | | | | | | | | | | | | | | Before this commit, sub-stmts were stored as encountered and when they were placed in the Stmts stack we had to know what index each stmt operand has. This complicated supporting variable sub-stmts and sub-stmts that were contained in TypeSourceInfos, e.g. x = sizeof(int[1]); would crash PCH. Now, sub-stmts are stored in reverse order, from last to first, so that when reading them, in order to get the next sub-stmt we just need to pop the last stmt from the stack. This greatly simplified the way stmts are written and read (just use PCHWriter::AddStmt and PCHReader::ReadStmt accordingly) and allowed variable stmt operands and TypeSourceInfo exprs. llvm-svn: 107087
* Fix PCH emitting/reading for template arguments that contain expressions.Argyrios Kyrtzidis2010-06-281-5/+11
| | | | llvm-svn: 106996
* Implement support for -fwrapv, rdar://7221421Chris Lattner2010-06-261-5/+2
| | | | | | | | | | | | As part of this, pull together trapv handling into the same enum. This also add support for NSW multiplies. This also makes PCH disagreement on overflow behavior silent, since it really doesn't matter except for warnings and codegen (no macros get defined etc). llvm-svn: 106956
* Support DependentTemplateSpecializationType and ElaboratedType for PCH.Argyrios Kyrtzidis2010-06-251-5/+10
| | | | llvm-svn: 106858
* Support a couple more C++ Exprs for PCH.Argyrios Kyrtzidis2010-06-241-2/+4
| | | | llvm-svn: 106727
* Support C++ class template specializations and partial specializations for PCH.Argyrios Kyrtzidis2010-06-231-0/+26
| | | | llvm-svn: 106625
* improve altivec vector bool/pixel support, patch by Anton YartsevChris Lattner2010-06-231-2/+1
| | | | | | with several tweaks by me. llvm-svn: 106619
* -Introduce PCHReader::ReadTemplateArgumentLoc()Argyrios Kyrtzidis2010-06-221-7/+17
| | | | | | | | -Introduce PCHWriter::AddTemplateArgumentLocInfo() -Modify PCHWriter::AddTemplateArgumentLoc() to also write TemplateArgumentLoc's TemplateArgument and move the existing calls of AddTemplateArgumentLoc() to AddTemplateArgumentLocInfo(). llvm-svn: 106533
* Initial support for writing templates to PCH.Argyrios Kyrtzidis2010-06-191-15/+109
| | | | llvm-svn: 106391
* Implement first TD-based usage of attributes.Alexis Hunt2010-06-161-57/+57
| | | | | | | | | | | | | | | | | Currently, there are two effective changes: - Attr::Kind has been changed to attr::Kind, in a separate namespace rather than the Attr class. This is because the enumerator needs to be visible to parse. - The class definitions for the C++0x attributes other than aligned are generated by TableGen. The specific classes generated by TableGen are controlled by an array in TableGen (see the accompanying commit to the LLVM repository). I will be expanding the amount of code generated as I develop the new attributes system while initially keeping it confined to these attributes. llvm-svn: 106172
* Split DependentNameType into two types. DependentNameType represents theJohn McCall2010-06-111-0/+10
| | | | | | | | | | | | | | case of an elaborated-type-specifier like 'typename A<T>::foo', and DependentTemplateSpecializationType represents the case of an elaborated-type-specifier like 'typename A<T>::template B<T>'. The TypeLoc representation of a DependentTST conveniently exactly matches that of an ElaboratedType wrapping a TST. Kill off the explicit rebuild methods for RebuildInCurrentInstantiation; the standard implementations work fine because the nested name specifier is computable in the newly-entered context. llvm-svn: 105801
* AST: Add AlignMac68kAttr, not yet used.Daniel Dunbar2010-05-271-0/+3
| | | | llvm-svn: 104800
* AST: Rename PragmaPackAttr to MaxFieldAlignmentAttr, which is more accurate.Daniel Dunbar2010-05-271-2/+2
| | | | llvm-svn: 104795
* Added basic source locations to Elaborated and DependentName types.Abramo Bagnara2010-05-191-1/+4
| | | | llvm-svn: 104169
* Add clang support for IBOutletCollection.Ted Kremenek2010-05-191-0/+6
| | | | llvm-svn: 104135
* Emit a type record for TYPE_OBJC_OBJECT in the PCH file. I'm notJohn McCall2010-05-161-0/+1
| | | | | | entirely sure what this does, to be honest. llvm-svn: 103895
* Substantially alter the design of the Objective C type AST by introducingJohn McCall2010-05-151-13/+10
| | | | | | | | | | | | | | | | | | | | | ObjCObjectType, which is basically just a pair of one of {primitive-id, primitive-Class, user-defined @class} with a list of protocols. An ObjCObjectPointerType is therefore just a pointer which always points to one of these types (possibly sugared). ObjCInterfaceType is now just a kind of ObjCObjectType which happens to not carry any protocols. Alter a rather large number of use sites to use ObjCObjectType instead of ObjCInterfaceType. Store an ObjCInterfaceType as a pointer on the decl rather than hashing them in a FoldingSet. Remove some number of methods that are no longer used, at least after this patch. By simplifying ObjCObjectPointerType, we are now able to easily remove and apply pointers to Objective-C types, which is crucial for a certain kind of ObjC++ metaprogramming common in WebKit. llvm-svn: 103870
* Revert r103770, "Added basic source locations to Elaborated and DependentNameDaniel Dunbar2010-05-141-2/+1
| | | | | | types.", it is breaking Clang bootstrap. llvm-svn: 103775
* Added basic source locations to Elaborated and DependentName types.Abramo Bagnara2010-05-141-1/+2
| | | | llvm-svn: 103770
* Merged Elaborated and QualifiedName types.Abramo Bagnara2010-05-111-13/+7
| | | | llvm-svn: 103517
* pchify CXXTemporary, CXXBindTemporaryExpr, and Chris Lattner2010-05-101-0/+4
| | | | | | CXXExprWithTemporaries. llvm-svn: 103387
* add PCH support for a bunch of C++ Decls, patch byChris Lattner2010-05-071-0/+44
| | | | | | Andrew Sutton! llvm-svn: 103301
* Make the InjectedClassNameType the canonical type of the current instantiationJohn McCall2010-04-271-1/+2
| | | | | | | | | | | | | | | | of a class template or class template partial specialization. That is to say, in template <class T> class A { ... }; or template <class T> class B<const T*> { ... }; make 'A<T>' and 'B<const T*>' sugar for the corresponding InjectedClassNameType when written inside the appropriate context. This allows us to track the current instantiation appropriately even inside AST routines. It also allows us to compute a DeclContext for a type much more efficiently, at some extra cost every time we write a template specialization (which can be optimized, but I've left it simple in this patch). llvm-svn: 102407
* More work toward implementingFariborz Jahanian2010-04-231-4/+2
| | | | | | NeXt's -fno-constant-cfstrings - wip. llvm-svn: 102189
* Check for -fno-constant-cfstrings consistencyFariborz Jahanian2010-04-221-0/+1
| | | | | | in pch. llvm-svn: 102130
* push some source location information down through the compiler,Chris Lattner2010-04-201-2/+2
| | | | | | | | into ContentCache::getBuffer. This allows it to produce diagnostics on the broken #include line instead of without a location. llvm-svn: 101939
* Add support for '-fgnu-keywords' and '-fasm' to Clang's driver. They are notChandler Carruth2010-04-171-0/+1
| | | | | | | | implemented precisely the same as GCC, but the distinction GCC makes isn't useful to represent. This allows parsing code which uses GCC-specific keywords ('asm', etc.) without parsing in a fully GNU mode. llvm-svn: 101667
* Rename TypenameType to DependentNameType in anticipation of someDouglas Gregor2010-03-311-1/+1
| | | | | | refactoring work in this area. llvm-svn: 100019
* Remember the regparm attribute in FunctionType::ExtInfo.Rafael Espindola2010-03-301-0/+1
| | | | | | Fixes PR3782. llvm-svn: 99940
* the big refactoring bits of PR3782.Rafael Espindola2010-03-301-2/+3
| | | | | | | | This introduces FunctionType::ExtInfo to hold the calling convention and the noreturn attribute. The next patch will extend it to include the regparm attribute and fix the bug. llvm-svn: 99920
* Keep track of the size/modification time of each file source-locationDouglas Gregor2010-03-211-0/+7
| | | | | | | entry in a precompiled header, so that we can detect modified files even when we miss in the stat cache. llvm-svn: 99149
* Remove the capture, serialization, and deserialization of commentDouglas Gregor2010-03-191-20/+0
| | | | | | | | ranges as part of the ASTContext. This code is not and was never used, but contributes ~250k to the size of the Cocoa.h precompiled header. llvm-svn: 99007
* Implement serialization and lazy deserialization of the preprocessingDouglas Gregor2010-03-191-3/+86
| | | | | | | | | | | | | | | | | | | | | | | | record (which includes all macro instantiations and definitions). As with all lay deserialization, this introduces a new external source (here, an external preprocessing record source) that loads all of the preprocessed entities prior to iterating over the entities. The preprocessing record is an optional part of the precompiled header that is disabled by default (enabled with -detailed-preprocessing-record). When the preprocessor given to the PCH writer has a preprocessing record, that record is written into the PCH file. When the PCH reader is given a PCH file that contains a preprocessing record, it will be lazily loaded (which, effectively, implicitly adds -detailed-preprocessing-record). This is the first case where we have sections of the precompiled header that are added/removed based on a compilation flag, which is unfortunate. However, this data consumes ~550k in the PCH file for Cocoa.h (out of ~9.9MB), and there is a non-trivial cost to gathering this detailed preprocessing information, so it's too expensive to turn on by default. In the future, we should investigate a better encoding of this information. llvm-svn: 99002
* Fix header-search problems with precompiled headers, where theDouglas Gregor2010-03-161-15/+15
| | | | | | | | | | | | | | | | | | | | | | presence or absence of header map arguments when using the precompiled header would cause Clang to get confused about which headers had already been included/imported, along with their controlling macros. The fundamental problem is that the serialization of the header search information was relying on the UIDs of FileEntry objects at PCH generation time and PCH load time to be equivalent, which effectively means that we had to probe the same files in the same order. Differing header map arguments caused an extra FileEntry lookup, but it's easy to imagine other minor command-line arguments triggering this problem. Header-search information is now encoded along with the source-location entry for a file, so that we register information about a file's properties as a header at the same time we create the FileEntry for that file. Fixes <rdar://problem/7743243>. llvm-svn: 98636
* Use SourceManager's Diagnostic object for all file-reading errors,Douglas Gregor2010-03-161-1/+2
| | | | | | simplifying the SourceManager interfaces somewhat. llvm-svn: 98598
* Path related cleanup. Remove unnecessary variables.Kovarththanan Rajaratnam2010-03-141-6/+2
| | | | llvm-svn: 98473
* Use makeAbsolute()Kovarththanan Rajaratnam2010-03-141-25/+17
| | | | llvm-svn: 98472
* Create a new InjectedClassNameType to represent bare-word references to the John McCall2010-03-101-0/+9
| | | | | | | | | | | | | injected class name of a class template or class template partial specialization. This is a non-canonical type; the canonical type is still a template specialization type. This becomes the TypeForDecl of the pattern declaration, which cleans up some amount of code (and complicates some other parts, but whatever). Fixes PR6326 and probably a few others, primarily by re-establishing a few invariants about TypeLoc sizes. llvm-svn: 98134
* Add support for the weakref attribute. We still produce "alias weak" as ↵Rafael Espindola2010-02-231-1/+1
| | | | | | llvm-gcc does, but are more strict on what uses of weakref we accept. llvm-svn: 96992
* Sort cases.Ted Kremenek2010-02-181-2/+2
| | | | llvm-svn: 96536
* Add 'ns_returns_not_retained' and 'cf_returns_not_retained' attributes toTed Kremenek2010-02-181-2/+4
| | | | | | | match 'ns_returns_retained' and 'cf_returns_retained' respectively. These are not yet hooked up to the static analyzer. llvm-svn: 96535
* Add IBAction attribute to keep the IBOutlet attribute company.Ted Kremenek2010-02-171-0/+1
| | | | llvm-svn: 96447
* Implementing unused function warning.Tanya Lattner2010-02-121-0/+10
| | | | llvm-svn: 95940
* clang -cc1: Add -fsjlj-exceptions, which requires far too much button pushing.Daniel Dunbar2010-02-101-0/+1
| | | | llvm-svn: 95785
* Implement synthesizing properties by default.Fariborz Jahanian2010-02-091-1/+4
| | | | | | | | | This is a non-fragile-abi feature only. Since it breaks existing code, it is currently placed under -fobjc-nonfragile-abi2 option for test purposes only until further notice. WIP. llvm-svn: 95685
* Roll r95513 back in.Sam Weinig2010-02-071-0/+9
| | | | llvm-svn: 95515
* Roll out r95513, it seems to have broken self hosting.Sam Weinig2010-02-071-9/+0
| | | | llvm-svn: 95514
* Add PCH support for CXXBoolLiteralExpr and CXXNullPtrLiteralExpr.Sam Weinig2010-02-071-0/+9
| | | | llvm-svn: 95513
* First stage of adding AltiVec supportJohn Thompson2010-02-051-0/+2
| | | | llvm-svn: 95335
OpenPOWER on IntegriCloud