[clang] Fix crash when creating deduction guide.

We used to trigger assertion when transforming c-tor with unparsed
default argument. Now we ignore such constructors for this purpose.

Differential Revision: https://reviews.llvm.org/D97965
This commit is contained in:
Adam Czachorowski 2021-03-04 18:01:06 +01:00
parent 4f8e299785
commit 4e1c487004
2 changed files with 17 additions and 0 deletions

View File

@ -2494,6 +2494,12 @@ void Sema::DeclareImplicitDeductionGuides(TemplateDecl *Template,
if (!CD || (!FTD && CD->isFunctionTemplateSpecialization()))
continue;
// Cannot make a deduction guide when unparsed arguments are present.
if (std::any_of(CD->param_begin(), CD->param_end(), [](ParmVarDecl *P) {
return !P || P->hasUnparsedDefaultArg();
}))
continue;
Transform.transformConstructor(FTD, CD);
AddedAny = true;
}

View File

@ -416,6 +416,17 @@ B b(0, {});
}
namespace no_crash_on_default_arg {
class A {
template <typename T> class B {
B(int c = 1);
};
// This used to crash due to unparsed default arg above. The diagnostic could
// be improved, but the point of this test is to simply check we do not crash.
B(); // expected-error {{deduction guide declaration without trailing return type}}
};
} // namespace no_crash_on_default_arg
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wctad-maybe-unsupported"
namespace test_implicit_ctad_warning {