forked from OSchip/llvm-project
[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:
parent
4f8e299785
commit
4e1c487004
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue