diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp index 041bede6bdc7e981be1d26515e618aed1951285a..be4b3af4d6625c86436f20ba4cf024061817c8ce 100644 --- a/lib/AST/ExprConstant.cpp +++ b/lib/AST/ExprConstant.cpp @@ -9787,6 +9787,8 @@ public: bool Success(const APValue &V, const Expr *e) { return true; } + bool ZeroInitialization(const Expr *E) { return true; } + bool VisitCastExpr(const CastExpr *E) { switch (E->getCastKind()) { default: diff --git a/test/SemaCXX/constant-expression-cxx1y.cpp b/test/SemaCXX/constant-expression-cxx1y.cpp index ac4e0fd471aedf865818160c1fee8baeb75a2d04..0c0cb0ec58a1a989ffe0267b7fec4d7db1b72d2a 100644 --- a/test/SemaCXX/constant-expression-cxx1y.cpp +++ b/test/SemaCXX/constant-expression-cxx1y.cpp @@ -982,3 +982,9 @@ constexpr void PR28739(int n) { // expected-error {{never produces a constant}} int *p = &n; p += (__int128)(unsigned long)-1; // expected-note {{cannot refer to element 18446744073709551615 of non-array object in a constant expression}} } + +constexpr void Void(int n) { + void(n + 1); + void(); +} +constexpr int void_test = (Void(0), 1);