diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -379,6 +379,12 @@ return; } + if (ExprEvalContexts.back().Context == + ExpressionEvaluationContext::ConstantEvaluated) { + Diag(Loc, DiagID) << R1 << R2; + return; + } + DiagRuntimeBehavior(Loc, nullptr, PDiag(DiagID) << R1 << R2); } diff --git a/clang/test/SemaCXX/warn-unused-value.cpp b/clang/test/SemaCXX/warn-unused-value.cpp --- a/clang/test/SemaCXX/warn-unused-value.cpp +++ b/clang/test/SemaCXX/warn-unused-value.cpp @@ -138,3 +138,10 @@ (void)arr3; (void)arr4; } + +#if __cplusplus >= 201103L // C++11 or later +namespace test5 { +int v[(5, 6)]; // expected-warning {{expression result unused}} +auto p1 = new double[4][(5, 6)]; // expected-warning {{expression result unused}} +} // namespace test5 +#endif