[clang] [Clang] Implement P2809: Trivial infinite loops are not Undefined Behavior (PR #90066)

via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 30 12:51:33 PDT 2024


================
@@ -908,6 +908,74 @@ void CodeGenFunction::EmitIfStmt(const IfStmt &S) {
     incrementProfileCounter(&S);
 }
 
+bool CodeGenFunction::checkIfLoopMustProgress(const Expr *ControllingExpression,
+                                              bool IsTrivialCXXLoop) {
+  if (CGM.getCodeGenOpts().getFiniteLoops() ==
+      CodeGenOptions::FiniteLoopsKind::Never)
+    return false;
+
+  if (CGM.getCodeGenOpts().getFiniteLoops() ==
+          CodeGenOptions::FiniteLoopsKind::Always &&
+      !getLangOpts().CPlusPlus11)
----------------
cor3ntin wrote:

Yes, I wasn't sure what to do here. Does it make sense to override the standard? but given the loop is for sure infinite, it could be spelled `--ub`.
On the other hand, if we override all modes, is the flag useful at all?

https://github.com/llvm/llvm-project/pull/90066


More information about the cfe-commits mailing list