03c55be552d224c787c3dd2e981b47a23b05cc2d |
|
22-Jul-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
PR16288: A template is only missing a default template argument if it provides any default template arguments, not if it inherits some. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186804 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
383041d31ca14cdf87865ccac6e6f9821d40f61a |
|
15-Jun-2011 |
Douglas Gregor <dgregor@apple.com> |
When performing substitution of default template template parameters before the template parameters have acquired a proper context (e.g., because the enclosing context has yet to be built), provide empty parameter lists for all outer template parameter scopes to inhibit any substitution for those template parameters. Fixes PR9643 / <rdar://problem/9251019>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133055 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
a5728872c7702ddd09537c95bc3cbd20e1f2fb09 |
|
15-Dec-2009 |
Daniel Dunbar <daniel@zuster.org> |
Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'. - This is designed to make it obvious that %clang_cc1 is a "test variable" which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it can be useful to redefine what gets run as 'clang -cc1' (for example, to set a default target). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91446 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
eaf75f4e0f65444bb122ade7725a4a32badcbf77 |
|
12-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Remove an overly-eager assertion when replacing tokens with an annotation token, because some of the tokens we're annotating might not be in the set of cached tokens (we could have consumed them unconditionally). Also, move the tentative parsing from ParseTemplateTemplateArgument into the one caller that needs it, improving recovery. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
f35f828f9883123772a9731af190a608f3236ef4 |
|
11-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Improve diagnostics when a default template argument does not match with its corresponding template parameter. This can happen when we performed some substitution into the default template argument and what we had doesn't match any more, e.g., template<int> struct A; template<typename T, template<T> class X = A> class B; B<long> b; Previously, we'd emit a pretty but disembodied diagnostic showing how the default argument didn't match the template parameter. The diagnostic was good, but nothing tied it to the *use* of the default argument in "B<long>". This commit fixes that. Also, tweak the counting of active template instantiations to avoid counting non-instantiation records, such as those we create for (surprise!) checking default arguments, instantiating default arguments, and performing substitutions as part of template argument deduction. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86884 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
9148c3f5829f4d031249faeb1043e7be914539e8 |
|
11-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Before checking a template template argument against its corresponding template template parameter, substitute any prior template arguments into the template template parameter. This, for example, allows us to properly check the template template argument for a class such as: template<typename T, template<T Value> class X> struct Foo; The actual implementation of this feature was trivial; most of the change is dedicated to giving decent diagnostics when this substitution goes horribly wrong. We now get a note like: note: while substituting prior template arguments into template template parameter 'X' [with T = float] As part of this change, enabled some very pedantic checking when comparing template template parameter lists, which shook out a bug in our overly-eager checking of default arguments of template template parameters. We now perform only minimal checking of such default arguments when they are initially parsed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86864 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
7bb87fca7d22a8a194d04188746b90f46512975f |
|
11-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Fix speculative parsing of dependent template names in nested-name-specifiers so that they don't gobble the template name (or operator-function-id) unless there is also a template-argument-list. For example, given T::template apply we would previously consume both "template" and "apply" as part of parsing the nested-name-specifier, then error when we see that there is no "<" starting a template argument list. Now, we parse such constructs tentatively, and back off if the "<" is not present. This allows us to parse dependent template names as one would use them for, e.g., template template parameters: template<typename T, template<class> class X = T::template apply> struct MetaSomething; Also, test default arguments for template template parameters. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86841 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
0f8716b7bb25d61a82f699b3975167451f7b5a68 |
|
09-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Improve instantiation of default template arguments for nested templates. The instantiation of these default arguments must be (and now, is) delayed until the template argument is actually used, at which point we substitute all levels of template arguments concurrently. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
542b548e041a6fab0fe06601ccc6b91a81bc217a |
|
14-Oct-2009 |
Douglas Gregor <dgregor@apple.com> |
When mapping from an injected-class-name to its corresponding template, make sure to get the template that corresponds to *this* declaration of the class template or specialization, rather than the canonical specialization. Fixes PR5187. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84119 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
3b56c002591b59c6c257951f6613b44de83fa860 |
|
11-Jun-2009 |
Anders Carlsson <andersca@mac.com> |
Add a null check that fixes the crash in PR4362, and make sure to instantiate non-type template arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73193 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
f4e2a2ce1101d875c4b69294416438007947daeb |
|
05-Jun-2009 |
Anders Carlsson <andersca@mac.com> |
Fix another crash and actually make the test case work. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72913 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
9bff9a91fbd6213e2d042aadd8ede92bed6be666 |
|
05-Jun-2009 |
Anders Carlsson <andersca@mac.com> |
Fix a case when the TemplateArgs vector can be empty. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72911 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
d7d5f0223bd30dfd618762349c6209dd1d5ea3e6 |
|
24-Mar-2009 |
Daniel Dunbar <daniel@zuster.org> |
Rename clang to clang-cc. Tests and drivers updated, still need to shuffle dirs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67602 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
39a8de10c18365bde7062d8959b7ed525449c561 |
|
25-Feb-2009 |
Douglas Gregor <dgregor@apple.com> |
Implement parsing of nested-name-specifiers that involve template-ids, e.g., std::vector<int>::allocator_type When we parse a template-id that names a type, it will become either a template-id annotation (which is a parsed representation of a template-id that has not yet been through semantic analysis) or a typename annotation (where semantic analysis has resolved the template-id to an actual type), depending on the context. We only produce a type in contexts where we know that we only need type information, e.g., in a type specifier. Otherwise, we create a template-id annotation that can later be "upgraded" by transforming it into a typename annotation when the parser needs a type. This occurs, for example, when we've parsed "std::vector<int>" above and then see the '::' after it. However, it means that when writing something like this: template<> class Outer::Inner<int> { ... }; We have two tokens to represent Outer::Inner<int>: one token for the nested name specifier Outer::, and one template-id annotation token for Inner<int>, which will be passed to semantic analysis to define the class template specialization. Most of the churn in the template tests in this patch come from an improvement in our error recovery from ill-formed template-ids. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65467 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|
62cb18dd11472965e03374d40bc27d650bc331b6 |
|
11-Feb-2009 |
Douglas Gregor <dgregor@apple.com> |
Allow the use of default template arguments when forming a class template specialization (e.g., std::vector<int> would now be well-formed, since it relies on a default argument for the Allocator template parameter). This is much less interesting than one might expect, since (1) we're not actually using the default arguments for anything important, such as naming an actual Decl, and (2) we'll often need to instantiate the default arguments to check their well-formedness. The real fun will come later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64310 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/SemaTemplate/default-arguments.cpp
|