[PATCH] D157933: [OpenMP 5.1] Parsing and Sema support for `scope` construct

2023-08-22 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

In D157933#4591627 , @ABataev wrote:

> Could you also add the nesting tests for outer scope directive? Currently it 
> tests only for inner

Added. Please take a look.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157933/new/

https://reviews.llvm.org/D157933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157933: [OpenMP 5.1] Parsing and Sema support for `scope` construct

2023-08-15 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 550521.
mdfazlay added a comment.

Updated nesting of  regions checks.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157933/new/

https://reviews.llvm.org/D157933

Files:
  clang/include/clang-c/Index.h
  clang/include/clang/AST/RecursiveASTVisitor.h
  clang/include/clang/AST/StmtOpenMP.h
  clang/include/clang/Basic/StmtNodes.td
  clang/include/clang/Sema/Sema.h
  clang/include/clang/Serialization/ASTBitCodes.h
  clang/lib/AST/StmtOpenMP.cpp
  clang/lib/AST/StmtPrinter.cpp
  clang/lib/AST/StmtProfile.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/CodeGen/CGStmt.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaExceptionSpec.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReaderStmt.cpp
  clang/lib/Serialization/ASTWriterStmt.cpp
  clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
  clang/test/OpenMP/nesting_of_regions.cpp
  clang/test/OpenMP/scope_ast_print.cpp
  clang/test/OpenMP/scope_messages.cpp
  clang/tools/libclang/CIndex.cpp
  clang/tools/libclang/CXCursor.cpp
  llvm/include/llvm/Frontend/OpenMP/OMP.td

Index: llvm/include/llvm/Frontend/OpenMP/OMP.td
===
--- llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -1979,6 +1979,15 @@
 def OMP_EndAssumes : Directive<"end assumes"> {}
 def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {}
 def OMP_EndDeclareVariant : Directive<"end declare variant"> {}
