Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "[Coverage] Fix region termination for GNU statement expressions" #132095

Merged
merged 1 commit into from
Mar 19, 2025

Conversation

justincady
Copy link
Contributor

Reverts #130976

Breaks clang-cmake-x86_64-avx512-linux bot.

@llvmbot llvmbot added clang Clang issues not falling into any other category compiler-rt clang:codegen IR generation bugs: mangling, exceptions, etc. PGO Profile Guided Optimizations labels Mar 19, 2025
@llvmbot
Copy link
Member

llvmbot commented Mar 19, 2025

@llvm/pr-subscribers-clang-codegen
@llvm/pr-subscribers-pgo

@llvm/pr-subscribers-clang

Author: Justin Cady (justincady)

Changes

Reverts llvm/llvm-project#130976

Breaks clang-cmake-x86_64-avx512-linux bot.


Full diff: https://github.com/llvm/llvm-project/pull/132095.diff

3 Files Affected:

  • (modified) clang/lib/CodeGen/CoverageMappingGen.cpp (-8)
  • (modified) clang/test/CoverageMapping/terminate-statements.cpp (-7)
  • (removed) compiler-rt/test/profile/Linux/coverage-statement-expression.cpp (-21)
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp
index 73811d15979d5..f09157771d2b5 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1505,14 +1505,6 @@ struct CounterCoverageMappingBuilder
     handleFileExit(getEnd(S));
   }
 
-  void VisitStmtExpr(const StmtExpr *E) {
-    Visit(E->getSubStmt());
-    // Any region termination (such as a noreturn CallExpr) within the statement
-    // expression has been handled by visiting the sub-statement. The visitor
-    // cannot be at a terminate statement leaving the statement expression.
-    HasTerminateStmt = false;
-  }
-
   void VisitDecl(const Decl *D) {
     Stmt *Body = D->getBody();
 
diff --git a/clang/test/CoverageMapping/terminate-statements.cpp b/clang/test/CoverageMapping/terminate-statements.cpp
index 3f8e43f0fbcb6..0067185fee8e6 100644
--- a/clang/test/CoverageMapping/terminate-statements.cpp
+++ b/clang/test/CoverageMapping/terminate-statements.cpp
@@ -346,12 +346,6 @@ int elsecondnoret(void) {
   return 0;
 }
 
-// CHECK-LABEL: _Z18statementexprnoretb
-int statementexprnoret(bool crash) {
-  int rc = ({ if (crash) abort(); 0; }); // CHECK: File 0, 351:35 -> 352:12 = (#0 - #1)
-  return rc;                             // CHECK-NOT: Gap
-}
-
 int main() {
   foo(0);
   foo(1);
@@ -374,6 +368,5 @@ int main() {
   ornoret();
   abstractcondnoret();
   elsecondnoret();
-  statementexprnoret(false);
   return 0;
 }
diff --git a/compiler-rt/test/profile/Linux/coverage-statement-expression.cpp b/compiler-rt/test/profile/Linux/coverage-statement-expression.cpp
deleted file mode 100644
index 7c76555e3300b..0000000000000
--- a/compiler-rt/test/profile/Linux/coverage-statement-expression.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// RUN: %clangxx_profgen -std=gnu++17 -fuse-ld=lld -fcoverage-mapping -o %t %s
-// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
-// RUN: llvm-profdata merge -o %t.profdata %t.profraw
-// RUN: llvm-cov show %t -instr-profile=%t.profdata 2>&1 | FileCheck %s
-
-#include <stdio.h>
-
-// clang-format off
-__attribute__ ((__noreturn__))
-void foo(void) { while (1); }                   // CHECK:  [[@LINE]]| 0|void foo(void)
-_Noreturn void bar(void) { while (1); }         // CHECK:  [[@LINE]]| 0|_Noreturn void bar(void)
-                                                // CHECK:  [[@LINE]]|  |
-int main(int argc, char **argv) {               // CHECK:  [[@LINE]]| 1|int main(
-  int rc = ({ if (argc > 3) foo(); 0; });       // CHECK:  [[@LINE]]| 1|  int rc =
-  printf("coverage after foo is present\n");    // CHECK:  [[@LINE]]| 1|  printf(
-                                                // CHECK:  [[@LINE]]|  |
-  int rc2 = ({ if (argc > 3) bar(); 0; });      // CHECK:  [[@LINE]]| 1|  int rc2 =
-  printf("coverage after bar is present\n");    // CHECK:  [[@LINE]]| 1|  printf(
-  return rc + rc2;                              // CHECK:  [[@LINE]]| 1|  return rc
-}                                               // CHECK:  [[@LINE]]| 1|}
-// clang-format on

@justincady justincady merged commit bd2d8c0 into main Mar 19, 2025
11 of 15 checks passed
@justincady justincady deleted the revert-130976-stmt-expr-coverage branch March 19, 2025 20:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:codegen IR generation bugs: mangling, exceptions, etc. clang Clang issues not falling into any other category compiler-rt PGO Profile Guided Optimizations
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants