From 6125770b4ce329df26cf33fdcf0b7c10a8cdacc2 Mon Sep 17 00:00:00 2001
From: Richard Smith <richard-llvm@metafoo.co.uk>
Date: Thu, 17 Aug 2017 19:35:50 +0000
Subject: [PATCH] PR34161: support evaluation of 'void()' expressions in C++14
 onwards.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311115 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/AST/ExprConstant.cpp                   | 2 ++
 test/SemaCXX/constant-expression-cxx1y.cpp | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 041bede6bdc..be4b3af4d66 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 ac4e0fd471a..0c0cb0ec58a 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);
-- 
GitLab