mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-13 22:00:14 +00:00
Fix bug which sometimes resulted in further diagnostics being produced after a
fatal error. Previously, if a fatal error was followed by a diagnostic which was suppressed due to a SFINAETrap, we'd forget that we'd seen a fatal error. llvm-svn: 164437
This commit is contained in:
parent
493dffe2b1
commit
6d12af7410
@ -478,10 +478,13 @@ public:
|
||||
}
|
||||
OverloadsShown getShowOverloads() const { return ShowOverloads; }
|
||||
|
||||
/// \brief Pretend that the last diagnostic issued was ignored.
|
||||
/// \brief Pretend that the last diagnostic issued was ignored, so any
|
||||
/// subsequent notes will be suppressed.
|
||||
///
|
||||
/// This can be used by clients who suppress diagnostics themselves.
|
||||
void setLastDiagnosticIgnored() {
|
||||
if (LastDiagLevel == DiagnosticIDs::Fatal)
|
||||
FatalErrorOccurred = true;
|
||||
LastDiagLevel = DiagnosticIDs::Ignored;
|
||||
}
|
||||
|
||||
|
@ -34,18 +34,6 @@ template<> struct S<10> {};
|
||||
void (*pFn2)() noexcept = &S<0>::recurse; // expected-note {{instantiation of exception spec}} expected-error {{not superset}}
|
||||
|
||||
|
||||
template<typename T> T go(T a) noexcept(noexcept(go(a))); // \
|
||||
// expected-error 16{{call to function 'go' that is neither visible}} \
|
||||
// expected-note 16{{'go' should be declared prior to the call site}} \
|
||||
// expected-error {{recursive template instantiation exceeded maximum depth of 16}} \
|
||||
// expected-error {{use of undeclared identifier 'go'}} \
|
||||
|
||||
void f() {
|
||||
int k = go(0); // \
|
||||
// expected-note {{in instantiation of exception specification for 'go<int>' requested here}}
|
||||
}
|
||||
|
||||
|
||||
namespace dr1330_example {
|
||||
template <class T> struct A {
|
||||
void f(...) throw (typename T::X); // expected-error {{'int'}}
|
||||
|
@ -0,0 +1,11 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -ftemplate-depth 16 -fcxx-exceptions -fexceptions %s
|
||||
|
||||
template<typename T> T go(T a) noexcept(noexcept(go(a))); // \
|
||||
// expected-error 16{{call to function 'go' that is neither visible}} \
|
||||
// expected-note 16{{'go' should be declared prior to the call site}} \
|
||||
// expected-error {{recursive template instantiation exceeded maximum depth of 16}}
|
||||
|
||||
void f() {
|
||||
int k = go(0); // \
|
||||
// expected-note {{in instantiation of exception specification for 'go<int>' requested here}}
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
// RUN: %clang_cc1 -verify %s -ftemplate-depth 2
|
||||
|
||||
template<int N> struct S { };
|
||||
// FIXME: We produce the same 'instantiation depth' error here many times
|
||||
// (2^(depth+1) in total), due to additional lookups performed as part of
|
||||
// error recovery in DiagnoseTwoPhaseOperatorLookup.
|
||||
template<typename T> S<T() + T()> operator+(T, T); // expected-error 8{{}} expected-note 10{{}}
|
||||
template<typename T> S<T() + T()> operator+(T, T); // expected-error {{instantiation exceeded maximum depth}} expected-note 3{{while substituting}}
|
||||
S<0> s;
|
||||
int k = s + s; // expected-error {{invalid operands to binary expression}}
|
||||
int k = s + s;
|
||||
|
@ -3,7 +3,7 @@
|
||||
// PR9793
|
||||
template<typename T> auto f(T t) -> decltype(f(t)); // \
|
||||
// expected-error {{recursive template instantiation exceeded maximum depth of 2}} \
|
||||
// expected-note 3 {{while substituting}} \
|
||||
// expected-note {{candidate}}
|
||||
// expected-note 3 {{while substituting}}
|
||||
|
||||
int k = f(0); // expected-error {{no matching function for call to 'f'}}
|
||||
struct S {};
|
||||
int k = f(S{});
|
||||
|
Loading…
x
Reference in New Issue
Block a user