Commit Graph

2462 Commits

Author SHA1 Message Date
Argyrios Kyrtzidis
e262a9558e Fix C++ PCH issue.
Another beating by boost in this test case: http://llvm.org/PR8117
A function specialization wasn't properly initialized if it wasn't canonical.

I wish there was a nice little test case but this was boost.

llvm-svn: 113481
2010-09-09 11:28:23 +00:00
Ted Kremenek
c42f345157 When building SwitchStmts in Sema, record whether all the enum values of a switch(enum) where
covered by individual case statements.  Flow-based analyses may wish to consult this information,
and recording this in the AST allows us to obviate reconstructing this information later when
we build the CFG.

llvm-svn: 113447
2010-09-09 00:05:53 +00:00
Argyrios Kyrtzidis
260b4a8e92 Re-enable CheckAccessDeclContext and make sure it doesn't trigger assertions.
llvm-svn: 113413
2010-09-08 21:32:35 +00:00
Argyrios Kyrtzidis
f4bc0d87ee Fix C++ PCH issues.
PCH got a severe beating by the boost-using test case reported here: http://llvm.org/PR8099
Fix issues like:

-When PCH reading, make sure Decl's getASTContext() doesn't get called since a Decl in the parent hierarchy may be initializing.
-In ASTDeclReader::VisitFunctionDecl VisitRedeclarable should be called before using FunctionDecl's isCanonicalDecl()
-In ASTDeclReader::VisitRedeclarableTemplateDecl CommonOrPrev must be initialized before anything else.

llvm-svn: 113391
2010-09-08 19:31:22 +00:00
Francois Pichet
9f4f2078d6 Microsoft's __uuidof operator implementation part 1.
llvm-svn: 113356
2010-09-08 12:20:18 +00:00
Douglas Gregor
2b88c115f9 Provide proper type-source location information for
CXXTemporaryObjectExpr, CXXScalarValueInitExpr, and
CXXUnresolvedConstructExpr, getting rid of a bunch of FIXMEs in the
process.

llvm-svn: 113319
2010-09-08 00:15:04 +00:00
Douglas Gregor
0744ef6371 Improve source-location information for CXXNewExpr, by hanging on to
the TypeSourceInfo for the allocated type. Fixes PR7501.

llvm-svn: 113291
2010-09-07 21:49:58 +00:00
Benjamin Kramer
25f9ea6f0a Replace loops with SmallVector::append.
llvm-svn: 113185
2010-09-06 23:43:28 +00:00
Argyrios Kyrtzidis
d05f3e3730 Fix a C++ PCH problem which was exposed by r113019. CXXBaseOrMemberInitializer's IsWritten and source order is not set.
llvm-svn: 113161
2010-09-06 19:04:27 +00:00
Douglas Gregor
6429f5cf29 Eliminate CXXBindReferenceExpr, which was used in a ton of
well-intentioned but completely unused code.

llvm-svn: 112868
2010-09-02 21:50:02 +00:00
Benjamin Kramer
cd495039cc Avoid implicit string construction.
llvm-svn: 112820
2010-09-02 15:06:24 +00:00
Douglas Gregor
a9aa29cf0b Implement libclang support for using declarations. Clang actually uses
three different kinds of AST nodes to represent using declarations:
UsingDecl, UnresolvedUsingValueDecl, and
UnresolvedUsingTypenameDecl. These three are collapsed into a single
cursor kind for using declarations, since libclang clients don't need
the distinction.

Several related changes here:
  - Cursor visitation of the three AST nodes for using declarations
  - Proper source-range computation for these AST nodes
  - Using declarations have no USRs, since they don't actually declare
    any entities.

llvm-svn: 112730
2010-09-01 19:52:22 +00:00
Douglas Gregor
01a430134f Implement libclang support for using directives (cursor + visitation +
suppressing USRs). Also, fix up the source location information for
using directives so that the declaration location refers to the
namespace name.

llvm-svn: 112693
2010-09-01 03:07:18 +00:00
Ted Kremenek
0ef508d301 Split ObjCInterfaceDecl::ReferencedProtocols into two lists: ReferencedProtocols and AllReferencedProtocols. ReferencedProtocols
(and thus protocol_begin(), protocol_end()) now only contains the list of protocols that were directly referenced in
an @interface declaration.  'all_referenced_protocol_[begin,end]()' now returns the set of protocols that were referenced
in both the @interface and class extensions.  The latter is needed for semantic analysis/codegen, while the former is
needed to maintain the lexical information of the original source.

