summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Added AccessSpecDecl node.Abramo Bagnara2010-06-051-0/+9
| | | | llvm-svn: 105525
* Don't insert in lexical context implicit definitions of static member instances.Abramo Bagnara2010-06-041-1/+2
| | | | llvm-svn: 105465
* Convert DeclNodes to use TableGen.Alexis Hunt2010-05-301-1/+1
| | | | | | | | The macros required for DeclNodes use have changed to match the use of StmtNodes. The FooFirst enumerator constants have been named firstFoo to match usage elsewhere. llvm-svn: 105165
* Make sure that we instantiate variably modified types, even if theyDouglas Gregor2010-05-241-2/+4
| | | | | | aren't dependent. Fixes <rdar://problem/8020206>. llvm-svn: 104511
* When instantiating a function declaration within a function template,Douglas Gregor2010-05-211-0/+1
| | | | | | | be sure to merge its parameter scope with its parent's scope. Fixes PR7184. llvm-svn: 104386
* When instantiating anonymous structs/unions within a function, makeDouglas Gregor2010-05-211-1/+18
| | | | | | | | | sure that the anonymous struct/union record declaration gets instantiated before the variable declaration, and that it and its fields (recursively) get entries in the local instantiation map. Fixes PR7088. llvm-svn: 104305
* Revert r104106; it's breaking linking of Boost.Serialization.Douglas Gregor2010-05-191-36/+8
| | | | llvm-svn: 104121
* Teach clang to instantiate attributes on more declarations. Fixes PR7102.Douglas Gregor2010-05-191-8/+36
| | | | llvm-svn: 104106
* I hate this commit.Douglas Gregor2010-05-181-70/+33
| | | | | | | | | | | | | | | | | | | | | Revert much of the implementation of C++98/03 [temp.friend]p5 in r103943 and its follow-ons r103948 and r103952. While our implementation was technically correct, other compilers don't seem to implement this paragraph (which forces the instantiation of friend functions defined in a class template when a class template specialization is instantiated), and doing so broke a bunch of Boost libraries. Since this behavior has changed in C++0x (which instantiates the friend function definitions when they are used), we're going to skip the nowhere-implemented C++98/03 semantics and go straight to the C++0x semantics. This commit is a band-aid to get Boost up and running again. It doesn't really fix PR6952 (which this commit un-fixes), but it does deal with the way Boost.Units abuses this particular paragraph. llvm-svn: 104014
* Instantiate attributes on typedefs. This is a quick fix for PR7148,Douglas Gregor2010-05-171-0/+1
| | | | | | | when we really need a proper audit of our handling of attributes in templates. llvm-svn: 103999
* Diagnose a redefinition error when there are two instantiations of friendDouglas Gregor2010-05-171-1/+29
| | | | | | | functions defined inside a class template. Fixes PR6952, the last Boost.Units failure. llvm-svn: 103952
* Determine when the instantiation of a friend function defined inside aDouglas Gregor2010-05-171-4/+21
| | | | | | | class template conflicts with an existing (non-template) definition. This is another part of PR6952. llvm-svn: 103948
* C++98/03 [temp.friend]p4 requires that inline function definitionsDouglas Gregor2010-05-171-0/+23
| | | | | | | | within class templates be instantiated along with each class template specialization, even if the functions are not used. Do so, as a baby step toward PR6952. llvm-svn: 103943
* Whenever we instantiate a function definition or class, enter a newDouglas Gregor2010-05-121-0/+2
| | | | | | | potentially-evaluated expression context, to ensure that used declarations get properly marked. Fixes PR7123. llvm-svn: 103624
* Improve our handling of the -Wunused-variable warning in templates. InDouglas Gregor2010-05-081-1/+6
| | | | | | | | | particular, don't complain about unused variables that have dependent type until instantiation time, so that we can look at the type of the variable. Moreover, only complain about unused variables that have neither a user-declared constructor nor a non-trivial destructor. llvm-svn: 103362
* When we encounter a non-dependent type during template instantiation,Douglas Gregor2010-05-071-0/+4
| | | | | | | mark any declarations we see inside of that type as "referenced". Fixes PR7079. llvm-svn: 103323
* Partial and full specializations of a class template may have aDouglas Gregor2010-05-061-1/+3
| | | | | | | | | different tag kind ("struct" vs. "class") than the primary template, which has an affect on access control. Should fix the last remaining Boost.Accumulors failure. llvm-svn: 103144
* When instantiating a function that was declared via a typedef, e.g.,Douglas Gregor2010-05-041-0/+21
| | | | | | | | | | | | | typedef int functype(int, int); functype func; also instantiate the synthesized function parameters for the resulting function declaration. With this change, Boost.Wave builds and passes all of its regression tests. llvm-svn: 103025
* When computing the template arguments for the instantiation of aDouglas Gregor2010-05-031-3/+3
| | | | | | | | | | | | | friend function template, be sure to adjust the computed template argument lists based on the location of the definition of the function template: it's possible that the definition we're instantiating with and the template declaration that we found when creating the specialization are in different contexts, which meant that we would end up using the wrong template arguments for instantiation. Fixes PR7013; all Boost.DynamicBitset tests now pass. llvm-svn: 102974
* When instantiating a function-local variable definition, introduce theDouglas Gregor2010-05-031-0/+3
| | | | | | | | mapping from the declaration in the template to the instantiated declaration before transforming the initializer, in case some crazy lunatic decides to use a variable in its own initializer. Fixes PR7016. llvm-svn: 102945
* When instantiating a member function declared via a typedef, don't tryDouglas Gregor2010-05-031-14/+18
| | | | | | | to enter the instantiated parameter declarations into the local instantiation scope; they can't be referenced anyway. Fixes PR7022. llvm-svn: 102914
* Clean up our handling of local instantiation scopes, which keep trackDouglas Gregor2010-04-301-2/+9
| | | | | | | | | | | | | | | | | | | | | of the mapping from local declarations to their instantiated counterparts during template instantiation. Previously, we tried to do some unholy merging of local instantiation scopes that involved storing a single hash table along with an "undo" list on the side... which was ugly, and never handled function parameters properly. Now, we just keep separate hash tables for each local instantiation scope, and "combining" two scopes means that we'll look in each of the combined hash tables. The combined scope stack is rarely deep, and this makes it easy to avoid the "undo" issues we were hitting. Also, I've simplified the logic for function parameters: if we're declaring a function and we need the function parameters to live longer, we just push them back into the local instantiation scope where we need them. Fixes PR6990. llvm-svn: 102732
* Introduce a sequence number into class template partialDouglas Gregor2010-04-301-27/+4
| | | | | | | | | | | specializations, which keeps track of the order in which they were originally declared. We use this number so that we can always walk the list of partial specializations in a predictable order during matching or template instantiation. This also fixes a failure in Boost.Proto, where SourceManager::isBeforeInTranslationUnit was behaving poorly in inconsistent ways. llvm-svn: 102693
* Make the InjectedClassNameType the canonical type of the current instantiationJohn McCall2010-04-271-1/+1
| | | | | | | | | | | | | | | | 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
* Recommit r102215, this time being more careful to only set the "principalJohn McCall2010-04-241-8/+13
| | | | | | | declaration" (i.e. the only which will actually be looked up) to have the non-member-operator bit. llvm-svn: 102231
* Revert r102215. This causes clang crash while compiling a test case from gdb ↵Devang Patel2010-04-241-6/+0
| | | | | | testsuite. llvm-svn: 102224
* Transition the last acceptable-result filter kind in LookupResult over to useJohn McCall2010-04-231-0/+6
| | | | | | a simple IDNS mask by introducing a namespace for non-member operators. llvm-svn: 102215
* When instantiating a typedef of an anonymous tag type, note in the tagDouglas Gregor2010-04-231-0/+10
| | | | | | | declaration that this typedef gives the tag a name. Fixes a problem uncovered by Boost.GIL (Generic Image Library). llvm-svn: 102180
* Keep track of the actual storage specifier written on a variable orDouglas Gregor2010-04-191-5/+10
| | | | | | | | function declaration, since it may end up being changed (e.g., "extern" can become "static" if a prior declaration was static). Patch by Enea Zaffanella and Paolo Bolzoni. llvm-svn: 101826
* Be sure to instantiate the parameters of a function, even when theDouglas Gregor2010-04-121-65/+21
| | | | | | | | | | | | | | | | | | | | function's type is (strictly speaking) non-dependent. This ensures that, e.g., default function arguments get instantiated properly. And, since I couldn't resist, collapse the two implementations of function-parameter instantiation into calls to a single, new function (Sema::SubstParmVarDecl), since the two had nearly identical code (and each had bugs the other didn't!). More importantly, factored out the semantic analysis of a parameter declaration into Sema::CheckParameter, which is called both by Sema::ActOnParamDeclarator (when parameters are parsed) and when a parameter is instantiated. Previously, we were missing some Objective-C and address-space checks on instantiated function parameters. Fixes PR6733. llvm-svn: 101029
* Instantiate default argument expressions even if their associated parameterJohn McCall2010-04-091-3/+4
| | | | | | type isn't dependent. Fixes rdar://problem/7838962. llvm-svn: 100871
* Set access properly on instantiated friend class template declarations.John McCall2010-04-081-2/+7
| | | | | | Fixes PR6752. llvm-svn: 100806
* Introduce an egregious hack to work around a bug in libstdc++ 4.2.x'sDouglas Gregor2010-04-081-4/+37
| | | | | | | | | <tr1/hashtable> header, where a friend class template std::tr1::__detail::_Map_base is declared with the wrong template parameters. GCC doesn't catch the problem, so Clang does a little back-flip to avoid diagnosing just this one instance of the problem. llvm-svn: 100790
* Implement dependent friend function template specializations.John McCall2010-04-081-14/+43
| | | | llvm-svn: 100753
* Improve handling of friend types in several ways:Douglas Gregor2010-04-071-29/+26
| | | | | | | | | | | - When instantiating a friend type template, perform semantic analysis on the resulting type. - Downgrade the errors concerning friend type declarations that do not refer to classes to ExtWarns in C++98/03. C++0x allows practically any type to be befriended, and ignores the friend declaration if the type is not a class. llvm-svn: 100635
* Improve diagnostics when an elaborated-type-specifer containing aDouglas Gregor2010-03-311-1/+2
| | | | | | | | | | | | | | | | nested-name-specifier (e.g., "class T::foo") fails to find a tag member in the scope nominated by the nested-name-specifier. Previously, we gave a bland error: 'Nested' does not name a tag member in the specified scope which didn't actually say where we were looking, which was rather horrible when the nested-name-specifier was instantiated. Now, we give something a bit better: error: no class named 'Nested' in 'NoDepBase<T>' llvm-svn: 100060
* the big refactoring bits of PR3782.Rafael Espindola2010-03-301-2/+1
| | | | | | | | 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
* Implement method friends in class templates and fix a few related problems.John McCall2010-03-271-27/+64
| | | | llvm-svn: 99708
* Put function templates instantiated from friend declarations in the correctJohn McCall2010-03-261-6/+15
| | | | | | lexical context. This is required for ADL to work properly; fixes PR6716. llvm-svn: 99665
* Reapply r99596 with a fix: link an instantiated friend function to itsJohn McCall2010-03-261-14/+40
| | | | | | pattern if it has a body. llvm-svn: 99610
* Apparently that didn't work. Reverting for now.John McCall2010-03-261-29/+14
| | | | llvm-svn: 99601
* Properly instantiate and link in friend function templates.John McCall2010-03-261-14/+29
| | | | llvm-svn: 99596
* Preserve type-source information in friend declarations.John McCall2010-03-251-6/+10
| | | | llvm-svn: 99525
* Properly instantiate friend class template declarations and link them intoJohn McCall2010-03-251-23/+94
| | | | | | | the redeclaration chain. Recommitted from r99477 with a fix: we need to merge in default template arguments from previous declarations. llvm-svn: 99496
* Revert 99477 since it appears to be breaking the clang-x86_64-darwin10-fntBob Wilson2010-03-251-84/+23
| | | | | | | | | | | buildbot. The tramp3d test fails. --- Reverse-merging r99477 into '.': U test/SemaTemplate/friend-template.cpp U test/CXX/temp/temp.decls/temp.friend/p1.cpp U lib/Sema/SemaTemplateInstantiateDecl.cpp U lib/Sema/SemaAccess.cpp llvm-svn: 99481
* Properly instantiate and link in friend-class-template declarations.John McCall2010-03-251-23/+84
| | | | llvm-svn: 99477
* When pulling apart an initializer that involves a CXXConstructExpr, doDouglas Gregor2010-03-241-11/+13
| | | | | | | not pick apart a CXXTemporaryObjectExpr because such an object construction was explicitly written in the source code. Fixes PR6657. llvm-svn: 99427
* Implement a framework for the delay of arbitrary diagnostics withinJohn McCall2010-03-241-0/+17
| | | | | | | | | templates. So delay access-control diagnostics when (for example) the target of a friend declaration is a specific specialization of a template. I was surprised to find that this was required for an access-controlled selfhost. llvm-svn: 99383
* Remember declaration scope qualifiers in the AST. Imposes no memory overheadJohn McCall2010-03-151-0/+64
| | | | | | | | | | | on unqualified declarations. Patch by Enea Zaffanella! Minimal adjustments: allocate the ExtInfo nodes with the ASTContext and delete them during Destroy(). I audited a bunch of Destroy methods at the same time, to ensure that the correct teardown was being done. llvm-svn: 98540
* Maintain type source information for functions through templateJohn McCall2010-03-111-59/+52
| | | | | | | | | | | instantiation. Based on a patch by Enea Zaffanella! I found a way to reduce some of the redundancy between TreeTransform's "standard" FunctionProtoType transformation and TemplateInstantiator's override, and I killed off the old SubstFunctionType by adding type source info for the last cases where we were creating FunctionDecls without TSI (at least that get passed through template instantiation). llvm-svn: 98252
OpenPOWER on IntegriCloud