llvm-project/clang/test/SemaTemplate
Saar Raz b481f02814 [Concepts] Placeholder constraints and abbreviated templates
This patch implements P1141R2 "Yet another approach for constrained declarations".

General strategy for this patch was:

- Expand AutoType to include optional type-constraint, reflecting the wording and easing the integration of constraints.
- Replace autos in parameter type specifiers with invented parameters in GetTypeSpecTypeForDeclarator, using the same logic
  previously used for generic lambdas, now unified with abbreviated templates, by:
  - Tracking the template parameter lists in the Declarator object
  - Tracking the template parameter depth before parsing function declarators (at which point we can match template
    parameters against scope specifiers to know if we have an explicit template parameter list to append invented parameters
    to or not).
- When encountering an AutoType in a parameter context we check a stack of InventedTemplateParameterInfo structures that
  contain the info required to create and accumulate invented template parameters (fields that were already present in
  LambdaScopeInfo, which now inherits from this class and is looked up when an auto is encountered in a lambda context).

Resubmit after fixing MSAN failures caused by incomplete initialization of AutoTypeLocs in TypeSpecLocFiller.

Differential Revision: https://reviews.llvm.org/D65042
2020-01-23 19:39:43 +02:00
..
ackermann.cpp
address-spaces.cpp
address_space-dependent.cpp Add support for the MS qualifiers __ptr32, __ptr64, __sptr, __uptr. 2019-12-18 10:41:12 -08:00
alias-church-numerals.cpp
alias-nested-nontag.cpp
alias-template-template-param.cpp
alias-templates.cpp Always deduce the lengths of contained parameter packs when deducing a 2020-01-06 17:24:29 -08:00
alignas.cpp PR35028: Retain duplicate alignas attributes in template instantiation. 2018-01-04 01:02:18 +00:00
ambiguous-ovl-print.cpp
anonymous-union.cpp
argument-dependent-lookup.cpp [NFC] Explicitly add -std=c++14 option to tests that rely on the C++14 default 2019-02-05 12:05:53 +00:00
array-redeclaration.cpp
array-to-pointer-decay.cpp
atomics.cpp
attributes.cpp Append new attributes to the end of an AttributeList. 2018-08-03 01:21:16 +00:00
canonical-expr-type-0x.cpp
canonical-expr-type.cpp
class-template-ctor-initializer.cpp
class-template-decl.cpp [NFC] Explicitly add -std=c++14 option to tests that rely on the C++14 default 2019-02-05 12:05:53 +00:00
class-template-id-2.cpp
class-template-id.cpp
class-template-spec.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
constexpr-instantiate.cpp Customize the SFINAE diagnostics for enable_if to provide the failed condition. 2017-07-05 20:20:14 +00:00
constructor-template.cpp
copy-ctor-assign.cpp
crash-8204126.cpp
crash-10438657.cpp
crash-unparsed-exception.cpp [Sema] Prevent InstantiateClass from checking unrelated exception specs. 2017-09-21 19:54:12 +00:00
crash.cpp
ctad.cpp PR41427: This has apparently been fixed already, just add a regression 2019-04-24 23:45:56 +00:00
current-instantiation.cpp
cxx1z-decomposition.cpp
cxx1z-fold-expressions.cpp PR41845: Detect and reject mismatched inner/outer pack expansion sizes 2019-05-13 08:31:14 +00:00
cxx1z-using-declaration.cpp When diagnosing an ambiguity, only note the candidates that contribute 2019-10-24 14:58:29 -07:00
cxx2a-constraint-caching.cpp [Concepts] Constraint Satisfaction Caching 2020-01-22 03:09:53 +02:00
cxx17-inline-variables.cpp In C++17, when instantiating an out-of-line definition of an inline static data 2018-01-10 23:08:26 +00:00
deduction-crash.cpp [Sema] Fix an assert-on-invalid by avoiding function template specialisation 2017-10-27 18:13:31 +00:00
deduction.cpp Fix pack deduction to only deduce the arity of packs that are actually 2020-01-15 16:21:08 -08:00
default-arguments-cxx0x.cpp Push lambda scope earlier when transforming lambda expression 2019-09-17 01:43:33 +00:00
default-arguments.cpp Mark declarations as referenced by a default argument in a 2019-06-11 23:51:46 +00:00
default-expr-arguments-2.cpp Re-commit r321223, which adds a printing policy to the ASTDumper. 2017-12-21 21:42:42 +00:00
default-expr-arguments-3.cpp Re-commit r321223, which adds a printing policy to the ASTDumper. 2017-12-21 21:42:42 +00:00
default-expr-arguments.cpp
delegating-constructors.cpp
dependent-base-classes.cpp [c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose 2019-05-09 03:31:27 +00:00
dependent-base-member-init.cpp
dependent-class-member-operator.cpp
dependent-expr.cpp Fix crash when checking a dependently-typed reference that is 2019-06-17 21:46:17 +00:00
dependent-names-no-std.cpp
dependent-names.cpp Reapply "Fix crash on switch conditions of non-integer types in templates" 2019-12-03 15:27:19 -08:00
dependent-sized_array.cpp
dependent-template-recover.cpp Make tentative parsing to detect template-argument-lists less aggressive 2019-05-15 23:36:14 +00:00
dependent-type-identity.cpp
derived.cpp
destructor-template.cpp [Sema] Fixes a crash with a templated destructor 2019-11-07 21:22:27 +01:00
elaborated-type-specifier.cpp
enum-argument.cpp Reapply "Fix crash on switch conditions of non-integer types in templates" 2019-12-03 15:27:19 -08:00
enum-bool.cpp
enum-forward.cpp
example-typelist.cpp
exception-spec-crash.cpp P1286R2: Remove restriction that the exception specification of a 2019-05-06 05:04:56 +00:00
explicit-instantiation.cpp Switch to gnu++14 as the default dialect. 2017-12-09 12:09:54 +00:00
explicit-specialization-member.cpp CWG issue 727: Fix numerous bugs in support for class-scope explicit 2019-05-03 23:51:38 +00:00
ext-vector-type.cpp
ext_ms_template_spec.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
extension-sfinae.cpp
extern-templates.cpp Don't suppress instantiation of definitions for variables subject to explicit 2017-10-18 22:45:01 +00:00
fibonacci.cpp
friend-template.cpp Revert "Address http://bugs.llvm.org/pr30994 so that a non-friend can properly replace a friend, and a visible friend can properly replace an invisible friend but not vice verse, and definitions are not replaced. This fixes the two FIXME in SemaTemplate/friend-template.cpp." 2017-04-17 20:57:40 +00:00
friend.cpp Remember to instantiate explicit template argument lists in a friend 2019-01-11 01:59:33 +00:00
fun-template-def.cpp
function-pointer-qualifier.cpp [Sema] Do not match function type with const T in template argument deduction 2018-05-03 01:43:23 +00:00
function-template-specialization-noreturn.cpp
function-template-specialization.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
implicit-instantiation-1.cpp
inject-templated-friend-post.cpp
inject-templated-friend.cpp
injected-class-name.cpp PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310). 2017-01-19 21:00:13 +00:00
instantiate-after-fatal-cxx17.cpp [c++17] Fix assertion on synthesizing deduction guides after a fatal error. 2018-05-14 22:49:44 +00:00
instantiate-anonymous-union.cpp
instantiate-array.cpp
instantiate-attr.cpp
instantiate-c99.cpp [c++20] Implement semantic restrictions for C++20 designated 2019-08-30 22:52:55 +00:00
instantiate-call.cpp
instantiate-case.cpp
instantiate-cast.cpp [Diagnostics] Improve some error messages related to bad use of dynamic_cast 2019-11-04 16:26:43 +01:00
instantiate-clang.cpp
instantiate-complete.cpp
instantiate-decl-dtor.cpp
instantiate-decl-init.cpp
instantiate-declref-ice.cpp
instantiate-declref.cpp
instantiate-deeply.cpp
instantiate-default-assignment-operator.cpp
instantiate-dependent-nested-name.cpp
instantiate-elab-type-specifier.cpp
instantiate-enum-2.cpp
instantiate-enum.cpp PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310). 2017-01-19 21:00:13 +00:00
instantiate-exception-spec-cxx11.cpp
instantiate-exception-spec.cpp
instantiate-expanded-type-constraint.cpp [Concepts] Type Constraints 2020-01-15 04:02:39 +02:00
instantiate-explicitly-after-fatal.cpp
instantiate-expr-1.cpp
instantiate-expr-2.cpp
instantiate-expr-3.cpp When diagnosing an ambiguity, only note the candidates that contribute 2019-10-24 14:58:29 -07:00
instantiate-expr-4.cpp Check for qualified function types after substituting into the operand 2019-10-03 18:55:23 +00:00
instantiate-expr-5.cpp
instantiate-expr-6.cpp
instantiate-expr-basic.cpp
instantiate-field.cpp
instantiate-friend-class.cpp
instantiate-friend-function.cpp PR43400: Add test that we can instantiate a friend function that is 2019-10-27 12:41:53 -07:00
instantiate-function-1.cpp
instantiate-function-1.mm
instantiate-function-2.cpp
instantiate-function-params.cpp Renamed and changed the wording of warn_cconv_ignored 2019-07-17 20:41:26 +00:00
instantiate-incomplete-typo-suggested-error-limit.cpp Fixes an assertion while instantiating a template with an incomplete typo-corrected type. 2019-09-07 20:14:09 +00:00
instantiate-init.cpp [c++20] Implement semantic restrictions for C++20 designated 2019-08-30 22:52:55 +00:00
instantiate-invalid.cpp
instantiate-local-class.cpp Only instantiate members of nested classes in local classes once, rather than once per enclosing class. 2017-01-04 23:45:01 +00:00
instantiate-member-class.cpp PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310). 2017-01-19 21:00:13 +00:00
instantiate-member-expr.cpp
instantiate-member-initializers.cpp
instantiate-member-pointers.cpp
instantiate-member-template.cpp
instantiate-method.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
instantiate-non-dependent-types.cpp
instantiate-non-type-template-parameter.cpp
instantiate-objc-1.mm
instantiate-overload-candidates.cpp
instantiate-overloaded-arrow.cpp
instantiate-partial-spec.cpp
instantiate-requires-clause.cpp [Concepts] Fix bug when referencing function parameters in instantiated function template requires clause 2020-01-22 20:43:38 +02:00
instantiate-requires-expr.cpp [Concepts] Requires Expressions 2020-01-19 00:23:26 +02:00
instantiate-scope.cpp
instantiate-self.cpp
instantiate-sizeof.cpp
instantiate-static-var.cpp Don't warn about runtime behavior problems in variable initializers that we 2017-09-23 18:27:11 +00:00
instantiate-subscript.cpp
instantiate-template-template-parm.cpp
instantiate-try-catch.cpp
instantiate-type.cpp
instantiate-typedef.cpp
instantiate-typeof.cpp
instantiate-using-decl.cpp
instantiate-var-template.cpp
instantiation-backtrace.cpp
instantiation-default-1.cpp When producing a name of a partial specialization in a diagnostic, use the 2016-12-24 04:09:05 +00:00
instantiation-default-2.cpp
instantiation-default-3.cpp
instantiation-depth-defarg.cpp
instantiation-depth-default.cpp Update line number after previous patch added an additional unsupported 2019-12-12 14:45:05 -08:00
instantiation-depth-exception-spec.cpp
instantiation-depth-subst-2.cpp
instantiation-depth-subst.cpp
instantiation-depth.cpp
instantiation-order.cpp
issue150.cpp
lambda-capture-pack.cpp Add regression test for PR41576 (which is already fixed in trunk, 2019-06-25 18:42:53 +00:00
late-parsing-eager-instantiation.cpp [Diagnostics] Try to improve warning message for -Wreturn-type 2019-11-09 17:54:58 +01:00
lookup-dependent-bases.cpp
member-access-ambig.cpp Print nested name specifiers for typedefs and type aliases 2017-03-10 15:04:58 +00:00
member-access-expr.cpp Reapply "Fix crash on switch conditions of non-integer types in templates" 2019-12-03 15:27:19 -08:00
member-function-template.cpp
member-inclass-init-value-dependent.cpp
member-initializers.cpp
member-specialization.cpp Fix crash if an in-class explicit function specialization has explicit 2018-12-04 22:26:32 +00:00
member-template-access-expr.cpp
metafun-apply.cpp Improve diagnostics and error recovery for template name lookup. 2018-05-11 02:43:08 +00:00
missing-class-keyword-crash.cpp
missing-typename.cpp [MS] Fix for Bug 8446, template instantiation without a 'typename' keyword 2019-02-26 02:22:17 +00:00
ms-class-specialization-class-scope.cpp When producing a name of a partial specialization in a diagnostic, use the 2016-12-24 04:09:05 +00:00
ms-class-specialization-duplicate.cpp
ms-delayed-default-template-args.cpp [Concepts] Placeholder constraints and abbreviated templates 2020-01-23 19:39:43 +02:00
ms-function-specialization-class-scope.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
ms-if-exists.cpp
ms-lookup-template-base-classes.cpp Improve diagnosis of unknown template name. 2017-05-10 21:32:16 +00:00
ms-sizeof-missing-typename.cpp PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310). 2017-01-19 21:00:13 +00:00
nested-deduction-guides.cpp When instantiating a deduction guide, transform its name. 2017-12-21 19:43:39 +00:00
nested-incomplete-class.cpp
nested-linkage.cpp
nested-name-spec-template.cpp Improve diagnostics and error recovery for template name lookup. 2018-05-11 02:43:08 +00:00
nested-template.cpp Fix a couple of places where we assumed that non-type template parameters are always rvalues. 2018-02-14 02:07:53 +00:00
non-integral-switch-cond.cpp Reapply "Fix crash on switch conditions of non-integer types in templates" 2019-12-03 15:27:19 -08:00
operator-function-id-template.cpp
operator-template.cpp
overload-candidates.cpp Fix test case in pre-C++11 mode; address Aaron Ballman's code review. 2017-07-05 21:12:37 +00:00
overload-uneval.cpp
overloaded-functions.cpp
pack-deduction.cpp Always deduce the lengths of contained parameter packs when deducing a 2020-01-06 17:24:29 -08:00
partial-order.cpp Revert r295277 to fix buildbot. 2017-02-16 04:22:56 +00:00
partial-spec-instantiate.cpp [Sema] Fix assertion when constructor is disabled with partially specialized template. 2018-05-16 18:28:58 +00:00
pragma-ms_struct.cpp
qualified-id.cpp
qualified-names-diag.cpp
rdar9173693.cpp Remove redundant CXXScopeSpec from TemplateIdAnnotation. 2020-01-17 15:47:21 -08:00
recovery-crash.cpp [c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose 2019-05-09 03:31:27 +00:00
recursive-template-instantiation.cpp
resolve-single-template-id.cpp Fix crash and rejects-valid when a later template parameter or default 2019-06-20 19:49:13 +00:00
self-comparison.cpp
sizeof-pack.cpp [c++20] P0780R2: Support pack-expansion of init-captures. 2019-05-21 20:10:50 +00:00
stack-exhaustion.cpp Disable stack exhaustion test on NetBSD, where either the detection or 2019-09-03 18:00:44 +00:00
stmt-expr.cpp Fix crash when trying to pack-expand a GNU statement expression. 2018-02-03 00:44:57 +00:00
temp-param-subst-linear.cpp When substituting previously-checked template arguments into a template 2018-03-08 01:07:33 +00:00
temp.cpp Fix implementation of [temp.local]p4. 2019-02-15 21:53:07 +00:00
temp_arg.cpp PR0091R3: Implement parsing support for using templates as types. 2017-01-26 20:40:47 +00:00
temp_arg_enum_printing.cpp [AST] Incorrectly qualified unscoped enumeration as template actual parameter. 2017-12-21 21:47:22 +00:00
temp_arg_enum_printing_more.cpp [AST] Incorrectly qualified unscoped enumeration as template actual parameter. 2017-12-21 21:47:22 +00:00
temp_arg_nontype.cpp When diagnosing an ambiguity, only note the candidates that contribute 2019-10-24 14:58:29 -07:00
temp_arg_nontype_cxx1z.cpp PR42108 Consistently diagnose binding a reference template parameter to 2020-01-19 18:16:36 -08:00
temp_arg_nontype_cxx11.cpp PR42513: Enter the proper DeclContext before substituting into an 2019-08-24 02:30:00 +00:00
temp_arg_pack.cpp PR39231: fix null dereference when diagnosing deduction failure due to 2018-10-09 18:49:22 +00:00
temp_arg_template.cpp PR10147: When substituting a template template argument, substitute in the most 2017-08-29 22:14:43 +00:00
temp_arg_template_cxx1z.cpp PR32185: Revert r291512 and add a testcase for PR32185. 2017-04-13 21:37:24 +00:00
temp_arg_type.cpp [c++1z] Support deducing B in noexcept(B). 2017-06-07 21:46:22 +00:00
temp_class_order.cpp
temp_class_spec.cpp
temp_class_spec_blocks.cpp
temp_class_spec_neg.cpp Implement C++ DR727, which permits explicit specializations at class scope. 2018-03-16 13:36:56 +00:00
temp_explicit.cpp [Test] Make Lit tests C++11 compatible #9 2017-02-24 22:22:05 +00:00
temp_explicit_cxx0x.cpp
temp_func_order.cpp
template-class-traits.cpp
template-decl-fail.cpp
template-id-expr.cpp Improve diagnostics and error recovery for template name lookup. 2018-05-11 02:43:08 +00:00
template-id-printing.cpp
typename-specifier-2.cpp
typename-specifier-3.cpp PR12884: Add test (bug is already fixed). 2018-11-28 05:15:46 +00:00
typename-specifier-4.cpp
typename-specifier.cpp Print nested name specifiers for typedefs and type aliases 2017-03-10 15:04:58 +00:00
typo-dependent-name.cpp [NFC] Explicitly add -std=c++14 option to tests that rely on the C++14 default 2019-02-05 12:05:53 +00:00
typo-template-name.cpp When we see a '<' operator, check whether it's a probable typo for a template-id. 2017-05-10 02:30:28 +00:00
typo-variadic.cpp [SemaTemplate] Fix uncorrected typos after pack expansion 2019-07-16 10:30:21 +00:00
undefined-template.cpp Suppress undefined-template warnings when the pattern is declared in a system header. 2018-01-02 19:10:12 +00:00
unresolved-construct.cpp
unused-variables.cpp
using-decl.cpp Always rebuild a DeclRefExpr if its FoundDecl would change. 2019-09-26 22:28:32 +00:00
value-dependent-null-pointer-constant.cpp [Test] Make Lit tests C++11 compatible #9 2017-02-24 22:22:05 +00:00
virtual-member-functions.cpp [Lit Test] Make tests C++11 compatible - Microsoft diagnostics 2017-02-06 19:32:38 +00:00
warn-thread-safety-analysis.cpp Fix some handling of AST nodes with diagnostics. 2018-03-28 04:16:13 +00:00