This is looking pretty good. My main complaint is the FunctionDecl we're 
synthesizing to act as the DeclContext. I think it's doing more harm than good, 
because we'll have to be very careful to avoid tripping over this FunctionDecl 
elsewhere in the compiler (e.g., why does code completion show me this 
__captured_stmt_helperV2 function? or typo correction?). All we need the 
FunctionDecl for is to act as a DeclContext, because CodeGen can easily build 
the LLVM function, and calls to it, because the signature is so regular anyway. 
I suggest adding a CapturedStmtDecl (similar to BlockDecl) to act as the 
DeclContext.


================
Comment at: lib/Sema/SemaExprCXX.cpp:740
@@ +739,3 @@
+    if (CapturedRegionScopeInfo *RSI
+        = dyn_cast<CapturedRegionScopeInfo>(FunctionScopes[idx])) {
+      RecordDecl *RD = RSI->TheRecordDecl;
----------------
Please indent the '=' an extra two spaces.

================
Comment at: lib/Sema/SemaExprCXX.cpp:739
@@ +738,3 @@
+
+    if (CapturedRegionScopeInfo *RSI
+        = dyn_cast<CapturedRegionScopeInfo>(FunctionScopes[idx])) {
----------------
else if... ?

================
Comment at: lib/Sema/SemaStmt.cpp:2312
@@ -2307,1 +2311,3 @@
+  }
+
   // For blocks/lambdas with implicit return types, we check each return
----------------
There's an if-else chain below (~line 2352)  that checks block and lambda 
scopes. How about just extending those checks? HasImplicitReturnType will be 
false anyway.

================
Comment at: lib/Sema/SemaStmt.cpp:2868
@@ +2867,3 @@
+
+  IdentifierInfo *Id = &PP.getIdentifierTable().get("capture");
+  RecordDecl *RD = 0;
----------------
Please make the generated struct anonymous. We want no chance of it showing up 
anywhere.

================
Comment at: lib/Sema/SemaStmt.cpp:2940
@@ +2939,3 @@
+static IdentifierInfo *GetMangledHelperName(Sema &S) {
+  static unsigned count = 0;
+  StringRef name("__captured_stmt_helperV");
----------------
This isn't thread-safe. See my general comment below.


http://llvm-reviews.chandlerc.com/D433
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to