Fixes <rdar://problem/8380046>.

llvm-svn: 112691
2010-09-01 01:21:15 +00:00
Douglas Gregor
f9e43cef54 Improve location information in the representation of namespace
aliases. Previously, the location of the alias was at the "namespace"
keyword. Now, it's on the identifier being declared (as is the custom
for Clang), and we keep a separate source location for the "namespace"
keyword.

Also, added a getSourceRange() member function to NamespaceAliasDecl
to correctly compute the source range.

Finally, removed a bunch of setters from NamespaceAliasDecl and gave
ASTReaderDecl friendship so that it could set the corresponding fields
directly.

llvm-svn: 112681
2010-09-01 00:08:19 +00:00
Fariborz Jahanian
c6bf0bd51b AST work to support [C++] [IRgen] for ?: with missing LHS
This is also pr7726 and wip. No change in functionality
at this time.

llvm-svn: 112612
2010-08-31 18:02:20 +00:00
Argyrios Kyrtzidis
43b205796f Fix the memory leak of FloatingLiteral/IntegerLiteral.
For large floats/integers, APFloat/APInt will allocate memory from the heap to represent these numbers.
Unfortunately, when we use a BumpPtrAllocator to allocate IntegerLiteral/FloatingLiteral nodes the memory associated with
the APFloat/APInt values will never get freed.
I introduce the class 'APNumericStorage' which uses ASTContext's allocator for memory allocation and is used internally by FloatingLiteral/IntegerLiteral.

Fixes rdar://7637185

llvm-svn: 112361
2010-08-28 09:06:06 +00:00
John McCall
8e7d656a4a De-memberify the VarDecl and FunctionDecl StorageClass enums.
This lets us remove Sema.h's dependency on Expr.h and Decl.h.

llvm-svn: 112156
2010-08-26 03:08:43 +00:00
John McCall
2536c6da0e More incremental progress towards not including Expr.h in Sema.h.
llvm-svn: 112044
2010-08-25 10:28:54 +00:00
Chandler Carruth
5408017356 Rename *PendingImplicitInstantiations to *PendingInstantiations. No
functionality changed.

llvm-svn: 112040
2010-08-25 08:44:16 +00:00
John McCall
19c1bfd1b0 Move more stuff out of Sema.h.
llvm-svn: 112026
2010-08-25 05:32:35 +00:00
Sebastian Redl
401b39a736 AST writer support for having specializations of templates from earlier in the chain. This ought to finish C++ chained PCH support.
llvm-svn: 111986
2010-08-24 22:50:24 +00:00
Sebastian Redl
aba202b430 AST reader support for having specializations of templates from earlier in the chain.
llvm-svn: 111985
2010-08-24 22:50:19 +00:00
John McCall
cc14d1fd23 More header elimination. The goal of all this is to allow Parser to
#include Sema.h while keeping all the AST declarations opaque.  That may
not be reasonably attainable, though.

llvm-svn: 111907
2010-08-24 08:50:51 +00:00
John McCall
bfd822ce64 Remove a header dependency from Sema.h at the cost of some type safety.
If someone wants to fix this some other way....

llvm-svn: 111905
2010-08-24 07:32:53 +00:00
Sebastian Redl
9617e7e8c7 Add testcase for C++ chained PCH and fix the bugs it uncovered in name lookup.
llvm-svn: 111882
2010-08-24 00:50:16 +00:00
Sebastian Redl
a4071b4fac Write visible update blocks. No regressions in normal PCH functionality, but no tests for the chain yet.
llvm-svn: 111881
2010-08-24 00:50:09 +00:00
Sebastian Redl
d7dce0a44d Read the UPDATE_VISIBLE record, and add its visible decls to the lookup tables. Also, free the lookup tables when destructing the ASTReader.
llvm-svn: 111880
2010-08-24 00:50:04 +00:00
Sebastian Redl
9d8f58b5d7 Correctly initialize the visible decls pointer if there are no visible decls for a record.
llvm-svn: 111879
2010-08-24 00:50:00 +00:00
Sebastian Redl
471ac2f02e Baby step towards supporting namespaces in chained PCH.
llvm-svn: 111878
2010-08-24 00:49:55 +00:00
Fariborz Jahanian
bf9294fb65 Support for IRGen of synthesize bitfield ivars in
objc-nonfragile-abi2 (radar 7824380).

