[Openmp-commits] [flang] [openmp] [OpenMP] [Flang] Fix Issue llvm#76121 (PR #82221)
chandan singh via Openmp-commits
openmp-commits at lists.llvm.org
Sun Mar 10 22:54:22 PDT 2024
https://github.com/chandankds updated https://github.com/llvm/llvm-project/pull/82221
>From 9b1ea42bd38b4ede10460bef569e80f30a73d115 Mon Sep 17 00:00:00 2001
From: chandan singh <chandankds at gmail.com>
Date: Mon, 19 Feb 2024 12:21:37 +0530
Subject: [PATCH 1/3] [OpenMP] [Flang] Fix Issue llvm#76121
Root cause: Segmentation fault is caused by null pointer dereference inside the __kmpc_fork_call_if function at https://github.com/llvm/llvm-project/blob/main/openmp/runtime/src/z_Linux_asm.S#L1186 . __kmpc_fork_call_if is missing case to handle argc=0 .
Fix: Added a check inside the __kmp_invoke_microtask function to handle the case when argc is 0.
---
openmp/runtime/src/z_Linux_asm.S | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/openmp/runtime/src/z_Linux_asm.S b/openmp/runtime/src/z_Linux_asm.S
index 14987c298fa5f9..b44d9fb316a05c 100644
--- a/openmp/runtime/src/z_Linux_asm.S
+++ b/openmp/runtime/src/z_Linux_asm.S
@@ -1150,6 +1150,9 @@ KMP_LABEL(kmp_invoke_pass_parms): // put 1st - 6th parms to pkfn in registers.
movq %rdi, %rbx // pkfn -> %rbx
leaq __gtid(%rbp), %rdi // >id -> %rdi (store 1st parm to pkfn)
leaq __tid(%rbp), %rsi // &tid -> %rsi (store 2nd parm to pkfn)
+ // Check if argc is 0
+ cmpq $0, %rax
+ je KMP_LABEL(kmp_no_args) // Jump ahead
movq %r8, %r11 // p_argv -> %r11
@@ -1195,6 +1198,7 @@ KMP_LABEL(kmp_1_exit):
cmovnsq (%r11), %rdx // p_argv[0] -> %rdx (store 3rd parm to pkfn)
#endif // KMP_MIC
+ KMP_LABEL(kmp_no_args):
call *%rbx // call (*pkfn)();
movq $1, %rax // move 1 into return register;
>From 4f4fae3f9d4e28602461c0ffe882d1ed84002e39 Mon Sep 17 00:00:00 2001
From: Singh <chasingh at amd.com>
Date: Sun, 3 Mar 2024 08:21:21 +0530
Subject: [PATCH 2/3] Create parallel_do_if_false.f90
---
flang/test/Runtime/parallel_do_if_false.f90 | 27 +++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 flang/test/Runtime/parallel_do_if_false.f90
diff --git a/flang/test/Runtime/parallel_do_if_false.f90 b/flang/test/Runtime/parallel_do_if_false.f90
new file mode 100644
index 00000000000000..f15a697eb5868d
--- /dev/null
+++ b/flang/test/Runtime/parallel_do_if_false.f90
@@ -0,0 +1,27 @@
+!RUN: %flang %s -o %t -fopenmp && %t | FileCheck %s
+PROGRAM parallel_do_if
+
+ USE OMP_LIB
+
+ INTEGER :: I
+
+ INTEGER :: N = 0
+
+ INTEGER, PARAMETER :: NI = 1
+
+ !$OMP PARALLEL DO IF(.false.)
+
+ DO I = 1, NI
+
+ IF (omp_in_parallel() .EQV. .false.) THEN
+ !CHECK: PASS
+ PRINT *, "PASS"
+ ELSE
+ PRINT *, "FAIL"
+
+ END IF
+
+ END DO
+ !$OMP END PARALLEL DO
+
+END PROGRAM
>From 22f085cb718cbede39d1e3e05fafb22ceafb40b9 Mon Sep 17 00:00:00 2001
From: chandan singh <chandankds at gmail.com>
Date: Mon, 11 Mar 2024 11:13:33 +0530
Subject: [PATCH 3/3] Added test for issue llvm#76121
---
openmp/runtime/test/lit.site.cfg.in | 1 +
.../runtime/test/parallel}/parallel_do_if_false.f90 | 0
2 files changed, 1 insertion(+)
rename {flang/test/Runtime => openmp/runtime/test/parallel}/parallel_do_if_false.f90 (100%)
diff --git a/openmp/runtime/test/lit.site.cfg.in b/openmp/runtime/test/lit.site.cfg.in
index d6c259280619be..c6d623ebd072c3 100644
--- a/openmp/runtime/test/lit.site.cfg.in
+++ b/openmp/runtime/test/lit.site.cfg.in
@@ -2,6 +2,7 @@
config.test_c_compiler = "@OPENMP_TEST_C_COMPILER@"
config.test_cxx_compiler = "@OPENMP_TEST_CXX_COMPILER@"
+config.test_fortran_compiler="@OPENMP_TEST_Fortran_COMPILER@"
config.test_compiler_features = @OPENMP_TEST_COMPILER_FEATURES@
config.test_compiler_has_omp_h = @OPENMP_TEST_COMPILER_HAS_OMP_H@
config.test_filecheck = "@OPENMP_FILECHECK_EXECUTABLE@"
diff --git a/flang/test/Runtime/parallel_do_if_false.f90 b/openmp/runtime/test/parallel/parallel_do_if_false.f90
similarity index 100%
rename from flang/test/Runtime/parallel_do_if_false.f90
rename to openmp/runtime/test/parallel/parallel_do_if_false.f90
More information about the Openmp-commits
mailing list