diff options
Diffstat (limited to 'clang/lib/Basic/OpenMPKinds.cpp')
| -rw-r--r-- | clang/lib/Basic/OpenMPKinds.cpp | 728 | 
1 files changed, 103 insertions, 625 deletions
| diff --git a/clang/lib/Basic/OpenMPKinds.cpp b/clang/lib/Basic/OpenMPKinds.cpp index 414ebb52c0c7..cae61ad4f2e3 100644 --- a/clang/lib/Basic/OpenMPKinds.cpp +++ b/clang/lib/Basic/OpenMPKinds.cpp @@ -20,94 +20,14 @@  using namespace clang;  using namespace llvm::omp; -OpenMPContextSelectorSetKind -clang::getOpenMPContextSelectorSet(llvm::StringRef Str) { -  return llvm::StringSwitch<OpenMPContextSelectorSetKind>(Str) -#define OPENMP_CONTEXT_SELECTOR_SET(Name) .Case(#Name, OMP_CTX_SET_##Name) -#include "clang/Basic/OpenMPKinds.def" -      .Default(OMP_CTX_SET_unknown); -} - -llvm::StringRef -clang::getOpenMPContextSelectorSetName(OpenMPContextSelectorSetKind Kind) { -  switch (Kind) { -  case OMP_CTX_SET_unknown: -    return "unknown"; -#define OPENMP_CONTEXT_SELECTOR_SET(Name)                                      \ -  case OMP_CTX_SET_##Name:                                                     \ -    return #Name; -#include "clang/Basic/OpenMPKinds.def" -    break; -  } -  llvm_unreachable("Invalid OpenMP context selector set kind"); -} - -OpenMPContextSelectorKind clang::getOpenMPContextSelector(llvm::StringRef Str) { -  return llvm::StringSwitch<OpenMPContextSelectorKind>(Str) -#define OPENMP_CONTEXT_SELECTOR(Name) .Case(#Name, OMP_CTX_##Name) -#include "clang/Basic/OpenMPKinds.def" -      .Default(OMP_CTX_unknown); -} - -llvm::StringRef -clang::getOpenMPContextSelectorName(OpenMPContextSelectorKind Kind) { -  switch (Kind) { -  case OMP_CTX_unknown: -    return "unknown"; -#define OPENMP_CONTEXT_SELECTOR(Name)                                          \ -  case OMP_CTX_##Name:                                                         \ -    return #Name; -#include "clang/Basic/OpenMPKinds.def" -    break; -  } -  llvm_unreachable("Invalid OpenMP context selector kind"); -} - -OpenMPClauseKind clang::getOpenMPClauseKind(StringRef Str) { -  // 'flush' clause cannot be specified explicitly, because this is an implicit -  // clause for 'flush' directive. If the 'flush' clause is explicitly specified -  // the Parser should generate a warning about extra tokens at the end of the -  // directive. -  if (Str == "flush") -    return OMPC_unknown; -  return llvm::StringSwitch<OpenMPClauseKind>(Str) -#define OPENMP_CLAUSE(Name, Class) .Case(#Name, OMPC_##Name) -#include "clang/Basic/OpenMPKinds.def" -      .Case("uniform", OMPC_uniform) -      .Case("device_type", OMPC_device_type) -      .Case("match", OMPC_match) -      .Default(OMPC_unknown); -} - -const char *clang::getOpenMPClauseName(OpenMPClauseKind Kind) { -  assert(Kind <= OMPC_unknown); -  switch (Kind) { -  case OMPC_unknown: -    return "unknown"; -#define OPENMP_CLAUSE(Name, Class)                                             \ -  case OMPC_##Name:                                                            \ -    return #Name; -#include "clang/Basic/OpenMPKinds.def" -  case OMPC_uniform: -    return "uniform"; -  case OMPC_threadprivate: -    return "threadprivate or thread local"; -  case OMPC_device_type: -    return "device_type"; -  case OMPC_match: -    return "match"; -  } -  llvm_unreachable("Invalid OpenMP clause kind"); -} -  unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,                                            StringRef Str) {    switch (Kind) {    case OMPC_default: -    return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str) -#define OPENMP_DEFAULT_KIND(Name) .Case(#Name, OMPC_DEFAULT_##Name) -#include "clang/Basic/OpenMPKinds.def" -        .Default(OMPC_DEFAULT_unknown); +    return llvm::StringSwitch<unsigned>(Str) +#define OMP_DEFAULT_KIND(Enum, Name) .Case(Name, unsigned(Enum)) +#include "llvm/Frontend/OpenMP/OMPKinds.def" +        .Default(unsigned(llvm::omp::OMP_DEFAULT_unknown));    case OMPC_proc_bind:      return llvm::StringSwitch<unsigned>(Str)  #define OMP_PROC_BIND_KIND(Enum, Name, Value) .Case(Name, Value) @@ -180,6 +100,26 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,  #define OPENMP_LASTPRIVATE_KIND(Name) .Case(#Name, OMPC_LASTPRIVATE_##Name)  #include "clang/Basic/OpenMPKinds.def"          .Default(OMPC_LASTPRIVATE_unknown); +  case OMPC_order: +    return llvm::StringSwitch<OpenMPOrderClauseKind>(Str) +#define OPENMP_ORDER_KIND(Name) .Case(#Name, OMPC_ORDER_##Name) +#include "clang/Basic/OpenMPKinds.def" +        .Default(OMPC_ORDER_unknown); +  case OMPC_update: +    return llvm::StringSwitch<OpenMPDependClauseKind>(Str) +#define OPENMP_DEPEND_KIND(Name) .Case(#Name, OMPC_DEPEND_##Name) +#include "clang/Basic/OpenMPKinds.def" +        .Default(OMPC_DEPEND_unknown); +  case OMPC_device: +    return llvm::StringSwitch<OpenMPDeviceClauseModifier>(Str) +#define OPENMP_DEVICE_MODIFIER(Name) .Case(#Name, OMPC_DEVICE_##Name) +#include "clang/Basic/OpenMPKinds.def" +        .Default(OMPC_DEVICE_unknown); +  case OMPC_reduction: +    return llvm::StringSwitch<OpenMPReductionClauseModifier>(Str) +#define OPENMP_REDUCTION_MODIFIER(Name) .Case(#Name, OMPC_REDUCTION_##Name) +#include "clang/Basic/OpenMPKinds.def" +        .Default(OMPC_REDUCTION_unknown);    case OMPC_unknown:    case OMPC_threadprivate:    case OMPC_if: @@ -193,7 +133,6 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,    case OMPC_private:    case OMPC_firstprivate:    case OMPC_shared: -  case OMPC_reduction:    case OMPC_task_reduction:    case OMPC_in_reduction:    case OMPC_aligned: @@ -204,12 +143,15 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,    case OMPC_untied:    case OMPC_mergeable:    case OMPC_flush: +  case OMPC_depobj:    case OMPC_read:    case OMPC_write: -  case OMPC_update:    case OMPC_capture:    case OMPC_seq_cst: -  case OMPC_device: +  case OMPC_acq_rel: +  case OMPC_acquire: +  case OMPC_release: +  case OMPC_relaxed:    case OMPC_threads:    case OMPC_simd:    case OMPC_num_teams: @@ -221,6 +163,7 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,    case OMPC_hint:    case OMPC_uniform:    case OMPC_use_device_ptr: +  case OMPC_use_device_addr:    case OMPC_is_device_ptr:    case OMPC_unified_address:    case OMPC_unified_shared_memory: @@ -228,6 +171,14 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,    case OMPC_dynamic_allocators:    case OMPC_match:    case OMPC_nontemporal: +  case OMPC_destroy: +  case OMPC_detach: +  case OMPC_inclusive: +  case OMPC_exclusive: +  case OMPC_uses_allocators: +  case OMPC_affinity: +    break; +  default:      break;    }    llvm_unreachable("Invalid OpenMP simple clause kind"); @@ -237,13 +188,11 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,                                                   unsigned Type) {    switch (Kind) {    case OMPC_default: -    switch (Type) { -    case OMPC_DEFAULT_unknown: -      return "unknown"; -#define OPENMP_DEFAULT_KIND(Name)                                              \ -  case OMPC_DEFAULT_##Name:                                                    \ -    return #Name; -#include "clang/Basic/OpenMPKinds.def" +    switch (llvm::omp::DefaultKind(Type)) { +#define OMP_DEFAULT_KIND(Enum, Name)                                           \ +  case Enum:                                                                   \ +    return Name; +#include "llvm/Frontend/OpenMP/OMPKinds.def"      }      llvm_unreachable("Invalid OpenMP 'default' clause type");    case OMPC_proc_bind: @@ -382,6 +331,46 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,  #include "clang/Basic/OpenMPKinds.def"      }      llvm_unreachable("Invalid OpenMP 'lastprivate' clause type"); +  case OMPC_order: +    switch (Type) { +    case OMPC_ORDER_unknown: +      return "unknown"; +#define OPENMP_ORDER_KIND(Name)                                                \ +    case OMPC_ORDER_##Name:                                                    \ +      return #Name; +#include "clang/Basic/OpenMPKinds.def" +    } +    llvm_unreachable("Invalid OpenMP 'order' clause type"); +  case OMPC_update: +    switch (Type) { +    case OMPC_DEPEND_unknown: +      return "unknown"; +#define OPENMP_DEPEND_KIND(Name)                                               \ +  case OMPC_DEPEND_##Name:                                                     \ +    return #Name; +#include "clang/Basic/OpenMPKinds.def" +    } +    llvm_unreachable("Invalid OpenMP 'depend' clause type"); +  case OMPC_device: +    switch (Type) { +    case OMPC_DEVICE_unknown: +      return "unknown"; +#define OPENMP_DEVICE_MODIFIER(Name)                                           \ +  case OMPC_DEVICE_##Name:                                                     \ +    return #Name; +#include "clang/Basic/OpenMPKinds.def" +    } +    llvm_unreachable("Invalid OpenMP 'device' clause modifier"); +  case OMPC_reduction: +    switch (Type) { +    case OMPC_REDUCTION_unknown: +      return "unknown"; +#define OPENMP_REDUCTION_MODIFIER(Name)                                        \ +  case OMPC_REDUCTION_##Name:                                                  \ +    return #Name; +#include "clang/Basic/OpenMPKinds.def" +    } +    llvm_unreachable("Invalid OpenMP 'reduction' clause modifier");    case OMPC_unknown:    case OMPC_threadprivate:    case OMPC_if: @@ -395,7 +384,6 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,    case OMPC_private:    case OMPC_firstprivate:    case OMPC_shared: -  case OMPC_reduction:    case OMPC_task_reduction:    case OMPC_in_reduction:    case OMPC_aligned: @@ -406,12 +394,15 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,    case OMPC_untied:    case OMPC_mergeable:    case OMPC_flush: +  case OMPC_depobj:    case OMPC_read:    case OMPC_write: -  case OMPC_update:    case OMPC_capture:    case OMPC_seq_cst: -  case OMPC_device: +  case OMPC_acq_rel: +  case OMPC_acquire: +  case OMPC_release: +  case OMPC_relaxed:    case OMPC_threads:    case OMPC_simd:    case OMPC_num_teams: @@ -423,6 +414,7 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,    case OMPC_hint:    case OMPC_uniform:    case OMPC_use_device_ptr: +  case OMPC_use_device_addr:    case OMPC_is_device_ptr:    case OMPC_unified_address:    case OMPC_unified_shared_memory: @@ -430,536 +422,17 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,    case OMPC_dynamic_allocators:    case OMPC_match:    case OMPC_nontemporal: +  case OMPC_destroy: +  case OMPC_detach: +  case OMPC_inclusive: +  case OMPC_exclusive: +  case OMPC_uses_allocators: +  case OMPC_affinity:      break; -  } -  llvm_unreachable("Invalid OpenMP simple clause kind"); -} - -bool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind, -                                        OpenMPClauseKind CKind, -                                        unsigned OpenMPVersion) { -  assert(unsigned(DKind) <= unsigned(OMPD_unknown)); -  assert(CKind <= OMPC_unknown); -  // Nontemporal clause is not supported in OpenMP < 5.0. -  if (OpenMPVersion < 50 && CKind == OMPC_nontemporal) -    return false; -  switch (DKind) { -  case OMPD_parallel: -    switch (CKind) { -#define OPENMP_PARALLEL_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_simd: -    if (OpenMPVersion < 50 && CKind == OMPC_if) -      return false; -    switch (CKind) { -#define OPENMP_SIMD_CLAUSE(Name)                                               \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_for: -    switch (CKind) { -#define OPENMP_FOR_CLAUSE(Name)                                                \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_for_simd: -    if (OpenMPVersion < 50 && CKind == OMPC_if) -      return false; -    switch (CKind) { -#define OPENMP_FOR_SIMD_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_sections: -    switch (CKind) { -#define OPENMP_SECTIONS_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_single: -    switch (CKind) { -#define OPENMP_SINGLE_CLAUSE(Name)                                             \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_for: -    switch (CKind) { -#define OPENMP_PARALLEL_FOR_CLAUSE(Name)                                       \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_for_simd: -    switch (CKind) { -#define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name)                                  \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_master: -    switch (CKind) { -#define OPENMP_PARALLEL_MASTER_CLAUSE(Name)                                    \ -    case OMPC_##Name:                                                          \ -      return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_sections: -    switch (CKind) { -#define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name)                                  \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_task: -    switch (CKind) { -#define OPENMP_TASK_CLAUSE(Name)                                               \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_flush: -    return CKind == OMPC_flush; -    break; -  case OMPD_atomic: -    switch (CKind) { -#define OPENMP_ATOMIC_CLAUSE(Name)                                             \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target: -    switch (CKind) { -#define OPENMP_TARGET_CLAUSE(Name)                                             \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_requires: -    switch (CKind) { -#define OPENMP_REQUIRES_CLAUSE(Name)                                             \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_data: -    switch (CKind) { -#define OPENMP_TARGET_DATA_CLAUSE(Name)                                        \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_enter_data: -    switch (CKind) { -#define OPENMP_TARGET_ENTER_DATA_CLAUSE(Name)                                  \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_exit_data: -    switch (CKind) { -#define OPENMP_TARGET_EXIT_DATA_CLAUSE(Name)                                   \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_parallel: -    switch (CKind) { -#define OPENMP_TARGET_PARALLEL_CLAUSE(Name)                                    \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_parallel_for: -    switch (CKind) { -#define OPENMP_TARGET_PARALLEL_FOR_CLAUSE(Name)                                \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_update: -    switch (CKind) { -#define OPENMP_TARGET_UPDATE_CLAUSE(Name)                                      \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_teams: -    switch (CKind) { -#define OPENMP_TEAMS_CLAUSE(Name)                                              \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_cancel: -    switch (CKind) { -#define OPENMP_CANCEL_CLAUSE(Name)                                             \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_ordered: -    switch (CKind) { -#define OPENMP_ORDERED_CLAUSE(Name)                                            \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_taskloop: -    switch (CKind) { -#define OPENMP_TASKLOOP_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_taskloop_simd: -    switch (CKind) { -#define OPENMP_TASKLOOP_SIMD_CLAUSE(Name)                                      \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_master_taskloop: -    switch (CKind) { -#define OPENMP_MASTER_TASKLOOP_CLAUSE(Name)                                    \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_master_taskloop_simd: -    switch (CKind) { -#define OPENMP_MASTER_TASKLOOP_SIMD_CLAUSE(Name)                               \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_master_taskloop: -    switch (CKind) { -#define OPENMP_PARALLEL_MASTER_TASKLOOP_CLAUSE(Name)                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_parallel_master_taskloop_simd: -    switch (CKind) { -#define OPENMP_PARALLEL_MASTER_TASKLOOP_SIMD_CLAUSE(Name)                      \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_critical: -    switch (CKind) { -#define OPENMP_CRITICAL_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_distribute: -    switch (CKind) { -#define OPENMP_DISTRIBUTE_CLAUSE(Name)                                         \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_distribute_parallel_for: -    switch (CKind) { -#define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)                            \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_distribute_parallel_for_simd: -    switch (CKind) { -#define OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)                       \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_distribute_simd: -    if (OpenMPVersion < 50 && CKind == OMPC_if) -      return false; -    switch (CKind) { -#define OPENMP_DISTRIBUTE_SIMD_CLAUSE(Name)                                    \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_parallel_for_simd: -    switch (CKind) { -#define OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(Name)                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_simd: -    switch (CKind) { -#define OPENMP_TARGET_SIMD_CLAUSE(Name)                                        \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_teams_distribute: -    switch (CKind) { -#define OPENMP_TEAMS_DISTRIBUTE_CLAUSE(Name)                                   \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_teams_distribute_simd: -    if (OpenMPVersion < 50 && CKind == OMPC_if) -      return false; -    switch (CKind) { -#define OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name)                              \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_teams_distribute_parallel_for_simd: -    switch (CKind) { -#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)                 \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_teams_distribute_parallel_for: -    switch (CKind) { -#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)                      \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_teams: -    switch (CKind) { -#define OPENMP_TARGET_TEAMS_CLAUSE(Name)                                       \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_teams_distribute: -    switch (CKind) { -#define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name)                            \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_teams_distribute_parallel_for: -    switch (CKind) { -#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)               \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_teams_distribute_parallel_for_simd: -    switch (CKind) { -#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)          \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_target_teams_distribute_simd: -    switch (CKind) { -#define OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name)                       \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_taskgroup: -    switch (CKind) { -#define OPENMP_TASKGROUP_CLAUSE(Name)                                          \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_declare_mapper: -    switch (CKind) { -#define OPENMP_DECLARE_MAPPER_CLAUSE(Name)                                     \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_allocate: -    switch (CKind) { -#define OPENMP_ALLOCATE_CLAUSE(Name)                                           \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_declare_variant: -    switch (CKind) { -#define OPENMP_DECLARE_VARIANT_CLAUSE(Name)                                    \ -  case OMPC_##Name:                                                            \ -    return true; -#include "clang/Basic/OpenMPKinds.def" -    default: -      break; -    } -    break; -  case OMPD_declare_target: -  case OMPD_end_declare_target: -  case OMPD_unknown: -  case OMPD_threadprivate: -  case OMPD_section: -  case OMPD_master: -  case OMPD_taskyield: -  case OMPD_barrier: -  case OMPD_taskwait: -  case OMPD_cancellation_point: -  case OMPD_declare_reduction: -  case OMPD_declare_simd: +  default:      break;    } -  return false; +  llvm_unreachable("Invalid OpenMP simple clause kind");  }  bool clang::isOpenMPLoopDirective(OpenMPDirectiveKind DKind) { @@ -1111,7 +584,7 @@ bool clang::isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind) {  void clang::getOpenMPCaptureRegions(      SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions,      OpenMPDirectiveKind DKind) { -  assert(DKind <= OMPD_unknown); +  assert(unsigned(DKind) < llvm::omp::Directive_enumSize);    switch (DKind) {    case OMPD_parallel:    case OMPD_parallel_for: @@ -1199,6 +672,8 @@ void clang::getOpenMPCaptureRegions(    case OMPD_cancellation_point:    case OMPD_cancel:    case OMPD_flush: +  case OMPD_depobj: +  case OMPD_scan:    case OMPD_declare_reduction:    case OMPD_declare_mapper:    case OMPD_declare_simd: @@ -1206,8 +681,11 @@ void clang::getOpenMPCaptureRegions(    case OMPD_end_declare_target:    case OMPD_requires:    case OMPD_declare_variant: +  case OMPD_begin_declare_variant: +  case OMPD_end_declare_variant:      llvm_unreachable("OpenMP Directive is not allowed");    case OMPD_unknown: +  default:      llvm_unreachable("Unknown OpenMP directive");    }  } | 
