ahatanak added inline comments.

================
Comment at: lib/CodeGen/CodeGenFunction.h:217
+  /// statements.
+  llvm::SmallVector<bool, 4> LabelSeenStack;
+
----------------
ahatanak wrote:
> rjmccall wrote:
> > Shouldn't this be maintained by some existing scoping structure like 
> > LexicalScope?
> I think I need a structure that gets pushed and popped when we enter and exit 
> a compound statement, but I couldn't find one in CodeGenFunction.
> 
> Adding a flag to LexicalScope would fail to disable lifetime markers in some 
> cases. For example, in the code below (which I think is valid), the lifetime 
> markers of "i" wouldn't get disabled because a LexicalScope is pushed at the 
> beginning of CodeGenFunction::EmitForStmt:
> 
> ```
> void foo2(int *);
> int c;
> 
> void foo1(int n) {
>   int *p = 0;
> 
> label1:
>   foo2(p);
>   for (int i = 0; i < n; ++i)
>     if (i == 5)
>       p = &i;
> 
>   if (c)
>     goto label1;
> }
> ```
> 
> If we want to avoid introducing new structures to track labels, perhaps we 
> can just check whether a label was seen so far in the current function rather 
> than the current compound statement, but I'm not sure how much impact that 
> would have on performance.
Alternatively, add a flag to LexicalScope that indicates it was created in 
EmitCompoundStmtWithoutScope. lifetime markers would be disabled if the flag of 
the enclosing CompoundStmt's LexicalScope were set.


https://reviews.llvm.org/D27680



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to