Author: courbet Date: Mon Dec 10 23:04:49 2018 New Revision: 348830 URL: http://llvm.org/viewvc/llvm-project?rev=348830&view=rev Log: [Sema]improve static_assert(!expr)
Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/test/SemaCXX/static-assert.cpp Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=348830&r1=348829&r2=348830&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Mon Dec 10 23:04:49 2018 @@ -3071,6 +3071,20 @@ static void prettyPrintFailedBooleanCond } return; } + if (const auto *Paren = dyn_cast<ParenExpr>(FailedCond)) { + OS << "("; + prettyPrintFailedBooleanCondition(OS, Paren->getSubExpr(), Policy); + OS << ")"; + return; + } + // If this is !(BooleanExpression), try pretty-printing the inner expression. + const auto *UnaryOp = dyn_cast<UnaryOperator>(FailedCond); + if (UnaryOp && UnaryOp->getOpcode() == UO_LNot) { + OS << "!"; + prettyPrintFailedBooleanCondition(OS, UnaryOp->getSubExpr(), Policy); + return; + } + FailedCond->printPretty(OS, nullptr, Policy); } Modified: cfe/trunk/test/SemaCXX/static-assert.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/static-assert.cpp?rev=348830&r1=348829&r2=348830&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/static-assert.cpp (original) +++ cfe/trunk/test/SemaCXX/static-assert.cpp Mon Dec 10 23:04:49 2018 @@ -111,6 +111,10 @@ static_assert(std::is_same<ExampleTypes: // expected-error@-1{{static_assert failed due to requirement 'std::is_same<int, float>::value' "message"}} static_assert(std::is_const<ExampleTypes::T>::value, "message"); // expected-error@-1{{static_assert failed due to requirement 'std::is_const<int>::value' "message"}} +static_assert(!std::is_const<const ExampleTypes::T>::value, "message"); +// expected-error@-1{{static_assert failed due to requirement '!std::is_const<int>::value' "message"}} +static_assert(!(std::is_const<const ExampleTypes::T>::value), "message"); +// expected-error@-1{{static_assert failed due to requirement '!(std::is_const<int>::value)' "message"}} struct BI_tag {}; struct RAI_tag : BI_tag {}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits