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