r348830 - [Sema]improve static_assert(!expr)
Clement Courbet via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 10 23:04:49 PST 2018
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 at -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 at -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 at -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 at -1{{static_assert failed due to requirement '!(std::is_const<int>::value)' "message"}}
struct BI_tag {};
struct RAI_tag : BI_tag {};
More information about the cfe-commits
mailing list