https://github.com/amitamd7 updated 
https://github.com/llvm/llvm-project/pull/181780

>From 4430ae24981bc22b779acb5a484c0e5a81562bb7 Mon Sep 17 00:00:00 2001
From: amtiwari <[email protected]>
Date: Tue, 17 Feb 2026 01:41:31 -0500
Subject: [PATCH 1/2] parsing_checks

---
 ...d_ptr_variable_count_and_stride_messages.c | 62 ++++++++++++++
 ...date_strided_ptr_variable_count_messages.c | 57 +++++++++++++
 ...ate_strided_ptr_variable_stride_messages.c | 64 ++++++++++++++
 ..._update_strided_struct_ptr_messages_from.c | 40 +++++++++
 ...et_update_strided_struct_ptr_messages_to.c | 40 +++++++++
 ...trided_struct_ptr_multiple_messages_from.c | 47 ++++++++++
 ..._strided_struct_ptr_multiple_messages_to.c | 47 ++++++++++
 ...strided_struct_ptr_partial_messages_from.c | 32 +++++++
 ...e_strided_struct_ptr_partial_messages_to.c | 32 +++++++
 ...truct_variable_count_and_stride_messages.c | 72 ++++++++++++++++
 ...pdate_variable_count_and_stride_messages.c | 85 +++++++++++++++++++
 11 files changed, 578 insertions(+)
 create mode 100644 
clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
 create mode 100644 
clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
 create mode 100644 
clang/test/OpenMP/target_update_variable_count_and_stride_messages.c

diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
new file mode 100644
index 0000000000000..932cd6b1c97bb
--- /dev/null
+++ 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
@@ -0,0 +1,62 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+int main(int argc, char **argv) {
+  int len = 16;
+  int count = 8;
+  int stride = 2;
+  int stride_large = 5;
+  double *data;
+  
+  // Valid strided array sections with both variable count and variable stride 
(FROM)
+  #pragma omp target update from(data[0:count:stride]) // OK - both variable
+  {}
+  
+  #pragma omp target update from(data[0:len/2:stride]) // OK - count 
expression, variable stride
+  {}
+  
+  #pragma omp target update from(data[0:count:stride_large]) // OK - variable 
count, different stride
+  {}
+  
+  #pragma omp target update from(data[1:len-2:stride]) // OK - with offset, 
count expression
+  {}
+  
+  #pragma omp target update from(data[0:count/2:stride*2]) // OK - both 
expressions
+  {}
+  
+  #pragma omp target update from(data[0:(len+1)/2:stride+1]) // OK - complex 
expressions
+  {}
+  
+  #pragma omp target update from(data[2:count-2:len/4]) // OK - all expressions
+  {}
+  
+  // Edge cases
+  int stride_one = 1;
+  #pragma omp target update from(data[0:count:stride_one]) // OK - variable 
count, stride=1
+  {}
+  
+  #pragma omp target update from(data[0:len/stride:stride]) // OK - count 
depends on stride
+  {}
+  
+  // Invalid compile-time constant strides with variable count
+  #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[0:len/2:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[1:count:-2]) // expected-error {{section 
stride is evaluated to a non-positive value -2}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Valid strided array sections with variable count and stride (TO)
+  #pragma omp target update to(data[0:count:stride]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:len/2:stride]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:count:stride*2]) // OK
+  {}
+  
+  // Invalid stride with TO
+  #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
new file mode 100644
index 0000000000000..23fba9c8bc84f
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
@@ -0,0 +1,57 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+int main(int argc, char **argv) {
+  int len = 16;
+  int count = 8;
+  int divisor = 2;
+  double *data;
+  
+  // Valid strided array sections with variable count expressions (FROM)
+  #pragma omp target update from(data[0:count:2]) // OK - variable count
+  {}
+  
+  #pragma omp target update from(data[0:len/2:2]) // OK - count expression
+  {}
+  
+  #pragma omp target update from(data[0:len-4:3]) // OK - count with 
subtraction
+  {}
+  
+  #pragma omp target update from(data[1:(len+1)/2:2]) // OK - complex count 
expression
+  {}
+  
+  #pragma omp target update from(data[0:count*2:3]) // OK - count 
multiplication
+  {}
+  
+  #pragma omp target update from(data[2:len%divisor:2]) // OK - count with 
modulo
+  {}
+  
+  // Variable count with stride = 1 (contiguous)
+  #pragma omp target update from(data[0:count]) // OK - variable count, 
implicit stride
+  {}
+  
+  #pragma omp target update from(data[0:len/divisor]) // OK - expression 
count, implicit stride
+  {}
+  
+  // Invalid stride expressions with variable count
+  #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[0:len/2:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[1:count:-2]) // expected-error {{section 
stride is evaluated to a non-positive value -2}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Valid strided array sections with variable count expressions (TO)
+  #pragma omp target update to(data[0:count:2]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:len/2:2]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:len-4:3]) // OK
+  {}
+  
+  // Invalid stride with TO
+  #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c 
b/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
new file mode 100644
index 0000000000000..3f85ed0c48d66
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
@@ -0,0 +1,64 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+int main(int argc, char **argv) {
+  int len = 16;
+  int stride = 2;
+  int stride_large = 5;
+  double *data;
+  
+  // Valid strided array sections with variable stride (FROM)
+  #pragma omp target update from(data[0:8:stride]) // OK - variable stride
+  {}
+  
+  #pragma omp target update from(data[0:4:stride_large]) // OK - different 
variable stride
+  {}
+  
+  #pragma omp target update from(data[1:6:stride]) // OK - with offset
+  {}
+  
+  #pragma omp target update from(data[0:5:stride+1]) // OK - stride expression
+  {}
+  
+  #pragma omp target update from(data[0:4:stride*2]) // OK - stride 
multiplication
+  {}
+  
+  #pragma omp target update from(data[2:3:len/4]) // OK - stride from 
expression
+  {}
+  
+  // Edge case: stride = 1 (should be contiguous, not non-contiguous)
+  int stride_one = 1;
+  #pragma omp target update from(data[0:8:stride_one]) // OK - stride=1 is 
contiguous
+  {}
+  
+  // Invalid variable stride expressions  
+  int zero_stride = 0;
+  int neg_stride = -1;
+  
+  // Note: These are runtime checks, so no compile-time error
+  #pragma omp target update from(data[0:8:zero_stride]) // OK at compile-time 
(runtime will fail)
+  {}
+  
+  #pragma omp target update from(data[0:4:neg_stride]) // OK at compile-time 
(runtime will fail)
+  {}
+  
+  // Compile-time constant invalid strides
+  #pragma omp target update from(data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[0:4:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Valid strided array sections with variable stride (TO)
+  #pragma omp target update to(data[0:8:stride]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:5:stride+1]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:4:stride*2]) // OK
+  {}
+  
+  // Invalid stride with TO
+  #pragma omp target update to(data[0:4:0]) // expected-error {{section stride 
is evaluated to a non-positive value 0}} expected-error {{expected at least one 
'to' clause or 'from' clause specified to '#pragma omp target update'}}
+  
+  return 0;
+}
diff --git a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
new file mode 100644
index 0000000000000..d86ce9e89766b
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+#define N 16
+typedef struct { 
+  double *data; 
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s;
+  s.len = N;
+  s.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Valid strided array sections with pointer member
+  #pragma omp target update from(s.data[0:4:2]) // OK
+  {}
+  
+  #pragma omp target update from(s.data[1:3:2]) // OK
+  {}
+  
+  // Missing stride (default = 1)
+  #pragma omp target update from(s.data[0:4]) // OK
+  {}
+  
+  // Invalid stride expressions
+  #pragma omp target update from(s.data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(s.data[0:4:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Missing colon 
+  #pragma omp target update from(s.data[0:4 2]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+  {}
+  
+  // Too many colons
+  #pragma omp target update from(s.data[0:4:2:1]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+  {}
+  
+  return 0;
+}
diff --git a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
new file mode 100644
index 0000000000000..012f484a6ae36
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+#define N 16
+typedef struct { 
+  double *data; 
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s;
+  s.len = N;
+  s.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Valid strided array sections with pointer member
+  #pragma omp target update to(s.data[0:4:2]) // OK
+  {}
+  
+  #pragma omp target update to(s.data[1:3:2]) // OK
+  {}
+  
+  // Missing stride (default = 1)
+  #pragma omp target update to(s.data[0:4]) // OK
+  {}
+  
+  // Invalid stride expressions
+  #pragma omp target update to(s.data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update to(s.data[0:4:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Missing colon 
+  #pragma omp target update to(s.data[0:4 2]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+  {}
+  
+  // Too many colons
+  #pragma omp target update to(s.data[0:4:2:1]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+  {}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
new file mode 100644
index 0000000000000..7020ccb77d231
--- /dev/null
+++ 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+#define N 20
+typedef struct { 
+  double *data; 
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s1, s2;
+  s1.len = N;
+  s1.data = (double *)__builtin_alloca(N * sizeof(double));
+  s2.len = N;
+  s2.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Multiple valid strided updates
+  #pragma omp target update from(s1.data[0:10:2], s2.data[0:7:3]) // OK
+  {}
+  
+  // Mixed: one with stride, one without
+  #pragma omp target update from(s1.data[0:N], s2.data[0:5:2]) // OK
+  {}
+  
+  int stride1 = 2;
+  int stride2 = 3;
+  
+  // Multiple with expression strides
+  #pragma omp target update from(s1.data[1:5:stride1], s2.data[0:4:stride2]) 
// OK
+  {}
+  
+  // One valid, one invalid
+  #pragma omp target update from(s1.data[0:5:2], s2.data[0:4:0]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
+  
+  #pragma omp target update from(s1.data[0:5:-1], s2.data[0:4:2]) // 
expected-error {{section stride is evaluated to a non-positive value -1}}
+  
+  #pragma omp target update from(s1.data[0:5:0], s2.data[0:4:1]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
+  
+  // Syntax errors
+  #pragma omp target update from(s1.data[0:5:2], s2.data[0:4 3]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
+  {}
+  
+  #pragma omp target update from(s1.data[0:5:2:3], s2.data[0:4:2]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
+  {}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
new file mode 100644
index 0000000000000..05278308ad173
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+#define N 20
+typedef struct { 
+  double *data; 
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s1, s2;
+  s1.len = N;
+  s1.data = (double *)__builtin_alloca(N * sizeof(double));
+  s2.len = N;
+  s2.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Multiple valid strided updates (to clause)
+  #pragma omp target update to(s1.data[0:10:2], s2.data[0:7:3]) // OK
+  {}
+  
+  // Mixed: one with stride, one without
+  #pragma omp target update to(s1.data[0:N], s2.data[0:5:2]) // OK
+  {}
+  
+  int stride1 = 2;
+  int stride2 = 3;
+  
+  // Multiple with expression strides
+  #pragma omp target update to(s1.data[1:5:stride1], s2.data[0:4:stride2]) // 
OK
+  {}
+  
+  // One valid, one invalid
+  #pragma omp target update to(s1.data[0:5:2], s2.data[0:4:0]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
+  
+  #pragma omp target update to(s1.data[0:5:-1], s2.data[0:4:2]) // 
expected-error {{section stride is evaluated to a non-positive value -1}}
+  
+  #pragma omp target update to(s1.data[0:5:0], s2.data[0:4:1]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
+  
+  // Syntax errors
+  #pragma omp target update to(s1.data[0:5:2], s2.data[0:4 3]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
+  {}
+  
+  #pragma omp target update to(s1.data[0:5:2:3], s2.data[0:4:2]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
+  {}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
new file mode 100644
index 0000000000000..4c835d3bef6f0
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// expected-no-diagnostics
+
+#define N 24
+typedef struct {
+  double *data;
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s; 
+  s.len = N;
+  s.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Valid partial strided updates with pointer member
+  #pragma omp target update from(s.data[0:2:10]) // OK - partial coverage
+  {}
+  
+  // Stride larger than length
+  #pragma omp target update from(s.data[0:2:20]) // OK
+  {}
+  
+  // Valid: complex expressions
+  int offset = 1;
+
+  // Runtime-dependent stride expressions
+  #pragma omp target update from(s.data[0:4:offset+1]) // OK
+  {}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
new file mode 100644
index 0000000000000..d62a6c640d0b3
--- /dev/null
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// expected-no-diagnostics
+
+#define N 24
+typedef struct {
+  double *data;
+  int len; 
+} T;
+
+int main(int argc, char **argv) {
+  T s; 
+  s.len = N;
+  s.data = (double *)__builtin_alloca(N * sizeof(double));
+  
+  // Valid partial strided updates with pointer member (to clause)
+  #pragma omp target update to(s.data[0:2:10]) // OK - partial coverage
+  {}
+  
+  // Stride larger than length
+  #pragma omp target update to(s.data[0:2:20]) // OK
+  {}
+  
+  // Valid: complex expressions
+  int offset = 1;
+
+  // Runtime-dependent stride expressions
+  #pragma omp target update to(s.data[0:4:offset+1]) // OK
+  {}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
 
b/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
new file mode 100644
index 0000000000000..70775d5c8322c
--- /dev/null
+++ 
b/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
@@ -0,0 +1,72 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+#define N 20
+typedef struct { 
+  double data[N]; 
+  int len;
+  int stride;
+} T;
+
+int main(int argc, char **argv) {
+  T s;
+  s.len = 16;
+  s.stride = 2;
+  int count = 8;
+  int ext_stride = 3;
+  
+  // Valid strided struct member array sections with variable count/stride 
(FROM)
+  #pragma omp target update from(s.data[0:s.len/2:2]) // OK - member count 
expression
+  {}
+  
+  #pragma omp target update from(s.data[0:count:s.stride]) // OK - external 
count, member stride
+  {}
+  
+  #pragma omp target update from(s.data[0:s.len:ext_stride]) // OK - member 
count, external stride
+  {}
+  
+  #pragma omp target update from(s.data[0:count:ext_stride]) // OK - both 
external
+  {}
+  
+  #pragma omp target update from(s.data[0:s.len/2:s.stride]) // OK - both from 
struct
+  {}
+  
+  #pragma omp target update from(s.data[1:(s.len-2)/2:s.stride]) // OK - 
complex count expression
+  {}
+  
+  #pragma omp target update from(s.data[0:count*2:s.stride+1]) // OK - 
expressions for both
+  {}
+  
+  // Edge cases
+  int stride_one = 1;
+  #pragma omp target update from(s.data[0:s.len:stride_one]) // OK - stride=1
+  {}
+  
+  #pragma omp target update from(s.data[0:s.len/s.stride:s.stride]) // OK - 
count depends on stride
+  {}
+  
+  // Invalid compile-time constant strides with variable count
+  #pragma omp target update from(s.data[0:s.len:0]) // expected-error 
{{section stride is evaluated to a non-positive value 0}} expected-error 
{{expected at least one 'to' clause or 'from' clause specified to '#pragma omp 
target update'}}
+  
+  #pragma omp target update from(s.data[0:count:-1]) // expected-error 
{{section stride is evaluated to a non-positive value -1}} expected-error 
{{expected at least one 'to' clause or 'from' clause specified to '#pragma omp 
target update'}}
+  
+  #pragma omp target update from(s.data[1:s.len/2:-2]) // expected-error 
{{section stride is evaluated to a non-positive value -2}} expected-error 
{{expected at least one 'to' clause or 'from' clause specified to '#pragma omp 
target update'}}
+  
+  // Valid strided struct member array sections with variable count and stride 
(TO)
+  #pragma omp target update to(s.data[0:s.len/2:2]) // OK
+  {}
+  
+  #pragma omp target update to(s.data[0:count:s.stride]) // OK
+  {}
+  
+  #pragma omp target update to(s.data[0:s.len:ext_stride]) // OK
+  {}
+  
+  #pragma omp target update to(s.data[0:count*2:s.stride+1]) // OK
+  {}
+  
+  // Invalid stride with TO
+  #pragma omp target update to(s.data[0:s.len:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  return 0;
+}
diff --git 
a/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c 
b/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c
new file mode 100644
index 0000000000000..0082539538a32
--- /dev/null
+++ b/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c
@@ -0,0 +1,85 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+int main(int argc, char **argv) {
+  int len = 16;
+  int count = 8;
+  int stride = 2;
+  int divisor = 2;
+  double data[100];
+  
+  // Valid strided array sections with variable count expressions (FROM)
+  #pragma omp target update from(data[0:count:2]) // OK - variable count
+  {}
+  
+  #pragma omp target update from(data[0:len/2:2]) // OK - count expression
+  {}
+  
+  #pragma omp target update from(data[0:len-4:3]) // OK - count with 
subtraction
+  {}
+  
+  #pragma omp target update from(data[1:(len+1)/2:2]) // OK - complex count 
expression
+  {}
+  
+  #pragma omp target update from(data[0:count*2:3]) // OK - count 
multiplication
+  {}
+  
+  #pragma omp target update from(data[2:len%divisor:2]) // OK - count with 
modulo
+  {}
+  
+  // Variable stride with constant/variable count
+  #pragma omp target update from(data[0:10:stride]) // OK - constant count, 
variable stride
+  {}
+  
+  #pragma omp target update from(data[0:count:stride]) // OK - both variable
+  {}
+  
+  #pragma omp target update from(data[0:len/2:stride]) // OK - count 
expression, variable stride
+  {}
+  
+  #pragma omp target update from(data[0:count:stride*2]) // OK - variable 
count, stride expression
+  {}
+  
+  #pragma omp target update from(data[0:len/divisor:stride+1]) // OK - both 
expressions
+  {}
+  
+  // Variable count with stride = 1 (contiguous)
+  #pragma omp target update from(data[0:count]) // OK - variable count, 
implicit stride
+  {}
+  
+  #pragma omp target update from(data[0:len/divisor]) // OK - expression 
count, implicit stride
+  {}
+  
+  // Edge cases
+  int stride_one = 1;
+  #pragma omp target update from(data[0:len:stride_one]) // OK - stride=1 
variable
+  {}
+  
+  #pragma omp target update from(data[0:len/stride:stride]) // OK - count 
depends on stride
+  {}
+  
+  // Invalid stride expressions with variable count
+  #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[0:len/2:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  #pragma omp target update from(data[1:count:-2]) // expected-error {{section 
stride is evaluated to a non-positive value -2}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  // Valid strided array sections with variable count expressions (TO)
+  #pragma omp target update to(data[0:count:2]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:len/2:stride]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:count:stride]) // OK
+  {}
+  
+  #pragma omp target update to(data[0:len/divisor:stride+1]) // OK
+  {}
+  
+  // Invalid stride with TO
+  #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
+  
+  return 0;
+}

>From 9f6c4b92d3aed82c9890a7e9a5ccf0ddbd84e83a Mon Sep 17 00:00:00 2001
From: amtiwari <[email protected]>
Date: Thu, 19 Feb 2026 12:04:48 -0500
Subject: [PATCH 2/2] revised

---
 ...d_ptr_variable_count_and_stride_messages.c | 27 +--------------
 ...date_strided_ptr_variable_count_messages.c | 11 ------
 ...ate_strided_ptr_variable_stride_messages.c | 25 +-------------
 ..._update_strided_struct_ptr_messages_from.c |  5 ---
 ...et_update_strided_struct_ptr_messages_to.c |  5 ---
 ...trided_struct_ptr_multiple_messages_from.c |  5 ---
 ..._strided_struct_ptr_multiple_messages_to.c |  5 ---
 ...strided_struct_ptr_partial_messages_from.c |  8 +----
 ...e_strided_struct_ptr_partial_messages_to.c |  8 +----
 ...truct_variable_count_and_stride_messages.c | 17 ----------
 ...pdate_variable_count_and_stride_messages.c | 34 +------------------
 11 files changed, 5 insertions(+), 145 deletions(-)

diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
index 932cd6b1c97bb..61d40462ba8e9 100644
--- 
a/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
+++ 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_and_stride_messages.c
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// expected-no-diagnostics
 
 int main(int argc, char **argv) {
   int len = 16;
@@ -10,53 +11,27 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with both variable count and variable stride 
(FROM)
   #pragma omp target update from(data[0:count:stride]) // OK - both variable
-  {}
   
   #pragma omp target update from(data[0:len/2:stride]) // OK - count 
expression, variable stride
-  {}
   
   #pragma omp target update from(data[0:count:stride_large]) // OK - variable 
count, different stride
-  {}
   
   #pragma omp target update from(data[1:len-2:stride]) // OK - with offset, 
count expression
-  {}
   
   #pragma omp target update from(data[0:count/2:stride*2]) // OK - both 
expressions
-  {}
   
   #pragma omp target update from(data[0:(len+1)/2:stride+1]) // OK - complex 
expressions
-  {}
   
   #pragma omp target update from(data[2:count-2:len/4]) // OK - all expressions
-  {}
-  
-  // Edge cases
-  int stride_one = 1;
-  #pragma omp target update from(data[0:count:stride_one]) // OK - variable 
count, stride=1
-  {}
   
   #pragma omp target update from(data[0:len/stride:stride]) // OK - count 
depends on stride
-  {}
-  
-  // Invalid compile-time constant strides with variable count
-  #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
-  
-  #pragma omp target update from(data[0:len/2:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
-  
-  #pragma omp target update from(data[1:count:-2]) // expected-error {{section 
stride is evaluated to a non-positive value -2}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
   
   // Valid strided array sections with variable count and stride (TO)
   #pragma omp target update to(data[0:count:stride]) // OK
-  {}
   
   #pragma omp target update to(data[0:len/2:stride]) // OK
-  {}
   
   #pragma omp target update to(data[0:count:stride*2]) // OK
-  {}
-  
-  // Invalid stride with TO
-  #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c 
b/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
index 23fba9c8bc84f..e00dfb77a8245 100644
--- a/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
+++ b/clang/test/OpenMP/target_update_strided_ptr_variable_count_messages.c
@@ -9,29 +9,21 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with variable count expressions (FROM)
   #pragma omp target update from(data[0:count:2]) // OK - variable count
-  {}
   
   #pragma omp target update from(data[0:len/2:2]) // OK - count expression
-  {}
   
   #pragma omp target update from(data[0:len-4:3]) // OK - count with 
subtraction
-  {}
   
   #pragma omp target update from(data[1:(len+1)/2:2]) // OK - complex count 
expression
-  {}
   
   #pragma omp target update from(data[0:count*2:3]) // OK - count 
multiplication
-  {}
   
   #pragma omp target update from(data[2:len%divisor:2]) // OK - count with 
modulo
-  {}
   
   // Variable count with stride = 1 (contiguous)
   #pragma omp target update from(data[0:count]) // OK - variable count, 
implicit stride
-  {}
   
   #pragma omp target update from(data[0:len/divisor]) // OK - expression 
count, implicit stride
-  {}
   
   // Invalid stride expressions with variable count
   #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
@@ -42,13 +34,10 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with variable count expressions (TO)
   #pragma omp target update to(data[0:count:2]) // OK
-  {}
   
   #pragma omp target update to(data[0:len/2:2]) // OK
-  {}
   
   #pragma omp target update to(data[0:len-4:3]) // OK
-  {}
   
   // Invalid stride with TO
   #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
diff --git 
a/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c 
b/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
index 3f85ed0c48d66..41dd89c362915 100644
--- a/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
+++ b/clang/test/OpenMP/target_update_strided_ptr_variable_stride_messages.c
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// expected-no-diagnostics
 
 int main(int argc, char **argv) {
   int len = 16;
@@ -9,27 +10,16 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with variable stride (FROM)
   #pragma omp target update from(data[0:8:stride]) // OK - variable stride
-  {}
   
   #pragma omp target update from(data[0:4:stride_large]) // OK - different 
variable stride
-  {}
   
   #pragma omp target update from(data[1:6:stride]) // OK - with offset
-  {}
   
   #pragma omp target update from(data[0:5:stride+1]) // OK - stride expression
-  {}
   
   #pragma omp target update from(data[0:4:stride*2]) // OK - stride 
multiplication
-  {}
   
   #pragma omp target update from(data[2:3:len/4]) // OK - stride from 
expression
-  {}
-  
-  // Edge case: stride = 1 (should be contiguous, not non-contiguous)
-  int stride_one = 1;
-  #pragma omp target update from(data[0:8:stride_one]) // OK - stride=1 is 
contiguous
-  {}
   
   // Invalid variable stride expressions  
   int zero_stride = 0;
@@ -37,28 +27,15 @@ int main(int argc, char **argv) {
   
   // Note: These are runtime checks, so no compile-time error
   #pragma omp target update from(data[0:8:zero_stride]) // OK at compile-time 
(runtime will fail)
-  {}
   
   #pragma omp target update from(data[0:4:neg_stride]) // OK at compile-time 
(runtime will fail)
-  {}
-  
-  // Compile-time constant invalid strides
-  #pragma omp target update from(data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
-  
-  #pragma omp target update from(data[0:4:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
   
   // Valid strided array sections with variable stride (TO)
   #pragma omp target update to(data[0:8:stride]) // OK
-  {}
   
   #pragma omp target update to(data[0:5:stride+1]) // OK
-  {}
   
   #pragma omp target update to(data[0:4:stride*2]) // OK
-  {}
-  
-  // Invalid stride with TO
-  #pragma omp target update to(data[0:4:0]) // expected-error {{section stride 
is evaluated to a non-positive value 0}} expected-error {{expected at least one 
'to' clause or 'from' clause specified to '#pragma omp target update'}}
   
   return 0;
 }
diff --git a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
index d86ce9e89766b..5e301f384498b 100644
--- a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_from.c
@@ -14,14 +14,11 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with pointer member
   #pragma omp target update from(s.data[0:4:2]) // OK
-  {}
   
   #pragma omp target update from(s.data[1:3:2]) // OK
-  {}
   
   // Missing stride (default = 1)
   #pragma omp target update from(s.data[0:4]) // OK
-  {}
   
   // Invalid stride expressions
   #pragma omp target update from(s.data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
@@ -30,11 +27,9 @@ int main(int argc, char **argv) {
   
   // Missing colon 
   #pragma omp target update from(s.data[0:4 2]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
-  {}
   
   // Too many colons
   #pragma omp target update from(s.data[0:4:2:1]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
-  {}
   
   return 0;
 }
diff --git a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
index 012f484a6ae36..648ba6b7e675d 100644
--- a/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_messages_to.c
@@ -14,14 +14,11 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with pointer member
   #pragma omp target update to(s.data[0:4:2]) // OK
-  {}
   
   #pragma omp target update to(s.data[1:3:2]) // OK
-  {}
   
   // Missing stride (default = 1)
   #pragma omp target update to(s.data[0:4]) // OK
-  {}
   
   // Invalid stride expressions
   #pragma omp target update to(s.data[0:4:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
@@ -30,11 +27,9 @@ int main(int argc, char **argv) {
   
   // Missing colon 
   #pragma omp target update to(s.data[0:4 2]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
-  {}
   
   // Too many colons
   #pragma omp target update to(s.data[0:4:2:1]) // expected-error {{expected 
']'}} expected-note {{to match this '['}} expected-error {{expected at least 
one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
-  {}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
index 7020ccb77d231..6aacc1f001b3a 100644
--- 
a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
+++ 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_from.c
@@ -16,18 +16,15 @@ int main(int argc, char **argv) {
   
   // Multiple valid strided updates
   #pragma omp target update from(s1.data[0:10:2], s2.data[0:7:3]) // OK
-  {}
   
   // Mixed: one with stride, one without
   #pragma omp target update from(s1.data[0:N], s2.data[0:5:2]) // OK
-  {}
   
   int stride1 = 2;
   int stride2 = 3;
   
   // Multiple with expression strides
   #pragma omp target update from(s1.data[1:5:stride1], s2.data[0:4:stride2]) 
// OK
-  {}
   
   // One valid, one invalid
   #pragma omp target update from(s1.data[0:5:2], s2.data[0:4:0]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
@@ -38,10 +35,8 @@ int main(int argc, char **argv) {
   
   // Syntax errors
   #pragma omp target update from(s1.data[0:5:2], s2.data[0:4 3]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
-  {}
   
   #pragma omp target update from(s1.data[0:5:2:3], s2.data[0:4:2]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
-  {}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
index 05278308ad173..ea6f029c70320 100644
--- a/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_multiple_messages_to.c
@@ -16,18 +16,15 @@ int main(int argc, char **argv) {
   
   // Multiple valid strided updates (to clause)
   #pragma omp target update to(s1.data[0:10:2], s2.data[0:7:3]) // OK
-  {}
   
   // Mixed: one with stride, one without
   #pragma omp target update to(s1.data[0:N], s2.data[0:5:2]) // OK
-  {}
   
   int stride1 = 2;
   int stride2 = 3;
   
   // Multiple with expression strides
   #pragma omp target update to(s1.data[1:5:stride1], s2.data[0:4:stride2]) // 
OK
-  {}
   
   // One valid, one invalid
   #pragma omp target update to(s1.data[0:5:2], s2.data[0:4:0]) // 
expected-error {{section stride is evaluated to a non-positive value 0}}
@@ -38,10 +35,8 @@ int main(int argc, char **argv) {
   
   // Syntax errors
   #pragma omp target update to(s1.data[0:5:2], s2.data[0:4 3]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
-  {}
   
   #pragma omp target update to(s1.data[0:5:2:3], s2.data[0:4:2]) // 
expected-error {{expected ']'}} expected-note {{to match this '['}}
-  {}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
index 4c835d3bef6f0..c2a1eeb256117 100644
--- a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_from.c
@@ -14,19 +14,13 @@ int main(int argc, char **argv) {
   s.data = (double *)__builtin_alloca(N * sizeof(double));
   
   // Valid partial strided updates with pointer member
-  #pragma omp target update from(s.data[0:2:10]) // OK - partial coverage
-  {}
-  
-  // Stride larger than length
-  #pragma omp target update from(s.data[0:2:20]) // OK
-  {}
+  #pragma omp target update from(s.data[0:2:10]) // OK - partial coverage 
(stride > length)
   
   // Valid: complex expressions
   int offset = 1;
 
   // Runtime-dependent stride expressions
   #pragma omp target update from(s.data[0:4:offset+1]) // OK
-  {}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c 
b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
index d62a6c640d0b3..699082b2faf53 100644
--- a/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
+++ b/clang/test/OpenMP/target_update_strided_struct_ptr_partial_messages_to.c
@@ -14,19 +14,13 @@ int main(int argc, char **argv) {
   s.data = (double *)__builtin_alloca(N * sizeof(double));
   
   // Valid partial strided updates with pointer member (to clause)
-  #pragma omp target update to(s.data[0:2:10]) // OK - partial coverage
-  {}
-  
-  // Stride larger than length
-  #pragma omp target update to(s.data[0:2:20]) // OK
-  {}
+  #pragma omp target update to(s.data[0:2:10]) // OK - partial coverage 
(stride > length)
   
   // Valid: complex expressions
   int offset = 1;
 
   // Runtime-dependent stride expressions
   #pragma omp target update to(s.data[0:4:offset+1]) // OK
-  {}
   
   return 0;
 }
diff --git 
a/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
 
b/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
index 70775d5c8322c..8658ec06ce7c1 100644
--- 
a/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
+++ 
b/clang/test/OpenMP/target_update_strided_struct_variable_count_and_stride_messages.c
@@ -17,33 +17,20 @@ int main(int argc, char **argv) {
   
   // Valid strided struct member array sections with variable count/stride 
(FROM)
   #pragma omp target update from(s.data[0:s.len/2:2]) // OK - member count 
expression
-  {}
   
   #pragma omp target update from(s.data[0:count:s.stride]) // OK - external 
count, member stride
-  {}
   
   #pragma omp target update from(s.data[0:s.len:ext_stride]) // OK - member 
count, external stride
-  {}
   
   #pragma omp target update from(s.data[0:count:ext_stride]) // OK - both 
external
-  {}
   
   #pragma omp target update from(s.data[0:s.len/2:s.stride]) // OK - both from 
struct
-  {}
   
   #pragma omp target update from(s.data[1:(s.len-2)/2:s.stride]) // OK - 
complex count expression
-  {}
   
   #pragma omp target update from(s.data[0:count*2:s.stride+1]) // OK - 
expressions for both
-  {}
-  
-  // Edge cases
-  int stride_one = 1;
-  #pragma omp target update from(s.data[0:s.len:stride_one]) // OK - stride=1
-  {}
   
   #pragma omp target update from(s.data[0:s.len/s.stride:s.stride]) // OK - 
count depends on stride
-  {}
   
   // Invalid compile-time constant strides with variable count
   #pragma omp target update from(s.data[0:s.len:0]) // expected-error 
{{section stride is evaluated to a non-positive value 0}} expected-error 
{{expected at least one 'to' clause or 'from' clause specified to '#pragma omp 
target update'}}
@@ -54,16 +41,12 @@ int main(int argc, char **argv) {
   
   // Valid strided struct member array sections with variable count and stride 
(TO)
   #pragma omp target update to(s.data[0:s.len/2:2]) // OK
-  {}
   
   #pragma omp target update to(s.data[0:count:s.stride]) // OK
-  {}
   
   #pragma omp target update to(s.data[0:s.len:ext_stride]) // OK
-  {}
   
   #pragma omp target update to(s.data[0:count*2:s.stride+1]) // OK
-  {}
   
   // Invalid stride with TO
   #pragma omp target update to(s.data[0:s.len:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
diff --git 
a/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c 
b/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c
index 0082539538a32..5d8c51584bcf1 100644
--- a/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c
+++ b/clang/test/OpenMP/target_update_variable_count_and_stride_messages.c
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// expected-no-diagnostics
 
 int main(int argc, char **argv) {
   int len = 16;
@@ -10,76 +11,43 @@ int main(int argc, char **argv) {
   
   // Valid strided array sections with variable count expressions (FROM)
   #pragma omp target update from(data[0:count:2]) // OK - variable count
-  {}
   
   #pragma omp target update from(data[0:len/2:2]) // OK - count expression
-  {}
   
   #pragma omp target update from(data[0:len-4:3]) // OK - count with 
subtraction
-  {}
   
   #pragma omp target update from(data[1:(len+1)/2:2]) // OK - complex count 
expression
-  {}
   
   #pragma omp target update from(data[0:count*2:3]) // OK - count 
multiplication
-  {}
   
   #pragma omp target update from(data[2:len%divisor:2]) // OK - count with 
modulo
-  {}
   
   // Variable stride with constant/variable count
   #pragma omp target update from(data[0:10:stride]) // OK - constant count, 
variable stride
-  {}
   
   #pragma omp target update from(data[0:count:stride]) // OK - both variable
-  {}
   
   #pragma omp target update from(data[0:len/2:stride]) // OK - count 
expression, variable stride
-  {}
   
   #pragma omp target update from(data[0:count:stride*2]) // OK - variable 
count, stride expression
-  {}
   
   #pragma omp target update from(data[0:len/divisor:stride+1]) // OK - both 
expressions
-  {}
   
   // Variable count with stride = 1 (contiguous)
   #pragma omp target update from(data[0:count]) // OK - variable count, 
implicit stride
-  {}
   
   #pragma omp target update from(data[0:len/divisor]) // OK - expression 
count, implicit stride
-  {}
-  
-  // Edge cases
-  int stride_one = 1;
-  #pragma omp target update from(data[0:len:stride_one]) // OK - stride=1 
variable
-  {}
   
   #pragma omp target update from(data[0:len/stride:stride]) // OK - count 
depends on stride
-  {}
-  
-  // Invalid stride expressions with variable count
-  #pragma omp target update from(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
-  
-  #pragma omp target update from(data[0:len/2:-1]) // expected-error {{section 
stride is evaluated to a non-positive value -1}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
-  
-  #pragma omp target update from(data[1:count:-2]) // expected-error {{section 
stride is evaluated to a non-positive value -2}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
   
   // Valid strided array sections with variable count expressions (TO)
   #pragma omp target update to(data[0:count:2]) // OK
-  {}
   
   #pragma omp target update to(data[0:len/2:stride]) // OK
-  {}
   
   #pragma omp target update to(data[0:count:stride]) // OK
-  {}
   
   #pragma omp target update to(data[0:len/divisor:stride+1]) // OK
-  {}
-  
-  // Invalid stride with TO
-  #pragma omp target update to(data[0:count:0]) // expected-error {{section 
stride is evaluated to a non-positive value 0}} expected-error {{expected at 
least one 'to' clause or 'from' clause specified to '#pragma omp target 
update'}}
   
   return 0;
 }

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

Reply via email to