mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-12 01:18:53 +00:00
bd4662cd3f
Fix a crash when evaluating a constexpr function which contains recovery-exprs. https://bugs.llvm.org/show_bug.cgi?id=46837 Would be nice to have constant expression evaluator support general template value-dependent expressions, but it requires more work. This patch is a good start I think, to handle the error-only value-dependent expressions. Differential Revision: https://reviews.llvm.org/D84637
35 lines
1003 B
C++
35 lines
1003 B
C++
// RUN: %clang_cc1 -frecovery-ast -verify %s
|
|
|
|
struct X {
|
|
int Y;
|
|
constexpr X()
|
|
: Y(foo()) {} // expected-error {{use of undeclared identifier 'foo'}}
|
|
};
|
|
// no crash on evaluating the constexpr ctor.
|
|
constexpr int Z = X().Y; // expected-error {{constexpr variable 'Z' must be initialized by a constant expression}}
|
|
|
|
struct X2 {
|
|
int Y = foo(); // expected-error {{use of undeclared identifier 'foo'}}
|
|
constexpr X2() {}
|
|
};
|
|
|
|
struct X3 {
|
|
int Y;
|
|
constexpr X3()
|
|
: Y(({foo();})) {} // expected-error {{use of undeclared identifier 'foo'}}
|
|
};
|
|
|
|
struct CycleDelegate {
|
|
int Y;
|
|
CycleDelegate(int)
|
|
: Y(foo()) {} // expected-error {{use of undeclared identifier 'foo'}}
|
|
// no bogus "delegation cycle" diagnostic
|
|
CycleDelegate(float) : CycleDelegate(1) {}
|
|
};
|
|
|
|
struct X4 {
|
|
int* p = new int(invalid()); // expected-error {{use of undeclared identifier}}
|
|
};
|
|
// no crash on evaluating the CXXDefaultInitExpr.
|
|
constexpr int* s = X4().p; // expected-error {{must be initialized by}}
|