llvm-svn: 111823
2010-08-23 18:51:39 +00:00
John McCall
4887165193 DeclPtrTy -> Decl *
llvm-svn: 111733
2010-08-21 09:40:31 +00:00
Argyrios Kyrtzidis
d32ee89ea2 Fix an issue with writing to PCH another included PCH, introduced by the "using an AST on-disk hash table for name lookup" commit.
When including a PCH and later re-emitting to another PCH, the name lookup tables of DeclContexts
may be incomplete, since we now lazily deserialize the visible decls of a particular name.
Fix the issue by iterating over the un-deserialized visible decls and completing the lookup tables
of DeclContexts before writing them out.

llvm-svn: 111698
2010-08-20 23:35:55 +00:00
Fariborz Jahanian
a50b3a20f1 objective-c ivar refactoring patch. Iterations
over ivars for a varienty of puposes is now
consolidated into two small routines; DeepCollectObjCIvars
and ShallowCollectObjCIvars. 

llvm-svn: 111679
2010-08-20 21:21:08 +00:00
Argyrios Kyrtzidis
ba88bfab37 Use the AST on-disk hash table for name lookup inside a DeclContext.
*Huge* improvement over the amount of deserializing that we do for C++ lookup.
e.g, if he have the Carbon header precompiled and include it on a file containing this:

int x;

these are the before/after stats:

BEFORE:

*** AST File Statistics:
  578 stat cache hits
  4 stat cache misses
  548/30654 source location entries read (1.787695%)
  15907/16501 types read (96.400223%)
  53525/59955 declarations read (89.275291%)
  33993/43525 identifiers read (78.099945%)
  41516/51891 statements read (80.006165%)
  77/5317 macros read (1.448185%)
  0/6335 lexical declcontexts read (0.000000%)
  1/5424 visible declcontexts read (0.018437%)

AFTER using the on-disk table:

*** AST File Statistics:
  578 stat cache hits
  4 stat cache misses
  548/30654 source location entries read (1.787695%)
  10/16501 types read (0.060602%)
  9/59955 declarations read (0.015011%)
  161/43525 identifiers read (0.369902%)
  20/51891 statements read (0.038542%)
  6/5317 macros read (0.112846%)
  0/6335 lexical declcontexts read (0.000000%)
  2/5424 visible declcontexts read (0.036873%)

There's only one issue affecting mostly the precompiled preambles which I will address soon.

llvm-svn: 111636
2010-08-20 16:04:35 +00:00
Argyrios Kyrtzidis
07347321c6 Introduce the mechanism for building an AST on-disk hash table for name lookup inside a DeclContext but don't use it yet.
llvm-svn: 111635
2010-08-20 16:04:27 +00:00
Argyrios Kyrtzidis
082e4613eb Refactoring; move the functionality of ASTWriter::GetOrCreateTypeID to the more generic
MakeTypeID template function which accepts a type and a function object that returns a TypeIdx.

MakeTypeID is in PCHCommon.h so that it can be used by ASTReader too.

llvm-svn: 111634
2010-08-20 16:04:20 +00:00
Argyrios Kyrtzidis
9ab44ea6bd Introduce ASTWriter::GetOrCreateTypeID and move most of the functionality of AddTypeRef there.
No functionality change.

llvm-svn: 111633
2010-08-20 16:04:14 +00:00
Argyrios Kyrtzidis
e394f2ca8b A bit of refactoring; Introduce ASTWriter::GetOrCreateTypeIdx and move the emission of types there.
No functionality change.

llvm-svn: 111632
2010-08-20 16:04:09 +00:00
Argyrios Kyrtzidis
a7fbbb0546 Rename TypeIDs -> TypeIdxs. No functionality change.
llvm-svn: 111631
2010-08-20 16:04:04 +00:00
Argyrios Kyrtzidis
bb5c7eae4c serialization::TypeID is used with or without qualifiers, both as index and as index + qualifiers.
Disambiguate and provide some type safety by using a new class TypeIdx for the "TypeID as index" semantics.

