651f13cea278ec967336033dd032faef0e9fc2ec |
24-Apr-2014 |
Stephen Hines <srhines@google.com> |
Updated to Clang 3.5a. Change-Id: I8127eb568f674c2e72635b639a3295381fe8af82
ixed-expansion.cpp
5.cpp
|
3cb443636fb3ca457994d91527a22c5b159e5169 |
05-Aug-2013 |
Serge Pavlov <sepavloff@gmail.com> |
Regression test for PR12699 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187734 91177308-0d34-0410-b5e6-96231b3b80d8
izeofpack.cpp
|
dc49d523db70a1c9005b7c09de80b22ccb1ed6a4 |
15-Jul-2013 |
Serge Pavlov <sepavloff@gmail.com> |
Fix to PR12262 - assertion when substituting explicit template arguments does not substitute a sizeof-pack expression. The solution is proposed by Richard Smith. Differential Revision: http://llvm-reviews.chandlerc.com/D869 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186306 91177308-0d34-0410-b5e6-96231b3b80d8
izeofpack.cpp
|
35178dc09d97bb2e0612813def09833866e3ad82 |
22-Jun-2013 |
David Blaikie <dblaikie@gmail.com> |
DebugInfo: Support (using GNU extensions) for template template parameters and parameter packs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184644 91177308-0d34-0410-b5e6-96231b3b80d8
2.cpp
|
8ff7e32f9480bf00d8d8476c650907853d1cc354 |
21-Jun-2013 |
Eli Friedman <eli.friedman@gmail.com> |
Add a couple more tests. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184501 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
98a75581e155a7dac853a69b0151960f8e2aacbd |
13-Jun-2013 |
Nick Lewycky <nicholas@mxc.ca> |
Include the unexpanded packs in the initializer expression when checking a pack expanded constructor initializer list. Fixes PR16303! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183878 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
840462670ba7a6bc26265a2306b35f2f0f01f51c |
21-Apr-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
The 'constexpr implies const' rule for non-static member functions is gone in C++1y, so stop adding the 'const' there. Provide a compatibility warning for code relying on this in C++11, with a fix-it hint. Update our lazily-written tests to add the const, except for those ones which were testing our implementation of this rule. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179969 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
419563768ef4929a622d7c2b066856e82901bb91 |
14-Jan-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Refactor to call ActOnFinishFullExpr on every full expression. Teach ActOnFinishFullExpr that some of its checks only apply to discarded-value expressions. This adds missing checks for unexpanded variadic template parameter packs to a handful of constructs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172485 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
5.mm
|
8e8fb3be5bd78f0564444eca02b404566a5f3b5d |
19-Oct-2012 |
Andy Gibbs <andyg1001@hotmail.co.uk> |
Prior to adding the new "expected-no-diagnostics" directive to VerifyDiagnosticConsumer, make the necessary adjustment to 580 test-cases which will henceforth require this new directive. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166280 91177308-0d34-0410-b5e6-96231b3b80d8
eduction.cpp
xample-bind.cpp
xample-function.cpp
xample-tuple.cpp
njected-class-name.cpp
artial-ordering.cpp
|
9a4db032ecd991626d236a502e770126db32bd31 |
12-Sep-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
PR13811: Add a FunctionParmPackExpr node to handle references to function parameter packs where the reference is not being expanded but the pack has been. Previously, Clang would segfault in such cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163672 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
500d729e85028944355a119f9823ac99fa5ddcab |
18-Jul-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
PR13386: When matching up parameters between a function template declaration and a function template instantiation, if there's a parameter pack in the declaration and one at the same place in the instantiation, don't assume that the pack wasn't expanded -- it may have expanded to nothing. Instead, go ahead and check whether the parameter pack was expandable. We can do this as a side-effect of the work we'd need to do anyway, to find how many parameters were produced. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160416 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
74e2fc332e07c76d4e69ccbd0e9e47a0bafd3908 |
16-Apr-2012 |
Douglas Gregor <dgregor@apple.com> |
Implement the last part of C++ [class.mem]p2, delaying the parsing of exception specifications on member functions until after the closing '}' for the containing class. This allows, for example, a member function to throw an instance of its own class. Fixes PR12564 and a fairly embarassing oversight in our C++98/03 support. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154844 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
7c5d28b6342229fb648aea59dc063f67ff16bc81 |
13-Mar-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
PR11850 + duplicates: don't assume that a function parameter pack expansion is at the end of the parameter list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152618 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8 |
22-Feb-2012 |
Eli Friedman <eli.friedman@gmail.com> |
Improve diagnostics a bit for bad member initializers, and fix an obscure bug involving packs. Fixes PR12049. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151130 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
5b9cc5df25c2198f270dd1d5c438fdce70d4051d |
12-Feb-2012 |
Sebastian Redl <sebastian.redl@getdesigned.at> |
Represent C++ direct initializers as ParenListExprs before semantic analysis instead of having a special-purpose function. - ActOnCXXDirectInitializer, which was mostly duplication of AddInitializerToDecl (leading e.g. to PR10620, which Eli fixed a few days ago), is dropped completely. - MultiInitializer, which was an ugly hack I added, is dropped again. - We now have the infrastructure in place to distinguish between int x = {1}; int x({1}); int x{1}; -- VarDecl now has getInitStyle(), which indicates which of the above was used. -- CXXConstructExpr now has a flag to indicate that it represents list- initialization, although this is not yet used. - InstantiateInitializer was renamed to SubstInitializer and simplified. - ActOnParenOrParenListExpr has been replaced by ActOnParenListExpr, which always produces a ParenListExpr. Placed that so far failed to convert that back to a ParenExpr containing comma operators have been fixed. I'm pretty sure I could have made a crashing test case before this. The end result is a (I hope) considerably cleaner design of initializers. More importantly, the fact that I can now distinguish between the various initialization kinds means that I can get the tricky generalized initializer test cases Johannes Schaub supplied to work. (This is not yet done.) This commit passed self-host, with the resulting compiler passing the tests. I hope it doesn't break more complicated code. It's a pretty big change, but one that I feel is necessary. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150318 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
b70126a328f89937f46db42f9e3cba1592887c91 |
03-Feb-2012 |
Douglas Gregor <dgregor@apple.com> |
When a pack expansion occurs in the template argument list of an alias template without a corresponding parameter pack, don't immediately substitute the alias template. This is under discussion in the C++ committee, and may become ill-formed, but for now we match GCC. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149697 91177308-0d34-0410-b5e6-96231b3b80d8
ixed-expansion.cpp
|
8fbbae532e3cb5f45e9e862c60d48c78b0997325 |
03-Feb-2012 |
Douglas Gregor <dgregor@apple.com> |
Implement support for a pack expansion into a fixed-length template. Such pack expansions can easily fail at template instantiation time, if the expanded parameter packs are of the wrong length. Fixes <rdar://problem/10040867>, PR9021, and the example that came up today at Going Native. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149685 91177308-0d34-0410-b5e6-96231b3b80d8
ixed-expansion.cpp
|
6aeaa60217e1ed11a621409acf1b53df0d14b591 |
05-Jan-2012 |
Eli Friedman <eli.friedman@gmail.com> |
Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization. Fixes PR11712. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147620 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
fc038e9ef8ed262724f42597ca5c844de97b1202 |
17-Dec-2011 |
Eli Friedman <eli.friedman@gmail.com> |
Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarator to structs. Add a warning for ignored attributes. Patch by Michael Han. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146796 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
0b64ba926752110cff1344a46b36e29396cc4d25 |
23-Oct-2011 |
Peter Collingbourne <peter@pcc.me.uk> |
Fix grammar for C++11 alignment specifiers, and add a few FIXMEs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142760 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
fef2189421b89dad5582b6dd7561badd4224d974 |
23-Oct-2011 |
Peter Collingbourne <peter@pcc.me.uk> |
Diagnose unexpanded parameter packs in member initialisers (including in-class member initialisers). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142758 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
762bb9d0ad20320b9f97a841dce57ba5e8e48b07 |
14-Oct-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Update all tests other than Driver/std.cpp to use -std=c++11 rather than -std=c++0x. Patch by Ahmed Charles! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141900 91177308-0d34-0410-b5e6-96231b3b80d8
eduction.cpp
xample-bind.cpp
xample-function.cpp
xample-tuple.cpp
xt-blocks.cpp
njected-class-name.cpp
etafunctions.cpp
ulti-level-substitution.cpp
1.cpp
2.cpp
4.cpp
5.cpp
arameter-matching.cpp
artial-ordering.cpp
|
089e8939b7b3e72c32477e39df82f18e6a8f436e |
10-Oct-2011 |
Douglas Gregor <dgregor@apple.com> |
When substituting into a sizeof parameter pack expression in a context where we can't expand (i.e., multi-level substitution), be sure to substitute the pack with its level-reduced pack. Fixes PR10230. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141568 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
85ea7aa961deac1d754f610af8062ae3f8b4e2a5 |
30-Aug-2011 |
Sebastian Redl <sebastian.redl@getdesigned.at> |
Declare and define implicit move constructor and assignment operator. This makes the code duplication of implicit special member handling even worse, but the cleanup will have to come later. For now, this works. Follow-up with tests for explicit defaulting and enabling the __has_feature flag to come. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138821 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
fc92137eee708b632c00a9b0934ff87aeae234a5 |
20-May-2011 |
Douglas Gregor <dgregor@apple.com> |
Diagnose unexpanded parameter packs in return statements. This manifested in a crash with blocks in PR9953, but it was a ticking time bomb for normal functions, too. Fixes PR9953. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131731 91177308-0d34-0410-b5e6-96231b3b80d8
xt-blocks.cpp
|
ad762fcdc16b9e4705b12b09d92b8c026212b906 |
15-Apr-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Add support for C++0x's range-based for loops, as specified by the C++11 draft standard (N3291). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129541 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
018591f524ca4f3a1e657d0d0a66eadf9dbd55f6 |
02-Mar-2011 |
John McCall <rjmccall@apple.com> |
Semantic checking for exception specifications should be triggered by whether C++ exceptions are enabled, not exceptions in general. PR9358. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126820 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
406f98f6a5a7bde5707085af8d66204e7e76af45 |
02-Mar-2011 |
Douglas Gregor <dgregor@apple.com> |
When we're substituting into a parameter-type-list nested inside the pattern of an expansion, and we have a paramameter that is not a parameter pack, don't suppress substitution of parameter packs within this context. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126819 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
abea951c34876a5374d0e3678c7989b225c5c895 |
28-Feb-2011 |
Anders Carlsson <andersca@mac.com> |
Add -fcxx-exceptions to all tests that use C++ exceptions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126599 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
e41721e7dfabcc15cb50be9075a4153f1ad648ea |
19-Feb-2011 |
Anders Carlsson <andersca@mac.com> |
Pass -fexceptions to all tests that use try/catch/throw. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126037 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
a779d9ca2fdf1247f65de0e6acf2870d8be53ccd |
19-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement basic support for the use of variadic templates and blocks together. In particular: - Handle the use of captured parameter pack names within blocks (BlockDeclRefExpr understands parameter packs now) - Handle the declaration and expansion of parameter packs within a block's parameter list, e.g., ^(Args ...args) { ... }) - Handle instantiation of blocks where the return type was not explicitly specified. (unrelated, but necessary for my tests). Together, these fixes should make blocks and variadic templates work reasonably well together. Note that BlockDeclRefExpr is still broken w.r.t. its computation of type and value dependence, which will still cause problems for blocks in templates. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123849 91177308-0d34-0410-b5e6-96231b3b80d8
xt-blocks.cpp
|
6952f1e4256c5b43aee5e98cea4e9b663bd1d413 |
19-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement support for non-type template parameter packs whose type is a pack expansion, e.g., the parameter pack Values in: template<typename ...Types> struct Outer { template<Types ...Values> struct Inner; }; This new implementation approach introduces the notion of an "expanded" non-type template parameter pack, for which we have already expanded the types of the parameter pack (to, say, "int*, float*", for Outer<int*, float*>) but have not yet expanded the values. Aside from creating these expanded non-type template parameter packs, this patch updates template argument checking and non-type template parameter pack instantiation to make use of the appropriate types in the parameter pack. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123845 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
9da95e6eefc4b0ca25e18bdab1b703f5c185deab |
16-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Tweak the partial ordering rules for function templates to prefer a non-variadic function template over a variadic one. This matches GCC and the intent of the C++0x wording, in a way that I think is likely to be acceptable to the committee. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123581 91177308-0d34-0410-b5e6-96231b3b80d8
artial-ordering.cpp
|
1aee05d08b2184acadeb36de300e216390780d6c |
15-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Introduce a new kind of TemplateName that captures a substituted template template parameter pack that cannot be fully expanded because its enclosing pack expansion could not be expanded. This form of TemplateName plays the same role as SubstTemplateTypeParmPackType and SubstNonTypeTemplateParmPackExpr do for template type parameter packs and non-type template parameter packs, respectively. We should now handle these multi-level pack expansion substitutions anywhere. The largest remaining gap in our variadic-templates support is that we cannot cope with non-type template parameter packs whose type is a pack expansion. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123521 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
c7793c73ba8a343de3f2552d984851985a46f159 |
15-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Introduce a new expression kind, SubstNonTypeTemplateParmPackExpr, that captures the substitution of a non-type template argument pack for a non-type template parameter pack within a pack expansion that cannot be fully expanded. This follows the approach taken by SubstTemplateTypeParmPackType. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123506 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
2be29f423acad3bbe39099a78db2805acb5bdf17 |
15-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Teach template template argument pack expansions to keep track of the number of expansions, when we know it, and propagate that information through Sema. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123493 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
6a24bfda084f06a0b252b7befe8cbb17fce7f94e |
14-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Handle substitutions into function parameter packs whose patterns contain multiple parameter packs at different levels. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123488 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
67fd1251aad51bb80d050b7fa5e506fef0ec8e02 |
14-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Teach PackExpansionExpr to keep track of the number of pack expansions it will expand to, if known. Propagate this information throughout Sema. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123470 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
07a77b4b1d1fa95930129541eff8b79558f5d80d |
14-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
When we're instantiating a direct variable initializer that has a pack expansion in it, we may end up instantiating to an empty expression-list. In this case, the variable is uninitialized; tweak the instantiation logic to handle this case. Fixes PR8977. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123449 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
cded4f649cd4b7ba7d461c25c6482ef52b8d3a2a |
14-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Keep track of the number of expansions to be produced from a type pack expansion, when it is known due to the substitution of an out parameter pack. This allows us to properly handle substitution into pack expansions that involve multiple parameter packs at different template parameter levels, even when this substitution happens one level at a time (as with partial specializations of member class templates and the signatures of member function templates). Note that the diagnostic we provide when there is an arity mismatch between an outer parameter pack and an inner parameter pack in this case isn't as clear as the normal diagnostic for an arity mismatch. However, this doesn't matter because these cases are very, very rare and (even then) only typically occur in a SFINAE context. The other kinds of pack expansions (expression, template, etc.) still need to support optional tracking of the number of expansions, and we need the moral equivalent of SubstTemplateTypeParmPackType for substituted argument packs of template template and non-type template parameters. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123448 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
c3069d618f4661d923cb1b5c4525b082fce73b04 |
14-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Start implementing support for substitution into pack expansions that involve template parameter packs at multiple template levels that occur within the signatures members of class templates (and partial specializations thereof). This is a work-in-progress that is deficient in several ways, notably: - It only works for template type parameter packs, but we need to also support non-type template parameter packs and template template parameter packs. - It doesn't keep track of the lengths of the substituted argument packs in the expansion, so it can't properly diagnose length mismatches. However, this is a concrete step in the right direction. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123425 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
|
c421f546e63b2f85caa1ca0d94d508f99bb871cb |
13-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Only apply the parameter pack matching of C++0x [temp.arg.template]p3 when we're actually matching a template template argument to a template template parameter. Otherwise, use strict matching. Fixes <rdar://problem/8859985> clang++: variadics and out-of-line definitions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123385 91177308-0d34-0410-b5e6-96231b3b80d8
arameter-matching.cpp
|
4f1d282d6f32a419e89ddb56342e2313b0c78bb7 |
13-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Allow us to transform pack expansion expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123349 91177308-0d34-0410-b5e6-96231b3b80d8
njected-class-name.cpp
|
a03478231363c67ea0e1f4bc1bc708e064040e56 |
13-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement C++0x [temp.arg.template]p3, which allows slightly fuzzy matching of variadic template template parameters to template arguments. This paragraph was the subject of ISO C++ committee document N2555: Extending Variadic Template Template Parameters. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123348 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
ac6c09917eaf32a35d2c7c95856864d877ef1963 |
12-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Add some more partial-ordering tests, including one that changes with the proposed resolution to core isue 692. I'm not certain which way we'll go on this one. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123331 91177308-0d34-0410-b5e6-96231b3b80d8
artial-ordering.cpp
|
2fc1bb76e719d0620b4a6e2134413933b21ca6b6 |
12-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Teach TreeTransform how to transform a pack expansion type into another pack expansion type. This can happen when rebuilding types in the current instantiation. Fixes <rdar://problem/8848837> (Clang crashing on libc++ <functional>). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123316 91177308-0d34-0410-b5e6-96231b3b80d8
njected-class-name.cpp
|
77d6bb9e223496aa5288294f34e7225d1f65dddc |
11-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement partial ordering of class template partial specializations and function templates that contain variadic templates. This involves three small-ish changes: (1) When transforming a pack expansion, if the transformed argument still contains unexpanded parameter packs, build a pack expansion. This can happen during the substitution that occurs into class template partial specialiation template arguments during partial ordering. (2) When performing template argument deduction where the argument is a pack expansion, match against the pattern of that pack expansion. (3) When performing template argument deduction against a non-pack parameter, or a non-expansion template argument, deduction fails if the argument itself is a pack expansion (C++0x [temp.deduct.type]p22). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123279 91177308-0d34-0410-b5e6-96231b3b80d8
artial-ordering.cpp
|
10ffc00e2177f042808f507c8dd50b744ed6f738 |
11-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Add testing for unexpanded parameter packs in all of the C++ expression kinds. This is (indirectly) a test verifying that the recursive AST visitor is visiting the children of these expression nodes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123198 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
d3731198193eee92796ddeb493973b7a598b003e |
10-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Work-in-progress implementation of C++0x [temp.arg.explicit]p9, which allows an argument pack determines via explicit specification of function template arguments to be extended by further, deduced arguments. For example: template<class ... Types> void f(Types ... values); void g() { f<int*, float*>(0, 0, 0); // Types is deduced to the sequence int*, float*, int } There are a number of FIXMEs in here that indicate places where we need to implement + test retained expansions, plus a number of other places in deduction where we need to correctly cope with the explicitly-specified arguments when deducing an argument pack. Furthermore, it appears that the RecursiveASTVisitor needs to be auditied; it's missing some traversals (especially w.r.t. template arguments) that cause it not to find unexpanded parameter packs when it should. The good news, however, is that the tr1::tuple implementation now works fully, and the tr1::bind example (both from N2080) is actually working now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123163 91177308-0d34-0410-b5e6-96231b3b80d8
xample-bind.cpp
xample-tuple.cpp
|
e8bbf98ba4a388d89d1b4da9e15aabedf8eb53a6 |
07-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Variadic templates example: a nearly-complete implementation of a TR1 function class template. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123024 91177308-0d34-0410-b5e6-96231b3b80d8
xample-function.cpp
xample-tuple.cpp
|
03414b98caba86771622c35b1fa70d13de0c14ba |
07-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Variadic templates example: a nearly-complete implementation of a TR1 tuple class template. This implementation is boosted directly from the variadic templates proposal. N2080. Note that one section is #ifdef'd out. I'll implement that aspect of template argument deduction next. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123016 91177308-0d34-0410-b5e6-96231b3b80d8
xample-tuple.cpp
|
12c9c00024a01819e3a70ef6d951d32efaeb9312 |
07-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement substitution of a function parameter pack for its set of instantiated function parameters, enabling instantiation of arbitrary pack expansions involving function parameter packs. At this point, we can now correctly compile a simple, variadic print() example: #include <iostream> #include <string> void print() {} template<typename Head, typename ...Tail> void print(const Head &head, const Tail &...tail) { std::cout << head; print(tail...); } int main() { std::string hello = "Hello"; print(hello, ", world!", " ", 2011, '\n'); } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123000 91177308-0d34-0410-b5e6-96231b3b80d8
2.cpp
5.cpp
|
603cfb4da2f7ba08a1c3452c2fbf70585b8e7621 |
06-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Initial implementation of function parameter packs. This implementation allows: 1) Declaration of function parameter packs 2) Instantiation of function parameter packs within function types. 3) Template argument deduction of function parameter packs when matching two function types. We're missing all of the important template-instantiation logic for function template definitions, along with template argument deduction from the argument list of a function call, so don't even think of trying to use these for real yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122926 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
d53e16abd1dcaa2942d5183f48e7f63d0e75b35a |
05-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
When we're converting deduced template arguments to the type of the corresponding template parameter, make sure that prior converted template arguments are available for substitution. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122902 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
a7fc901a2e39bfe55bfcff5934b2d9fdf9656491 |
05-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Replace the representation of template template argument pack expansions with something that is easier to use correctly: a new template argment kind, rather than a bit on an existing kind. Update all of the switch statements that deal with template arguments, fixing a few latent bugs in the process. I"m happy with this representation, now. And, oh look! Template instantiation and deduction work for template template argument pack expansions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122896 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
4.cpp
|
f457c1a0a46d11623c3d4594b57dff7f5a1151da |
05-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement proper parameter pack matching for non-type template parameters and template template parameters. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122875 91177308-0d34-0410-b5e6-96231b3b80d8
arameter-matching.cpp
|
61c4d28e36cd3f1be392cb77f07436d1fa6b0f9f |
05-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement support for template template parameter packs, e.g., template<template<class> class ...Metafunctions> struct apply_to_each; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122874 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
5.cpp
arameter-matching.cpp
|
54c53cca105ed595e12fecf04e415c3712bda936 |
05-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Improve our handling of non-type template parameters in partial specializations. We weren't dealing with any of the cases where the type of the non-type template argument differs from the type of the corresponding template parameter in the primary template. We would think that the template parameter in the partial specialization was not deducible (and warn about it, incorrectly), then fail to convert a deduced parameter to the type of the template parameter in the partial specialization (which may involve truncation, among other things). Fixes PR8905. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122851 91177308-0d34-0410-b5e6-96231b3b80d8
eduction.cpp
|
b9a7d6fb53f2b76df2ef832146a1edb4cb01b9f6 |
04-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Improve the checking of deduced template arguments stored within template argument packs when finishing template argument deduction for a function template git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122843 91177308-0d34-0410-b5e6-96231b3b80d8
eduction.cpp
|
b95cc97b2023d00cd3fbae8455bc9d728eab5e5d |
04-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
When creating the injected-class-name for a class template involving a non-type template parameter pack, make sure to create a pack expansion for the corresponding template argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122799 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
3fb9e4b89f72823f162096086f0f964e6dcf66d6 |
04-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement pack expansion of base initializers, so that we can initialize those lovely mixins that come from pack expansions of base specifiers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122793 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
f90b27ad077c3339b62befc892382845339f9490 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement pack expansions whose pattern is a base-specifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122782 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
69e5aed635946419d85a6be8639260e2eb476cb1 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Add a test that is currently failing git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122780 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
7a21fd45d4f04643cbfb5df96a01f84bc6d3dd14 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Properly rebuild pack expansions whose pattern is a non-type template argument. As part of this, be more careful when determining if there are any parameter packs that cannot be expanded. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122776 91177308-0d34-0410-b5e6-96231b3b80d8
ulti-level-substitution.cpp
5.cpp
|
925910d488051cbd4e38f350c1e9d69c473f09a0 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Diagnose the presence of unexpanded parameter packs within class template partial specialization arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122769 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
dcaa1ca0b475dfa887e1d061678a1e3501288510 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement support for pack expansions in initializer lists and expression lists. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122764 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
dee196ef31073b40c48d60d9fa626ee1d8daaaee |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Another variadic template metafunction test case: summing values. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122752 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
be230c36e32142cbdcdbe9c97511d097beeecbab |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement support for pack expansions whose pattern is a non-type template argument (described by an expression, of course). For example: template<int...> struct int_tuple { }; template<int ...Values> struct square { typedef int_tuple<(Values*Values)...> type; }; It also lays the foundation for pack expansions in an initializer-list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122751 91177308-0d34-0410-b5e6-96231b3b80d8
etafunctions.cpp
|
81063a237722ae010bca325021b92436f8c56e05 |
03-Jan-2011 |
Douglas Gregor <dgregor@apple.com> |
Consolidate template metafunction tests for variadic templates into a single file git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122748 91177308-0d34-0410-b5e6-96231b3b80d8
ount.cpp
etafunctions.cpp
eplace.cpp
|
56bc9832bc8f80604bfddc2c93f81537df6930a1 |
24-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
When instantiating a non-type template parameter pack, be sure to extract the appropriate argument from the argument pack (based on the current substitution index, of course). Simple instantiation of pack expansions involving non-type template parameter packs now works. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122532 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
10738d36b150aa65206890c1c845cdba076e4200 |
24-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Add an AST representation for non-type template parameter packs, e.g., template<typename T, unsigned ...Dims> struct multi_array; along with semantic analysis support for finding unexpanded non-type template parameter packs in types, expressions, and so on. Template instantiation involving non-type template parameter packs probably doesn't work yet. That'll come soon. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122527 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
b7d09d627c8576b9bc85f44f05befdd44fedc7ed |
23-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
When forming the injected-class-name of a variadic template, the template argument corresponding to a template parameter pack is an argument pack of a pack expansion of that template parameter pack. Implements C++0x [temp.dep.type]p2 (at least, as much of it as we can). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122498 91177308-0d34-0410-b5e6-96231b3b80d8
njected-class-name.cpp
|
e02e26293cf8e3bad1059b39cea75c6582896da6 |
22-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Implement template argument deduction for pack expansions whose pattern is a template argument, which involves repeatedly deducing template arguments using the pattern of the pack expansion, then bundling the resulting deductions into an argument pack. We can now handle a variety of simple list-handling metaprograms using variadic templates. See, e.g., the new "count" metaprogram. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122439 91177308-0d34-0410-b5e6-96231b3b80d8
ount.cpp
|
0972c867e72171f24052d7b6d307020c065f8a66 |
22-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
When performing template argument deduction where the argument is a dependent template specialization type, the number of template arguments need not match precisely. Rather than checking the number of arguments eagerly (which does not consider argument packs), let the deduction routine for template argument lists cope with too many/too few arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122425 91177308-0d34-0410-b5e6-96231b3b80d8
eplace.cpp
|
20a55e2515ce89ddf9993941f9b5d0f3a6c91b4f |
22-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Implicitly expand argument packs when performing template argument deduction. Unify all of the looping over template arguments for deduction purposes into a single place, where argument pack expansion occurs; this is also the hook for deducing from pack expansions, which itself is not yet implemented. For now, at least we can handle a basic "count" metafunction written with variadics. See the new test for the formulation that works. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122418 91177308-0d34-0410-b5e6-96231b3b80d8
ount.cpp
|
b99268b3083c882103bd1bd08bdcc9a76a2b4795 |
21-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Implement instantiation of pack expansions whose pattern is a type-id in an exception specification. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122297 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
a04426c5416f22df1078f6b31c1619de73c40b59 |
21-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Extend the parser to support pack expansions within exception specifications. We can't yet instantiate them, however, since I tripped over PR8835. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122292 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
88f30dee6ca6d99e46d4ce61f691fb3dff4ae7c8 |
20-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Test template instantiation of pack expansions where the parameter pack is in a nested-name-specifier git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122282 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
|
dace95b13e2ceb0c3ec8de6babd926dc5114e1e5 |
20-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Clean up the printing of template argument packs; previously, we were getting extra "<>" delimiters around template argument packs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122280 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
5.cpp
|
8491ffe86c50241b47c6d7ef8cd9ee00f5e675da |
20-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Implement basic support for template instantiation of pack expansions whose patterns are template arguments. We can now instantiate, e.g., typedef tuple<pair<OuterTypes, InnerTypes>...> type; where OuterTypes and InnerTypes are template type parameter packs. There is a horrible inefficiency in TemplateArgumentLoc::getPackExpansionPattern(), where we need to create copies of TypeLoc data because our interfaces traffic in TypeSourceInfo pointers where they should traffic in TypeLocs instead. I've isolated in efficiency in this one routine; once we refactor our interfaces to traffic in TypeLocs, we can eliminate it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122278 91177308-0d34-0410-b5e6-96231b3b80d8
4.cpp
5.cpp
|
14be16b93941aa4c4909b596d52a34af70ee1928 |
20-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
When checking a template argument list against a template containing a parameter pack, check the parameter pack against each of the template arguments it corresponds to, then pack the converted arguments into a template argument pack. Allows us to use variadic class templates so long as instantiation isn't required, e.g., template<typename... Types> struct Tuple; Tuple<int, float> *t2; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122251 91177308-0d34-0410-b5e6-96231b3b80d8
1.cpp
|
7536dd5e6c99584481b7dab68b7e7d8df9c54054 |
20-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Introduce a new type, PackExpansionType, to capture types that are pack expansions, e.g. given template<typename... Types> struct tuple; template<typename... Types> struct tuple_of_refs { typedef tuple<Types&...> types; }; the type of the "types" typedef is a PackExpansionType whose pattern is Types&. This commit introduces support for creating pack expansions for template type arguments, as above, but not for any other kind of pack expansion, nor for any form of instantiation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122223 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
a669c534cf414339060868d70d2348fea9ce6c7d |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Add tests checking for unexpanded parameter packs in declarations that occur within statements. Teach Sema::ActOnExceptionDeclarator() to check for unexpanded parameter packs in the exception type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121984 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
781def075d4a486a5b367c6730fe77cb1f721ac1 |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in non-type template parameter types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121964 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
6f52675ec400a0ee89ec6214c4845b8ee274304a |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in default arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121962 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
a31040f16604849b3b1dc36015056c81bae68ad1 |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs within variable initializers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121938 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
6ccab97c17c17f38eb92c7fe02c766508875bd97 |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in friend declarations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121934 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
56c04588ef3cfa1bbc968fd68de2480a4e66971d |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in using declarations. As a drive-by, make sure to check for unexpanded parameter packs within the name of a declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121930 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
0c9e4799fd78d350a037498b2c797f2b2558791c |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in enumeration types and enumerators. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121928 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
399ad970a25efcbfa7111e17f48285a70fba2731 |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in static assertion expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121922 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
e186269a8a41dbff1ebea2c251048892979d1078 |
16-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Check for unexpanded parameter packs in various kinds of declarations. This is a work in progress, as I go through the C++ declaration grammar to identify where unexpanded parameter packs can occur. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121912 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
cff163e3cc78277496b30fa40070b46abdc290db |
15-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Test that all of the relevant types properly compute the "contains unexpanded parameter pack" bit and that the recursive AST visitor can then find those unexpanded parameter packs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121899 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
9ef75899bae6dd9a4be1252ae9cadcb619c170ff |
15-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Introduce a RecursiveASTVisitor subclass that finds all unexpanded parameter packs within a statement, type, etc. Use this visitor to provide improved diagnostics for the presence of unexpanded parameter packs in a full expression, base type, declaration type, etc., by highlighting the unexpanded parameter packs and providing their names, e.g., test/CXX/temp/temp.decls/temp.variadic/p5.cpp:28:85: error: declaration type contains unexpanded parameter packs 'VeryInnerTypes', 'OuterTypes', ... ...VeryInnerTypes, OuterTypes>, pair<InnerTypes, OuterTypes> > types; ~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ^ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121883 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
bebbe0d9b7568ce43a464286bee49429489ef483 |
15-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Variadic templates: extend the Expr class with a bit that specifies whether the expression contains an unexpanded parameter pack, in the same vein as the changes to the Type hierarchy. Compute this bit within all of the Expr subclasses. This change required a bunch of reshuffling of dependency calculations, mainly to consolidate them inside the constructors and to fuse multiple loops that iterate over arguments to determine type dependence, value dependence, and (now) containment of unexpanded parameter packs. Again, testing is painfully sparse, because all of the diagnostics will change and it is more important to test the to-be-written visitor that collects unexpanded parameter packs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121831 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
d0937224f383c7cc72c947119380f9713a070c73 |
13-Dec-2010 |
Douglas Gregor <dgregor@apple.com> |
Variadic templates: extend Type, NestedNameSpecifier, TemplateName, and TemplateArgument with an operation that determines whether there are any unexpanded parameter packs within that construct. Use this information to diagnose the appearance of the names of parameter packs that have not been expanded (C++ [temp.variadic]p5). Since this property is checked often (every declaration, ever expression statement, etc.), we extend Type and Expr with a bit storing the result of this computation, rather than walking the AST each time to determine whether any unexpanded parameter packs occur. This commit is deficient in several ways, which will be remedied with future commits: - Expr has a bit to store the presence of an unexpanded parameter pack, but it is never set. - The error messages don't point out where the unexpanded parameter packs were named in the type/expression, but they should. - We don't check for unexpanded parameter packs in all of the places where we should. - Testing is sparse, pending the resolution of the above three issues. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121724 91177308-0d34-0410-b5e6-96231b3b80d8
5.cpp
|
a417b87e5d0f0508c7b18824d89d489bb55b7bd1 |
04-Jun-2010 |
Douglas Gregor <dgregor@apple.com> |
When checking for equality of template parameter lists, a template type parameter pack is distinct from a template type parameter. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105464 91177308-0d34-0410-b5e6-96231b3b80d8
arameter-matching.cpp
|