+def OMP_scope : Directive<"scope"> {
+  let allowedClauses = [
+VersionedClause,
+VersionedClause,
+  ];
+  let allowedOnceClauses = [
+VersionedClause
+  ];
+}
 def OMP_ParallelWorkshare : Directive<"parallel workshare"> {
   let allowedClauses = [
 VersionedClause,
Index: clang/tools/libclang/CXCursor.cpp
===
--- clang/tools/libclang/CXCursor.cpp
+++ clang/tools/libclang/CXCursor.cpp
@@ -680,6 +680,9 @@
   case Stmt::OMPSectionDirectiveClass:
 K = CXCursor_OMPSectionDirective;
 break;
+  case Stmt::OMPScopeDirectiveClass:
+K = CXCursor_OMPScopeDirective;
+break;
   case Stmt::OMPSingleDirectiveClass:
 K = CXCursor_OMPSingleDirective;
 break;
Index: clang/tools/libclang/CIndex.cpp
===
--- clang/tools/libclang/CIndex.cpp
+++ clang/tools/libclang/CIndex.cpp
@@ -5889,6 +5889,8 @@
 return cxstring::createRef("OMPSectionsDirective");
   case CXCursor_OMPSectionDirective:
 return cxstring::createRef("OMPSectionDirective");
+  case CXCursor_OMPScopeDirective:
+return cxstring::createRef("OMPScopeDirective");
   case CXCursor_OMPSingleDirective:
 return cxstring::createRef("OMPSingleDirective");
   case CXCursor_OMPMasterDirective:
Index: clang/test/OpenMP/scope_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/scope_messages.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 %s -verify=expected,omp51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 %s -verify=expected,omp51
+
+void test1()
+{
+  int var1;
+  int var2;
+  int var3 = 1;
+
+  // expected-error@+1 {{directive '#pragma omp scope' cannot contain more than one 'nowait' clause}} //omp51-error@+1{{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp scope'}}
+  #pragma omp scope private(var1) firstprivate(var3) nowait nowait
+  { var1 = 123; ++var2; var3 = 2;}
+}
Index: clang/test/OpenMP/scope_ast_print.cpp
===
--- /dev/null
+++ clang/test/OpenMP/scope_ast_print.cpp
@@ -0,0 +1,88 @@
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu\
+//RUN:   -fopenmp -fopenmp-version=51 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses   \
+//RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu\
+//RUN:   -fopenmp -fopenmp-version=51 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses   \
+//RUN:   -ast-dump %s | FileCheck %s --check-prefix=DUMP
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu\
+//RUN:   -fopenmp -fopenmp-version=51 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses   \
+//RUN:   -emit-pch -o %t %s
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu\
+//RUN:   -fopenmp -fopenmp-version=51 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses   \
+//RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple 

[PATCH] D157933: [OpenMP 5.1] Parsing and Sema support for `scope` construct

2023-08-14 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

In D157933#4586816 , @ABataev wrote:

> Need to add the tests (and the checks, if required) for the nesting of the 
> regions

I think I have the nesting of regions checks in //scope_messages.cpp//. Do you 
prefer to have those checks in //nesting_of_regions.cpp// file?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157933/new/

https://reviews.llvm.org/D157933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157933: [OpenMP 5.1] Parsing and Sema support for `scope` construct

2023-08-14 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay created this revision.
mdfazlay added reviewers: ABataev, jyu2, mikerice.
Herald added subscribers: steakhal, martong, arphaman, guansong, yaxunl.
Herald added a reviewer: NoQ.
Herald added a project: All.
mdfazlay requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: llvm-commits, cfe-commits, jplehr, sstefan1.
Herald added projects: clang, LLVM.

//#pragma omp scope [clause[ [,] clause] ... ]//
structured-block

where clause is one of the following:

private(list)
reduction([reduction-modifier ,] reduction-identifier : list)
nowait

Reference:
(1) OpenMP 5.1 Specification - Section 2.9 (Page 106)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D157933

Files:
  clang/include/clang-c/Index.h
  clang/include/clang/AST/RecursiveASTVisitor.h
  clang/include/clang/AST/StmtOpenMP.h
  clang/include/clang/Basic/StmtNodes.td
  clang/include/clang/Sema/Sema.h
  clang/include/clang/Serialization/ASTBitCodes.h
  clang/lib/AST/StmtOpenMP.cpp
  clang/lib/AST/StmtPrinter.cpp
  clang/lib/AST/StmtProfile.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/CodeGen/CGStmt.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaExceptionSpec.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReaderStmt.cpp
  clang/lib/Serialization/ASTWriterStmt.cpp
  clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
  clang/test/OpenMP/scope_ast_print.cpp
  clang/test/OpenMP/scope_messages.cpp
  clang/tools/libclang/CIndex.cpp
  clang/tools/libclang/CXCursor.cpp
  llvm/include/llvm/Frontend/OpenMP/OMP.td

Index: llvm/include/llvm/Frontend/OpenMP/OMP.td
===
--- llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -1979,6 +1979,15 @@
 def OMP_EndAssumes : Directive<"end assumes"> {}
 def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {}
 def OMP_EndDeclareVariant : Directive<"end declare variant"> {}
+def OMP_scope : Directive<"scope"> {
+  let allowedClauses = [
+VersionedClause,
+VersionedClause,
+  ];
+  let allowedOnceClauses = [
+VersionedClause
+  ];
+}
 def OMP_ParallelWorkshare : Directive<"parallel workshare"> {
   let allowedClauses = [
 VersionedClause,
Index: clang/tools/libclang/CXCursor.cpp
===
--- clang/tools/libclang/CXCursor.cpp
+++ clang/tools/libclang/CXCursor.cpp
@@ -680,6 +680,9 @@
   case Stmt::OMPSectionDirectiveClass:
 K = CXCursor_OMPSectionDirective;
 break;
+  case Stmt::OMPScopeDirectiveClass:
+K = CXCursor_OMPScopeDirective;
+break;
   case Stmt::OMPSingleDirectiveClass:
 K = CXCursor_OMPSingleDirective;
 break;
Index: clang/tools/libclang/CIndex.cpp
===
--- clang/tools/libclang/CIndex.cpp
+++ clang/tools/libclang/CIndex.cpp
@@ -5889,6 +5889,8 @@
 return cxstring::createRef("OMPSectionsDirective");
   case CXCursor_OMPSectionDirective:
 return cxstring::createRef("OMPSectionDirective");
+  case CXCursor_OMPScopeDirective:
+return cxstring::createRef("OMPScopeDirective");
   case CXCursor_OMPSingleDirective:
 return cxstring::createRef("OMPSingleDirective");
   case CXCursor_OMPMasterDirective:
Index: clang/test/OpenMP/scope_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/scope_messages.cpp
@@ -0,0 +1,192 @@
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 %s -verify=expected,omp51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 %s -verify=expected,omp51
+
+void test1()
+{
+  int var1;
+  int var2;
+  int var3 = 1;
+
+  // expected-error@+1 {{directive '#pragma omp scope' cannot contain more than one 'nowait' clause}} //omp51-error@+1{{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp scope'}}
+  #pragma omp scope private(var1) firstprivate(var3) nowait nowait
+  { var1 = 123; ++var2; var3 = 2;}
+}
+
+void bar();
+
+void test2() {
+#pragma omp for
+  for (int i = 0; i < 10; ++i) {
+#pragma omp scope // expected-error {{region cannot be closely nested inside 'for' region}}
+bar();
+  }
+
+#pragma omp for simd
+  for (int i = 0; i < 10; ++i) {
+#pragma omp scope // expected-error {{OpenMP constructs may not be nested inside a simd region}}
+bar();
+  }
+
+#pragma omp sections
+  {
+#pragma omp scope // expected-error {{region cannot be closely nested inside 'sections' region}}
+bar();
+  }
+
+#pragma omp sections
+  {
+#pragma omp section
+{
+#pragma omp scope // expected-error {{region cannot be closely nested inside 'section' region}}
+  bar();
+}
+  }
+
+#pragma omp single
+  {
+#pragma omp scope // expected-error {{region cannot be closely nested inside 'single' region}}
+bar();
+  }
+
+#pragma omp master
+  {
+#pragma omp scope // expected-error {{region cannot be closely nested inside 'master' 

[PATCH] D155635: [OpenMP] [Reduction] Allow PLUS (+) operator on reduction clauses in OMP > 52

2023-07-20 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

In D155635#4512243 , @ABataev wrote:

> In D155635#4512188 , @mdfazlay 
> wrote:
>
>> In D155635#4512183 , @ABataev 
>> wrote:
>>
>>> Tests?
>>
>> I think I need to use `-fopenmp-version=60` to test this revision. As OMP 
>> 6.0 is not official yet, am I allowed to use `-fopenmp-version=60` in my LIT 
>> test?
>
> Yes

I have added a few LIT tests.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155635/new/

https://reviews.llvm.org/D155635

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D155635: [OpenMP] [Reduction] Allow PLUS (+) operator on reduction clauses in OMP > 52

2023-07-18 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

In D155635#4512183 , @ABataev wrote:

> Tests?

I think I need to use `-fopenmp-version=60` to test this revision. As OMP 6.0 
is not official yet, am I allowed to use `-fopenmp-version=60` in my LIT test?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155635/new/

https://reviews.llvm.org/D155635

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D155635: [OpenMP] [Reduction] Allow PLUS (+) operator on reduction clauses in OMP > 52

2023-07-18 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay created this revision.
Herald added subscribers: sunshaoce, guansong, yaxunl.
Herald added a project: All.
mdfazlay requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: cfe-commits, jplehr, sstefan1.
Herald added a project: clang.

Currently, clang gives an incorrect reduction identifier error for the PLUS
operator for OpenMP version > 52. But, PLUS operator is allowed in OpenMP
version > 52. This revision fixes this issue and also modified the error
messages to show the correct expected operators in the message based on the 
OpenMP
version used (prior to OMP 6.0 and since OMP 6.0).

**Test Src:**

  void foo() {
   int a = 0 ;
#pragma omp parallel reduction(+:a)
   ;
 #pragma omp parallel reduction(-:a)
   ;
   }

**Before this revision:**

  $ clang -fopenmp -fopenmp-version=60 test.c -c
  test.c:3:34: error: incorrect reduction identifier, expected one of '+', '-', 
'*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 
'int'
3 |   #pragma omp parallel reduction(+:a)
  |  ^
  test.c:5:34: error: incorrect reduction identifier, expected one of '+', '-', 
'*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 
'int'
5 |   #pragma omp parallel reduction(-:a)
  |  ^
  2 errors generated.

**With this revision:**

  $  clang -fopenmp -fopenmp-version=60 test.c -c
  test.c:5:34: error: incorrect reduction identifier, expected one of '+', '*', 
'&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'int'
  5 |   #pragma omp parallel reduction(-:a)
|  ^


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D155635

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/Sema/SemaOpenMP.cpp


Index: clang/lib/Sema/SemaOpenMP.cpp
===
--- clang/lib/Sema/SemaOpenMP.cpp
+++ clang/lib/Sema/SemaOpenMP.cpp
@@ -19169,6 +19169,8 @@
   // operators: +, -, *, &, |, ^, && and ||
   switch (OOK) {
   case OO_Plus:
+BOK = BO_Add;
+break;
   case OO_Minus:
 // Minus(-) operator is not supported in TR11 (OpenMP 6.0). Setting BOK to
 // BO_Comma will automatically diagnose it for OpenMP > 52 as not allowed
@@ -19418,9 +19420,14 @@
 }
 if (BOK == BO_Comma && DeclareReductionRef.isUnset()) {
   // Not allowed reduction identifier is found.
-  S.Diag(ReductionId.getBeginLoc(),
- diag::err_omp_unknown_reduction_identifier)
-  << Type << ReductionIdRange;
+  if (S.LangOpts.OpenMP > 52)
+S.Diag(ReductionId.getBeginLoc(),
+   diag::err_omp_unknown_reduction_identifier_since_omp_6_0)
+<< Type << ReductionIdRange;
+  else
+S.Diag(ReductionId.getBeginLoc(),
+   diag::err_omp_unknown_reduction_identifier_prior_omp_6_0)
+<< Type << ReductionIdRange;
   continue;
 }
 
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -10679,9 +10679,12 @@
 def warn_omp_loop_64_bit_var : Warning<
   "OpenMP loop iteration variable cannot have more than 64 bits size and will 
be narrowed">,
   InGroup;
-def err_omp_unknown_reduction_identifier : Error<
+def err_omp_unknown_reduction_identifier_prior_omp_6_0 : Error<
   "incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', 
'^', "
   "'&&', '||', 'min' or 'max' or declare reduction for type %0">;
+def err_omp_unknown_reduction_identifier_since_omp_6_0 : Error<
+  "incorrect reduction identifier, expected one of '+', '*', '&', '|', '^', "
+  "'&&', '||', 'min' or 'max' or declare reduction for type %0">;
 def err_omp_not_resolved_reduction_identifier : Error<
   "unable to resolve declare reduction construct for type %0">;
 def err_omp_reduction_ref_type_arg : Error<


Index: clang/lib/Sema/SemaOpenMP.cpp
===
--- clang/lib/Sema/SemaOpenMP.cpp
+++ clang/lib/Sema/SemaOpenMP.cpp
@@ -19169,6 +19169,8 @@
   // operators: +, -, *, &, |, ^, && and ||
   switch (OOK) {
   case OO_Plus:
+BOK = BO_Add;
+break;
   case OO_Minus:
 // Minus(-) operator is not supported in TR11 (OpenMP 6.0). Setting BOK to
 // BO_Comma will automatically diagnose it for OpenMP > 52 as not allowed
@@ -19418,9 +19420,14 @@
 }
 if (BOK == BO_Comma && DeclareReductionRef.isUnset()) {
   // Not allowed reduction identifier is found.
-  S.Diag(ReductionId.getBeginLoc(),
- diag::err_omp_unknown_reduction_identifier)
-  << Type << ReductionIdRange;
+  if (S.LangOpts.OpenMP > 52)
+S.Diag(ReductionId.getBeginLoc(),
+   

[PATCH] D150394: [OpenMP 5.2] Deprecate MINUS (-) operator on reduction clauses

2023-05-18 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay closed this revision.
mdfazlay added a comment.

Commit ID - c657363 



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150394/new/

https://reviews.llvm.org/D150394

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D150394: [OpenMP 5.2] Deprecate MINUS (-) operator on reduction clauses

2023-05-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added inline comments.



Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10487-10488
   "a reduction list item with incomplete type %0">;
+def err_omp_reduction_minus_type : Error<
+  "a reduction list item with minus(-) operator is not supported">;
+def warn_omp_minus_in_reduction_deprecated : Warning<

ABataev wrote:
> We already have message for unsupported reduction identifier. Better to 
> modify switch in static bool actOnOMPReductionKindClause function and check 
> if OpenMP > 52, set BOK to BO_Comma, if incoming OOK is OO_Minus. In this 
> case it will be automatically diagnosed for OpenMP>52 as not allowed 
> reduction identifier.
BTW, I think we need to remove minus (-) from the incorrect reduction 
identifier error message once OpenMP 6.0 becomes official. Please take a look 
at the following output:

```
$ cat test.c
void foo() {
  int a = 0 ;
#pragma omp parallel reduction(-:a)
  ;
}
```
```
> clang -fopenmp -fopenmp-version=60 test.c -c
test.c:3:32: error: incorrect reduction identifier, expected one of '+', '-', 
'*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 
'int'
#pragma omp parallel reduction(-:a)
   ^
1 error generated.
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150394/new/

https://reviews.llvm.org/D150394

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D150394: [OpenMP 5.2] Deprecate MINUS (-) operator on reduction clauses

2023-05-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added inline comments.



Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10490
+def warn_omp_minus_in_reduction_deprecated : Warning<
+  "minus(-) operator for reductions is deprecated; use an user defined 
reduction instead">,
+  InGroup;

ABataev wrote:
> mdfazlay wrote:
> > ABataev wrote:
> > > `use + or user defined reudction instead`? And better make it a fixme 
> > > note.
> > @ABataev, Do you want me to add a warning and a note at the same location? 
> > Or Changing the warning message to `minus(-) operator for reductions is 
> > deprecated; use + or user defined reduction instead` is just fine? Please 
> > let me know which one you prefer.
> Would be good to have both. But since it is a temp warning, I'm fine with 
> your message
I have addressed your comments. Please let me know if anything needs to be 
revised. 


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150394/new/

https://reviews.llvm.org/D150394

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D150394: [OpenMP 5.2] Deprecate MINUS (-) operator on reduction clauses

2023-05-16 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added inline comments.



Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10490
+def warn_omp_minus_in_reduction_deprecated : Warning<
+  "minus(-) operator for reductions is deprecated; use an user defined 
reduction instead">,
+  InGroup;

ABataev wrote:
> `use + or user defined reudction instead`? And better make it a fixme note.
@ABataev, Do you want me to add a warning and a note at the same location? Or 
Changing the warning message to `minus(-) operator for reductions is 
deprecated; use + or user defined reduction instead` is just fine? Please let 
me know which one you prefer.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150394/new/

https://reviews.llvm.org/D150394

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D143021: [OpenMP 5.2] Deprecate 'destroy' clause without argument for 'depobj' construct

2023-02-06 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 495196.
mdfazlay added a comment.

@ABataev, I have addressed your last two comments and updated the diff. Please 
take a look at your convenient time :)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143021/new/

https://reviews.llvm.org/D143021

Files:
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/lib/Sema/SemaOpenMP.cpp
  clang/test/OpenMP/depobj_messages.cpp


Index: clang/test/OpenMP/depobj_messages.cpp
===
--- clang/test/OpenMP/depobj_messages.cpp
+++ clang/test/OpenMP/depobj_messages.cpp
@@ -2,11 +2,15 @@
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp-simd -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 struct S1 { // expected-note 2 {{declared here}}
   int a;
@@ -27,7 +31,7 @@
 #pragma omp depobj(x) untied  // expected-error {{unexpected OpenMP clause 
'untied' in directive '#pragma omp depobj'}}
 #pragma omp depobj(x) unknown // expected-warning {{extra tokens at the end of 
'#pragma omp depobj' are ignored}}
   if (argc)
-#pragma omp depobj(x) destroy // expected-error {{'#pragma omp depobj' cannot 
be an immediate substatement}}
+#pragma omp depobj(x) destroy // omp52-error {{expected 'destroy' clause with 
an argument on '#pragma omp depobj' construct}} expected-error {{'#pragma omp 
depobj' cannot be an immediate substatement}}
 if (argc) {
 #pragma omp depobj(x) depend(in:s)
 }
@@ -148,16 +152,16 @@
 #pragma omp parallel depobj(argc) // expected-warning {{extra tokens at the 
end of '#pragma omp parallel' are ignored}}
   ;
 #pragma omp depobj(x) seq_cst // expected-error {{unexpected OpenMP clause 
'seq_cst' in directive '#pragma omp depobj'}}
-#pragma omp depobj(x) depend(source: x) // omp51-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp50-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}}
+#pragma omp depobj(x) depend(source: x) // omp52-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp51-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'depend'}} 
omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout' or 
'mutexinoutset' in OpenMP clause 'depend'}}
 #pragma omp depobj(x) update // expected-error {{expected '(' after 'update'}}
-#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp51-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp51-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) destroy destroy // expected-error {{directive '#pragma 
omp depobj' cannot contain more than one 'destroy' clause}}
+#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp52-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'update'}}
+#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp52-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'update'}}
+#pragma omp depobj(x) destroy destroy //omp52-error {{expected 'destroy' 
clause with an argument on '#pragma omp depobj' construct}} omp50-error 
{{directive '#pragma omp depobj' cannot contain more than one 'destroy' 
clause}} // omp52-error {{directive '#pragma omp depobj' cannot contain more 
than one 'destroy' clause}} omp52-error 

[PATCH] D143021: [OpenMP 5.2] Deprecate 'destroy' clause without argument for 'depobj' construct

2023-02-02 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

Updated the diff. Please take a look.




Comment at: clang/include/clang/Basic/DiagnosticParseKinds.td:496
 
+def err_destroy_clause_without_argument
+: Error<"'destroy' clause without argument on '#pragma omp depobj' "

ABataev wrote:
> 1. Usually we name them err_omp_... Also, move to other err_omp messages.
> 2. Better to use something like "Expected depobj with argument if destroy 
> clause is specified" or something like this.
Done :)



Comment at: clang/lib/Sema/SemaOpenMP.cpp:17666
+  if (!InteropVar && (LangOpts.OpenMP >= 52 &&
+  DSAStack->getCurrentDirective() == OMPD_depobj)) {
+Diag(StartLoc, diag::err_destroy_clause_without_argument);

ABataev wrote:
> Can it be used with any other directive except for depobj?
I tried to make it more general. Please take a look.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143021/new/

https://reviews.llvm.org/D143021

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D143021: [OpenMP 5.2] Deprecate 'destroy' clause without argument for 'depobj' construct

2023-02-02 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 494415.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143021/new/

https://reviews.llvm.org/D143021

Files:
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/lib/Sema/SemaOpenMP.cpp
  clang/test/OpenMP/depobj_messages.cpp


Index: clang/test/OpenMP/depobj_messages.cpp
===
--- clang/test/OpenMP/depobj_messages.cpp
+++ clang/test/OpenMP/depobj_messages.cpp
@@ -2,11 +2,15 @@
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp-simd -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 struct S1 { // expected-note 2 {{declared here}}
   int a;
@@ -27,7 +31,7 @@
 #pragma omp depobj(x) untied  // expected-error {{unexpected OpenMP clause 
'untied' in directive '#pragma omp depobj'}}
 #pragma omp depobj(x) unknown // expected-warning {{extra tokens at the end of 
'#pragma omp depobj' are ignored}}
   if (argc)
-#pragma omp depobj(x) destroy // expected-error {{'#pragma omp depobj' cannot 
be an immediate substatement}}
+#pragma omp depobj(x) destroy // omp52-error {{expected 'destroy' clause with 
an argument on '#pragma omp depobj' construct since OpenMP 5.2}} expected-error 
{{'#pragma omp depobj' cannot be an immediate substatement}}
 if (argc) {
 #pragma omp depobj(x) depend(in:s)
 }
@@ -148,16 +152,16 @@
 #pragma omp parallel depobj(argc) // expected-warning {{extra tokens at the 
end of '#pragma omp parallel' are ignored}}
   ;
 #pragma omp depobj(x) seq_cst // expected-error {{unexpected OpenMP clause 
'seq_cst' in directive '#pragma omp depobj'}}
-#pragma omp depobj(x) depend(source: x) // omp51-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp50-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}}
+#pragma omp depobj(x) depend(source: x) // omp52-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp51-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'depend'}} 
omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout' or 
'mutexinoutset' in OpenMP clause 'depend'}}
 #pragma omp depobj(x) update // expected-error {{expected '(' after 'update'}}
-#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp51-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp51-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) destroy destroy // expected-error {{directive '#pragma 
omp depobj' cannot contain more than one 'destroy' clause}}
+#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp52-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'update'}}
+#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp52-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'update'}}
+#pragma omp depobj(x) destroy destroy //omp52-error {{expected 'destroy' 
clause with an argument on '#pragma omp depobj' construct since OpenMP 5.2}} 
omp50-error {{directive '#pragma omp depobj' cannot contain more than one 
'destroy' clause}} // omp52-error {{directive '#pragma omp depobj' cannot 
contain more than one 'destroy' clause}} omp52-error {{expected 'destroy' 
clause with an argument on '#pragma omp depobj' construct since OpenMP 5.2}} 
omp51-error 

[PATCH] D143021: [OpenMP 5.2] Deprecate 'destroy' clause without argument for 'depobj' construct

2023-01-31 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay created this revision.
mdfazlay added reviewers: ABataev, mikerice, jdoerfert.
Herald added subscribers: guansong, yaxunl.
Herald added a project: All.
mdfazlay requested review of this revision.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.

Deprecate and diagnose uses of the 'destroy' clauses without an argument in 
'omp depobj' directives.

Note that an error is given for deprecated features (rather than a warning).

Reference: 
(1) OpenMP 5.2 Sepec: Section 3.5, Page 73
(2) OpenMP 5.2 spec: Sec B.2 line 13, Page 626


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D143021

Files:
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/lib/Sema/SemaOpenMP.cpp
  clang/test/OpenMP/depobj_messages.cpp


Index: clang/test/OpenMP/depobj_messages.cpp
===
--- clang/test/OpenMP/depobj_messages.cpp
+++ clang/test/OpenMP/depobj_messages.cpp
@@ -2,11 +2,15 @@
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,omp51 -fopenmp-simd -fopenmp-version=51 \
 // RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
 
 struct S1 { // expected-note 2 {{declared here}}
   int a;
@@ -27,7 +31,7 @@
 #pragma omp depobj(x) untied  // expected-error {{unexpected OpenMP clause 
'untied' in directive '#pragma omp depobj'}}
 #pragma omp depobj(x) unknown // expected-warning {{extra tokens at the end of 
'#pragma omp depobj' are ignored}}
   if (argc)
-#pragma omp depobj(x) destroy // expected-error {{'#pragma omp depobj' cannot 
be an immediate substatement}}
+#pragma omp depobj(x) destroy // omp52-error {{'destroy' clause without 
argument on '#pragma omp depobj' construct is deprecated since OpenMP 5.2}} 
expected-error {{'#pragma omp depobj' cannot be an immediate substatement}}
 if (argc) {
 #pragma omp depobj(x) depend(in:s)
 }
@@ -148,16 +152,16 @@
 #pragma omp parallel depobj(argc) // expected-warning {{extra tokens at the 
end of '#pragma omp parallel' are ignored}}
   ;
 #pragma omp depobj(x) seq_cst // expected-error {{unexpected OpenMP clause 
'seq_cst' in directive '#pragma omp depobj'}}
-#pragma omp depobj(x) depend(source: x) // omp51-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp50-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}}
+#pragma omp depobj(x) depend(source: x) // omp52-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in 
OpenMP clause 'depend'}} omp51-error {{expected depend modifier(iterator) or 
'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'depend'}} 
omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout' or 
'mutexinoutset' in OpenMP clause 'depend'}}
 #pragma omp depobj(x) update // expected-error {{expected '(' after 'update'}}
-#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp51-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp51-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp50-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}}
-#pragma omp depobj(x) destroy destroy // expected-error {{directive '#pragma 
omp depobj' cannot contain more than one 'destroy' clause}}
+#pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} omp52-error {{expected 'in', 'out', 'inout', 
'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'update'}}
+#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp52-error {{expected 'in', 'out', 
'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 'update'}} omp51-error 
{{expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset' in OpenMP clause 
'update'}} omp50-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 

[PATCH] D138217: [OpenMP] Initial parsing and semantic analysis support for 'strict' modifier with 'grainsize' clause of 'taskloop' construct

2022-11-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 476259.
mdfazlay added a comment.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Added corresponding definitions in// llvm/include/llvm/Frontend/OpenMP/OMP.td// 
file.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138217/new/

https://reviews.llvm.org/D138217

Files:
  clang/include/clang/AST/OpenMPClause.h
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/include/clang/Basic/OpenMPKinds.def
  clang/include/clang/Basic/OpenMPKinds.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/OpenMPClause.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReader.cpp
  clang/lib/Serialization/ASTWriter.cpp
  clang/test/OpenMP/masked_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_strict_modifier_ast_print.cpp
  clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
  llvm/include/llvm/Frontend/OpenMP/OMP.td

Index: llvm/include/llvm/Frontend/OpenMP/OMP.td
===
--- llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -230,9 +230,18 @@
   let clangClass = "OMPPriorityClause";
   let flangClass = "ScalarIntExpr";
 }
+
+def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {}
+def OMP_GRAINSIZE_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; }
+
 def OMPC_GrainSize : Clause<"grainsize"> {
   let clangClass = "OMPGrainsizeClause";
   let flangClass = "ScalarIntExpr";
+  let enumClauseValue = "GrainsizeType";
+  let allowedClauseValues = [
+OMP_GRAINSIZE_Strict,
+OMP_GRAINSIZE_Unknown
+  ];
 }
 def OMPC_NoGroup : Clause<"nogroup"> {
   let clangClass = "OMPNogroupClause";
Index: clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
@@ -0,0 +1,113 @@
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {
+  return argc;
+}
+
+template 
+int tmain(T argc, S **argv) {
+  T z;
+  #pragma omp taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+
+  return 0;
+}
+
+int main(int argc, char **argv) {
+  int z;
+  #pragma omp masked taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+  
+  #pragma omp masked taskloop simd grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} 

[PATCH] D138217: [OpenMP] Initial parsing and semantic analysis support for 'strict' modifier with 'grainsize' clause of 'taskloop' construct

2022-11-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added a comment.

In D138217#3934677 , @ABataev wrote:

> Looks like you dud not add corresponding definitions to llvm/Frontend

Do you mean in //llvm/include/llvm/Frontend/OpenMP/OMP.td// file?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138217/new/

https://reviews.llvm.org/D138217

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138217: [OpenMP] Initial parsing and semantic analysis support for 'strict' modifier with 'grainsize' clause of 'taskloop' construct

2022-11-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 476197.
mdfazlay added a comment.

Added static_cast<>.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138217/new/

https://reviews.llvm.org/D138217

Files:
  clang/include/clang/AST/OpenMPClause.h
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/include/clang/Basic/OpenMPKinds.def
  clang/include/clang/Basic/OpenMPKinds.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/OpenMPClause.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReader.cpp
  clang/lib/Serialization/ASTWriter.cpp
  clang/test/OpenMP/masked_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_strict_modifier_ast_print.cpp
  clang/test/OpenMP/taskloop_strict_modifier_messages.cpp

Index: clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
@@ -0,0 +1,113 @@
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {
+  return argc;
+}
+
+template 
+int tmain(T argc, S **argv) {
+  T z;
+  #pragma omp taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+
+  return 0;
+}
+
+int main(int argc, char **argv) {
+  int z;
+  #pragma omp masked taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+  
+  #pragma omp masked taskloop simd grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+  
+  #pragma omp parallel masked taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} 

[PATCH] D138217: [OpenMP] Initial parsing and semantic analysis support for 'strict' modifier with 'grainsize' clause of 'taskloop' construct

2022-11-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 476191.
mdfazlay marked 2 inline comments as done.
mdfazlay added a comment.

> 1. Add full diff context
> 2. Add unsuccessful tests for the modifier (parsing and sema)

1. Done
2. I am not quite sure about it it. We have two new tests for ast and message. 
We did test the unsuccessful tests in the message test. Can you please 
elaborate on this one?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138217/new/

https://reviews.llvm.org/D138217

Files:
  clang/include/clang/AST/OpenMPClause.h
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/include/clang/Basic/OpenMPKinds.def
  clang/include/clang/Basic/OpenMPKinds.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/OpenMPClause.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReader.cpp
  clang/lib/Serialization/ASTWriter.cpp
  clang/test/OpenMP/masked_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_strict_modifier_ast_print.cpp
  clang/test/OpenMP/taskloop_strict_modifier_messages.cpp

Index: clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
@@ -0,0 +1,113 @@
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {
+  return argc;
+}
+
+template 
+int tmain(T argc, S **argv) {
+  T z;
+  #pragma omp taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+
+  return 0;
+}
+
+int main(int argc, char **argv) {
+  int z;
+  #pragma omp masked taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+  
+  #pragma omp masked taskloop simd grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error 

[PATCH] D138217: [OpenMP] Initial parsing and semantic analysis support for 'strict' modifier with 'grainsize' clause of 'taskloop' construct

2022-11-17 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay created this revision.
mdfazlay added reviewers: ABataev, mikerice, jdoerfert.
Herald added subscribers: guansong, yaxunl.
Herald added a project: All.
mdfazlay requested review of this revision.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.

This patch gives basic parsing and semantic analysis support for for 'strict' 
modifier with 'grainsize' clause of 'taskloop' construct introduced in OpenMP 
5.1 ( section 2.12.2)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D138217

Files:
  clang/include/clang/AST/OpenMPClause.h
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/include/clang/Basic/OpenMPKinds.def
  clang/include/clang/Basic/OpenMPKinds.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/OpenMPClause.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReader.cpp
  clang/lib/Serialization/ASTWriter.cpp
  clang/test/OpenMP/masked_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_masked_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_grainsize_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_simd_grainsize_messages.cpp
  clang/test/OpenMP/taskloop_strict_modifier_ast_print.cpp
  clang/test/OpenMP/taskloop_strict_modifier_messages.cpp

Index: clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/taskloop_strict_modifier_messages.cpp
@@ -0,0 +1,113 @@
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp -fopenmp-version=51 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp -fopenmp-version=50 -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {
+  return argc;
+}
+
+template 
+int tmain(T argc, S **argv) {
+  T z;
+  #pragma omp taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+
+  return 0;
+}
+
+int main(int argc, char **argv) {
+  int z;
+  #pragma omp masked taskloop grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+ foo();
+  
+  #pragma omp masked taskloop simd grainsize(strict 10) // omp51-error {{missing ':' after strict modifier}} omp50-error {{use of undeclared identifier 'strict'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa 10) // omp51-error {{use of undeclared identifier 'aa'}} omp51-error {{expected ')'}} omp51-note {{to match this '('}} omp50-error {{use of undeclared identifier 'aa'}} omp50-error {{expected ')'}} omp50-note {{to match this '('}}
+  for (int i = 0; i < 10; ++i)
+foo();
+  #pragma omp masked taskloop simd grainsize(aa: 10) // omp51-error {{expected 'strict' in OpenMP clause 'grainsize'}} omp50-error {{use of 

[PATCH] D127454: [OpenMP] Initial parsing and sema for 'parallel masked' construct

2022-06-14 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay added inline comments.



Comment at: clang/include/clang-c/Index.h:2641
*/
-  CXCursor_TranslationUnit = 300,
+  CXCursor_TranslationUnit = 350,
 

ABataev wrote:
> Does this change affect anything else in the compiler?
We had to add and keep the CXCursor_OMPParallelMaskedDirective with other 
OpenMP directives. I believe it doesn't affect anything else in the compiler. 
We have made necessary changes in "clang/bindings/python/clang/cindex.py" to 
reflect the new value of CXCursor_TranslationUnit.



Comment at: clang/include/clang/AST/StmtOpenMP.h:2315
+///
+class OMPParallelMaskedDirective : public OMPExecutableDirective {
+  friend class ASTStmtReader;

ABataev wrote:
> `final`
Added in the new diff.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127454/new/

https://reviews.llvm.org/D127454

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D127454: [OpenMP] Initial parsing and sema for 'parallel masked' construct

2022-06-14 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 436994.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127454/new/

https://reviews.llvm.org/D127454

Files:
  clang/bindings/python/clang/cindex.py
  clang/include/clang-c/Index.h
  clang/include/clang/AST/RecursiveASTVisitor.h
  clang/include/clang/AST/StmtOpenMP.h
  clang/include/clang/Basic/StmtNodes.td
  clang/include/clang/Sema/Sema.h
  clang/include/clang/Serialization/ASTBitCodes.h
  clang/lib/AST/StmtOpenMP.cpp
  clang/lib/AST/StmtPrinter.cpp
  clang/lib/AST/StmtProfile.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/CodeGen/CGStmt.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaExceptionSpec.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReaderStmt.cpp
  clang/lib/Serialization/ASTWriterStmt.cpp
  clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
  clang/test/Analysis/cfg-openmp.cpp
  clang/test/OpenMP/nesting_of_regions.cpp
  clang/test/OpenMP/parallel_masked_ast_print.cpp
  clang/test/OpenMP/parallel_masked_copyin_messages.cpp
  clang/test/OpenMP/parallel_masked_default_messages.cpp
  clang/test/OpenMP/parallel_masked_firstprivate_messages.cpp
  clang/test/OpenMP/parallel_masked_if_messages.cpp
  clang/test/OpenMP/parallel_masked_message.cpp
  clang/test/OpenMP/parallel_masked_num_threads_messages.cpp
  clang/test/OpenMP/parallel_masked_private_messages.cpp
  clang/test/OpenMP/parallel_masked_proc_bind_messages.cpp
  clang/test/OpenMP/parallel_masked_reduction_messages.cpp
  clang/test/OpenMP/parallel_masked_shared_messages.cpp
  clang/tools/libclang/CIndex.cpp
  clang/tools/libclang/CXCursor.cpp
  llvm/include/llvm/Frontend/OpenMP/OMP.td

Index: llvm/include/llvm/Frontend/OpenMP/OMP.td
===
--- llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -861,6 +861,21 @@
 VersionedClause
   ];
 }
+def OMP_ParallelMasked : Directive<"parallel masked"> {
+  let allowedClauses = [
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause
+  ];
+}
 def OMP_ParallelSections : Directive<"parallel sections"> {
   let allowedClauses = [
 VersionedClause,
Index: clang/tools/libclang/CXCursor.cpp
===
--- clang/tools/libclang/CXCursor.cpp
+++ clang/tools/libclang/CXCursor.cpp
@@ -694,6 +694,9 @@
   case Stmt::OMPParallelMasterDirectiveClass:
 K = CXCursor_OMPParallelMasterDirective;
 break;
+  case Stmt::OMPParallelMaskedDirectiveClass:
+K = CXCursor_OMPParallelMaskedDirective;
+break;
   case Stmt::OMPParallelSectionsDirectiveClass:
 K = CXCursor_OMPParallelSectionsDirective;
 break;
Index: clang/tools/libclang/CIndex.cpp
===
--- clang/tools/libclang/CIndex.cpp
+++ clang/tools/libclang/CIndex.cpp
@@ -2152,6 +2152,7 @@
   void VisitOMPParallelForDirective(const OMPParallelForDirective *D);
   void VisitOMPParallelForSimdDirective(const OMPParallelForSimdDirective *D);
   void VisitOMPParallelMasterDirective(const OMPParallelMasterDirective *D);
+  void VisitOMPParallelMaskedDirective(const OMPParallelMaskedDirective *D);
   void VisitOMPParallelSectionsDirective(const OMPParallelSectionsDirective *D);
   void VisitOMPTaskDirective(const OMPTaskDirective *D);
   void VisitOMPTaskyieldDirective(const OMPTaskyieldDirective *D);
@@ -3073,6 +3074,11 @@
   VisitOMPExecutableDirective(D);
 }
 
+void EnqueueVisitor::VisitOMPParallelMaskedDirective(
+const OMPParallelMaskedDirective *D) {
+  VisitOMPExecutableDirective(D);
+}
+
 void EnqueueVisitor::VisitOMPParallelSectionsDirective(
 const OMPParallelSectionsDirective *D) {
   VisitOMPExecutableDirective(D);
@@ -5766,6 +5772,8 @@
 return cxstring::createRef("OMPParallelForSimdDirective");
   case CXCursor_OMPParallelMasterDirective:
 return cxstring::createRef("OMPParallelMasterDirective");
+  case CXCursor_OMPParallelMaskedDirective:
+return cxstring::createRef("OMPParallelMaskedDirective");
   case CXCursor_OMPParallelSectionsDirective:
 return cxstring::createRef("OMPParallelSectionsDirective");
   case CXCursor_OMPTaskDirective:
Index: clang/test/OpenMP/parallel_masked_shared_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/parallel_masked_shared_messages.cpp
@@ -0,0 +1,120 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {
+  return argc;
+}
+
+struct S1; // expected-note {{declared here}}
+extern S1 a;
+class S2 {
+  mutable int a;
+
+public:
+  

[PATCH] D127454: [OpenMP] Initial parsing and sema for 'parallel masked' construct

2022-06-13 Thread Fazlay Rabbi via Phabricator via cfe-commits
mdfazlay updated this revision to Diff 436589.
mdfazlay added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Added erroneous tests, nesting of regions test and analysis tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127454/new/

https://reviews.llvm.org/D127454

Files:
  clang/include/clang-c/Index.h
  clang/include/clang/AST/RecursiveASTVisitor.h
  clang/include/clang/AST/StmtOpenMP.h
  clang/include/clang/Basic/StmtNodes.td
  clang/include/clang/Sema/Sema.h
  clang/include/clang/Serialization/ASTBitCodes.h
  clang/lib/AST/StmtOpenMP.cpp
  clang/lib/AST/StmtPrinter.cpp
  clang/lib/AST/StmtProfile.cpp
  clang/lib/Basic/OpenMPKinds.cpp
  clang/lib/CodeGen/CGStmt.cpp
  clang/lib/Parse/ParseOpenMP.cpp
  clang/lib/Sema/SemaExceptionSpec.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReaderStmt.cpp
  clang/lib/Serialization/ASTWriterStmt.cpp
  clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
  clang/test/Analysis/cfg-openmp.cpp
  clang/test/OpenMP/nesting_of_regions.cpp
  clang/test/OpenMP/parallel_masked_ast_print.cpp
  clang/test/OpenMP/parallel_masked_copyin_messages.cpp
  clang/test/OpenMP/parallel_masked_default_messages.cpp
  clang/test/OpenMP/parallel_masked_firstprivate_messages.cpp
  clang/test/OpenMP/parallel_masked_if_messages.cpp
  clang/test/OpenMP/parallel_masked_message.cpp
  clang/test/OpenMP/parallel_masked_num_threads_messages.cpp
  clang/test/OpenMP/parallel_masked_private_messages.cpp
  clang/test/OpenMP/parallel_masked_proc_bind_messages.cpp
  clang/test/OpenMP/parallel_masked_reduction_messages.cpp
  clang/test/OpenMP/parallel_masked_shared_messages.cpp
  clang/tools/libclang/CIndex.cpp
  clang/tools/libclang/CXCursor.cpp
  llvm/include/llvm/Frontend/OpenMP/OMP.td

Index: llvm/include/llvm/Frontend/OpenMP/OMP.td
===
--- llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -861,6 +861,21 @@
 VersionedClause
   ];
 }
+def OMP_ParallelMasked : Directive<"parallel masked"> {
+  let allowedClauses = [
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause,
+VersionedClause
+  ];
+}
 def OMP_ParallelSections : Directive<"parallel sections"> {
   let allowedClauses = [
 VersionedClause,
Index: clang/tools/libclang/CXCursor.cpp
===
--- clang/tools/libclang/CXCursor.cpp
+++ clang/tools/libclang/CXCursor.cpp
@@ -694,6 +694,9 @@
   case Stmt::OMPParallelMasterDirectiveClass:
 K = CXCursor_OMPParallelMasterDirective;
 break;
+  case Stmt::OMPParallelMaskedDirectiveClass:
+K = CXCursor_OMPParallelMaskedDirective;
+break;
   case Stmt::OMPParallelSectionsDirectiveClass:
 K = CXCursor_OMPParallelSectionsDirective;
 break;
Index: clang/tools/libclang/CIndex.cpp
===
--- clang/tools/libclang/CIndex.cpp
+++ clang/tools/libclang/CIndex.cpp
@@ -2152,6 +2152,7 @@
   void VisitOMPParallelForDirective(const OMPParallelForDirective *D);
   void VisitOMPParallelForSimdDirective(const OMPParallelForSimdDirective *D);
   void VisitOMPParallelMasterDirective(const OMPParallelMasterDirective *D);
+  void VisitOMPParallelMaskedDirective(const OMPParallelMaskedDirective *D);
   void VisitOMPParallelSectionsDirective(const OMPParallelSectionsDirective *D);
   void VisitOMPTaskDirective(const OMPTaskDirective *D);
   void VisitOMPTaskyieldDirective(const OMPTaskyieldDirective *D);
@@ -3073,6 +3074,11 @@
   VisitOMPExecutableDirective(D);
 }
 
+void EnqueueVisitor::VisitOMPParallelMaskedDirective(
+const OMPParallelMaskedDirective *D) {
+  VisitOMPExecutableDirective(D);
+}
+
 void EnqueueVisitor::VisitOMPParallelSectionsDirective(
 const OMPParallelSectionsDirective *D) {
   VisitOMPExecutableDirective(D);
@@ -5766,6 +5772,8 @@
 return cxstring::createRef("OMPParallelForSimdDirective");
   case CXCursor_OMPParallelMasterDirective:
 return cxstring::createRef("OMPParallelMasterDirective");
+  case CXCursor_OMPParallelMaskedDirective:
+return cxstring::createRef("OMPParallelMaskedDirective");
   case CXCursor_OMPParallelSectionsDirective:
 return cxstring::createRef("OMPParallelSectionsDirective");
   case CXCursor_OMPTaskDirective:
Index: clang/test/OpenMP/parallel_masked_shared_messages.cpp
===
--- /dev/null
+++ clang/test/OpenMP/parallel_masked_shared_messages.cpp
@@ -0,0 +1,120 @@
+// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
+
+void foo() {
+}
+
+bool foobool(int argc) {