llvm-svn: 111630
2010-08-20 16:03:59 +00:00
Argyrios Kyrtzidis
4bd97102e9 Share the common code of ComputeHash(Selector Sel) instead of keeping 2 copies in PCHReader and PCHWriter.
No functionality change.

llvm-svn: 111629
2010-08-20 16:03:52 +00:00
John McCall
b3774b5c1e Regularize the API for accessing explicit template arguments.
llvm-svn: 111584
2010-08-19 23:49:38 +00:00
Douglas Gregor
b473b07cff Make sure to deallocate the identifier lookup tables and selector tables
when destroying an ASTReader. Plugs a leak that shows up in libclang.

llvm-svn: 111488
2010-08-19 00:28:17 +00:00
Sebastian Redl
539c506152 Rename pch namespace to serialization.
llvm-svn: 111478
2010-08-18 23:57:32 +00:00
Sebastian Redl
f164204baa Rename stuff in PCHBitCodes.h
llvm-svn: 111475
2010-08-18 23:57:22 +00:00
Sebastian Redl
f5b1346738 Rename the ASTReader header files.
llvm-svn: 111474
2010-08-18 23:57:17 +00:00
Sebastian Redl
3b3c874f68 Rename the ASTReader implementation files.
llvm-svn: 111473
2010-08-18 23:57:11 +00:00
Sebastian Redl
d44cd6adba More PCH -> AST renaming.
llvm-svn: 111472
2010-08-18 23:57:06 +00:00
Sebastian Redl
3e31c72497 Rename various classes from PCH to AST.
llvm-svn: 111471
2010-08-18 23:56:56 +00:00
Sebastian Redl
70c751de76 Rename PCHStmtReader -> ASTStmtReader.
llvm-svn: 111470
2010-08-18 23:56:52 +00:00
Sebastian Redl
b3298c3bb6 Rename PCHDeclReader -> ASTDeclReader.
llvm-svn: 111469
2010-08-18 23:56:48 +00:00
Sebastian Redl
2c499f6561 Rename PCHReader to ASTReader.
llvm-svn: 111467
2010-08-18 23:56:43 +00:00
Sebastian Redl
1914c6fef8 Rename PCHWriter.h to ASTWriter.h
llvm-svn: 111466
2010-08-18 23:56:37 +00:00
Sebastian Redl
d6522cfc6d Rename the ASTWriter implementation files
llvm-svn: 111465
2010-08-18 23:56:31 +00:00
Sebastian Redl
42a0f6a7f2 Do the PCH->AST rename for ASTWriter's implementation parts.
llvm-svn: 111464
2010-08-18 23:56:27 +00:00
Sebastian Redl
55c0ad5772 Rename PCHWriter to ASTWriter
llvm-svn: 111463
2010-08-18 23:56:21 +00:00
Alexis Hunt
dcfba7b35b Generate Attr subclasses with TableGen.
Now all classes derived from Attr are generated from TableGen.
Additionally, Attr* is no longer its own linked list; SmallVectors or
Attr* are used. The accompanying LLVM commit contains the updates to
TableGen necessary for this.

Some other notes about newly-generated attribute classes:

 - The constructor arguments are a SourceLocation and a Context&,
   followed by the attributes arguments in the order that they were
   defined in Attr.td

 - Every argument in Attr.td has an appropriate accessor named getFoo,
   and there are sometimes a few extra ones (such as to get the length
   of a variadic argument).

Additionally, specific_attr_iterator has been introduced, which will
iterate over an AttrVec, but only over attributes of a certain type. It
can be accessed through either Decl::specific_attr_begin/end or
the global functions of the same name.

llvm-svn: 111455
2010-08-18 23:23:40 +00:00
Sebastian Redl
7940e6fb1d Fix CMake build
llvm-svn: 111284
2010-08-17 21:00:23 +00:00
Sebastian Redl
135bcc791b Reintroduce the serialization library, with fixed dependencies.
llvm-svn: 111279
2010-08-17 20:43:28 +00:00
Douglas Gregor
256a7282e4 Revert Sebastian's build-breaking patch.
llvm-svn: 111265
2010-08-17 18:31:01 +00:00
Sebastian Redl
52ce9bb2fb Create a new Serialization module that contains all the PCH code, and will contain all the module code in the future. Update the Makefiles, CMake projects and the Xcode project. I hope I did everything right for Xcode. No functionality change.
llvm-svn: 111258
2010-08-17 17:55:49 +00:00