[PATCH] [Parse] Allow 'constexpr' in condition declarations
Meador Inge
meadori at gmail.com
Fri May 1 11:28:00 PDT 2015
Opening up in **constexpr** s in conditions allows "maybe" odr used expression to be collected in cases like:
class T {
public:
constexpr T(int v) : v(v) { }
constexpr operator int() const { return v; }
private:
int v;
};
int main() {
if (constexpr T x = 200) { }
}
Without the cleanup the following assert fires:
(MaybeODRUseExprs.empty() && "Leftover expressions for odr-use checking"), function ActOnFinishFunctionBody, file /Users/meadori/Code/source/llvm/tools/clang/lib/Sema/SemaDecl.cpp, line 10820.
**MaybeODRUseExprs** is populated in **DoMarkVarDeclReferenced** from **SemaExpr.cpp** (the end of the function does an explicit check for constant expressions). I don't think this situation could ever happen for conditional declarations before, but know it can and we need the new cleanup.
================
Comment at: include/clang/Parse/Parser.h:1760
@@ -1760,1 +1759,3 @@
+ DeclSpecContext DSC = DSC_normal,
+ bool AllowConstexprs = false);
----------------
rsmith wrote:
> Please add a new DSC value for conditions rather than adding a flag here.
Will fix.
================
Comment at: lib/Sema/SemaExprCXX.cpp:2585
@@ -2584,1 +2584,3 @@
+ Condition = MaybeCreateExprWithCleanups(Condition.get());
+
----------------
rsmith wrote:
> Do your tests cover the need for this?
Not yet, but I will add a test for it.
================
Comment at: test/CXX/stmt.stmt/stmt.select/p6.cpp:4-5
@@ +3,4 @@
+
+// This test verifies the functionality specified by DR948:
+// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#948
+
----------------
rsmith wrote:
> The right place for such a test is tests/CXX/drs/dr9xx.cpp.
Will fix.
http://reviews.llvm.org/D8978
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the cfe-commits
mailing list