aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectScript.cpp
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2022-06-23 15:52:16 +0200
committerIlya Biryukov <ibiryukov@google.com>2022-06-23 16:20:30 +0200
commit342e64979afe0b3859462397c4a8abba6faa9de0 (patch)
tree9b32010ae29f67ec5a5ea9d43ac85e9233525f89 /lldb/source/Commands/CommandObjectScript.cpp
parent9d2349c78f93cba78c1f3b770355f2ac0cb98163 (diff)
downloadllvm-342e64979afe0b3859462397c4a8abba6faa9de0.zip
llvm-342e64979afe0b3859462397c4a8abba6faa9de0.tar.gz
llvm-342e64979afe0b3859462397c4a8abba6faa9de0.tar.bz2
[Sema] Fix assertion failure when instantiating requires expression
Fixes #54629. The crash is is caused by the double template instantiation. See the added test. Here is what happens: - Template arguments for the partial specialization get instantiated. - This causes instantitation into the corrensponding requires expression. - `TemplateInsantiator` correctly handles instantiation of parameters inside `RequiresExprBody` and instantiates the constraint expression inside the `NestedRequirement`. - To build the substituted `NestedRequirement`, `TemplateInsantiator` calls `Sema::BuildNestedRequirement` calls `CheckConstraintSatisfaction`, which results in another template instantiation (with empty template arguments). This seem to be an implementation detail to handle constraint satisfaction and is not required by the standard. - The recursive template instantiation tries to find the parameter inside `RequiresExprBody` and fails with the corresponding assertion. Note that this only happens as both instantiations happen with the class partial template specialization set as `Sema.CurContext`, which is considered a dependent `DeclContext`. To fix the assertion, avoid doing the recursive template instantiation and instead evaluate resulting expressions in-place. Reviewed By: erichkeane Differential Revision: https://reviews.llvm.org/D127487
Diffstat (limited to 'lldb/source/Commands/CommandObjectScript.cpp')
0 files changed, 0 insertions, 0 deletions