================
@@ -1749,6 +1757,8 @@ void CodeGenFunction::EmitCaseStmtRange(const CaseStmt &S,
   // switch machinery to enter this block.
   llvm::BasicBlock *CaseDest = createBasicBlock("sw.bb");
   EmitBlockWithFallThrough(CaseDest, &S);
+  if (getLangOpts().CPlusPlus)
----------------
efriedma-quic wrote:

Getting computed goto right is more complicated.

The basic problem with computed goto is that you don't know if the jump left 
the scope of a variable.  If you have a goto where the source and destination 
are in the same scope as a variable, the variable stays alive, and we must not 
reinitialize it.  But unlike regular goto, we can't insert code along the edge.

So really, I suspect the best we can do for that case is treat every variable 
as if it's function scope.  (Theoretically, there are ways to make it work, but 
they involve inserting extra code to track state, which would probably make 
anyone using computed goto unhappy.)

We need some test coverage with computed goto with multiple scopes.

https://github.com/llvm/llvm-project/pull/181937
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to