Please add a serialization / deserialization test. ================ Comment at: include/clang/AST/Decl.h:2253-2255 @@ -2255,1 +2252,5 @@ + /// \brief Determine whether this member has a reference to captured + /// expression for structs/classes generates for list of variables captured + /// in lambda expressions. + bool hasCapturedExpr() const; ---------------- I can't parse this sentence.
================ Comment at: include/clang/AST/Decl.h:2256-2258 @@ +2255,5 @@ + /// in lambda expressions. + bool hasCapturedExpr() const; + /// \brief Get the captured expression if any. + Expr *getCapturedExpr() const { + return hasCapturedExpr() ? InitializerOrBitWidth.getPointer() : nullptr; ---------------- I think this should be made more specific: this actually refers specifically to capturing a VLA bound, so it should be named thusly. ================ Comment at: include/clang/AST/LambdaCapture.h:81 @@ -77,1 +80,3 @@ + /// \brief Determine whether this captures expression. + bool capturesExpression() const { ---------------- "... captures an expression." ================ Comment at: include/clang/AST/LambdaCapture.h:82 @@ +81,3 @@ + /// \brief Determine whether this captures expression. + bool capturesExpression() const { + return (DeclAndBits.getPointer() == nullptr) && ---------------- Please make this instead be `capturesVLABound`, since that's what it's for. ================ Comment at: lib/AST/Decl.cpp:3265-3269 @@ +3264,7 @@ + InitializerOrBitWidth.getPointer()) { + if (getDeclContext() && getDeclContext()->isRecord()) { + if (auto *RD = dyn_cast<CXXRecordDecl>(getParent())) { + return !RD->isLambda(); + } + } + return true; ---------------- Please update the comment for `InitializerOrBitWidth` to describe what you're doing here. ================ Comment at: lib/AST/Decl.cpp:3333 @@ +3332,3 @@ + "bit width, initializer or captured expr already set"); + InitializerOrBitWidth.setPointer(CapturedExpr); +} ---------------- It's not really safe to track the captured expression like this: we don't guarantee to preserve expression pointer equality across serialization and deserialization if the expression is reachable from multiple parents, as this one will be. Instead, how about passing in and storing a `VariableArrayType` here? http://reviews.llvm.org/D4368 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits