llvm-capstone/clang/test/SemaCXX/invalid-constructor-init.cpp
Haojian Wu bd4662cd3f [AST] Enhance the const expression evaluator to support error-dependent exprs.
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
2020-11-18 15:48:06 +01:00

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}}