llvm-capstone/clang/test/SemaTemplate/instantiate-after-fatal-cxx17.cpp
Volodymyr Sapsai 2f649f3d7f [c++17] Fix assertion on synthesizing deduction guides after a fatal error.
After a fatal error Sema::InstantiatingTemplate doesn't allow further
instantiation and doesn't push a CodeSynthesisContext. When we tried to
synthesize implicit deduction guides from constructors we hit the
assertion

> Assertion failed: (!CodeSynthesisContexts.empty() && "Cannot perform an instantiation without some context on the " "instantiation stack"), function SubstType, file clang/lib/Sema/SemaTemplateInstantiate.cpp, line 1580.

Fix by avoiding deduction guide synthesis if InstantiatingTemplate is invalid.

rdar://problem/39051732

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D46446

llvm-svn: 332307
2018-05-14 22:49:44 +00:00

17 lines
390 B
C++

// RUN: not %clang_cc1 -std=c++17 -fsyntax-only -ferror-limit 1 %s 2>&1 | FileCheck %s
#error Error 1
#error Error 2
// CHECK: fatal error: too many errors emitted, stopping now
namespace rdar39051732 {
template<class T> struct A {
template <class U> A(T&, ...);
};
// Deduction guide triggers constructor instantiation.
template<class T> A(const T&, const T&) -> A<T&>;
}