ABataev updated this revision to Diff 261513.
ABataev added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79186

Files:
  clang/include/clang/Basic/Attr.td
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
  clang/lib/Sema/SemaOpenMP.cpp
  clang/test/OpenMP/allocate_allocator_ast_print.cpp
  clang/test/OpenMP/allocate_allocator_messages.cpp
  clang/test/OpenMP/master_taskloop_firstprivate_messages.cpp
  clang/test/OpenMP/master_taskloop_in_reduction_messages.cpp
  clang/test/OpenMP/master_taskloop_lastprivate_messages.cpp
  clang/test/OpenMP/master_taskloop_private_messages.cpp
  clang/test/OpenMP/master_taskloop_reduction_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_firstprivate_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_in_reduction_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_lastprivate_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_private_messages.cpp
  clang/test/OpenMP/master_taskloop_simd_reduction_messages.cpp
  clang/test/OpenMP/nvptx_allocate_codegen.cpp
  clang/test/OpenMP/nvptx_allocate_messages.cpp
  clang/test/OpenMP/parallel_master_codegen.cpp
  clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_lastprivate_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_private_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_reduction_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_private_messages.cpp
  clang/test/OpenMP/parallel_master_taskloop_simd_reduction_messages.cpp
  clang/test/OpenMP/target_ast_print.cpp
  clang/test/OpenMP/target_firstprivate_messages.cpp
  clang/test/OpenMP/target_parallel_ast_print.cpp
  clang/test/OpenMP/target_parallel_firstprivate_messages.cpp
  clang/test/OpenMP/target_parallel_for_ast_print.cpp
  clang/test/OpenMP/target_parallel_for_firstprivate_messages.cpp
  clang/test/OpenMP/target_parallel_for_lastprivate_messages.cpp
  clang/test/OpenMP/target_parallel_for_linear_messages.cpp
  clang/test/OpenMP/target_parallel_for_private_messages.cpp
  clang/test/OpenMP/target_parallel_for_reduction_messages.cpp
  clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp
  clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp
  clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp
  clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
  clang/test/OpenMP/target_parallel_for_simd_private_messages.cpp
  clang/test/OpenMP/target_parallel_for_simd_reduction_messages.cpp
  clang/test/OpenMP/target_parallel_private_messages.cpp
  clang/test/OpenMP/target_parallel_reduction_messages.cpp
  clang/test/OpenMP/target_private_messages.cpp
  clang/test/OpenMP/target_reduction_messages.cpp
  clang/test/OpenMP/target_simd_ast_print.cpp
  clang/test/OpenMP/target_simd_firstprivate_messages.cpp
  clang/test/OpenMP/target_simd_lastprivate_messages.cpp
  clang/test/OpenMP/target_simd_linear_messages.cpp
  clang/test/OpenMP/target_simd_private_messages.cpp
  clang/test/OpenMP/target_simd_reduction_messages.cpp
  clang/test/OpenMP/target_teams_ast_print.cpp
  clang/test/OpenMP/target_teams_distribute_ast_print.cpp
  clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp
  clang/test/OpenMP/target_teams_distribute_lastprivate_messages.cpp
  clang/test/OpenMP/target_teams_distribute_parallel_for_ast_print.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_messages.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_messages.cpp
  clang/test/OpenMP/target_teams_distribute_parallel_for_private_messages.cpp
  clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_messages.cpp
  clang/test/OpenMP/target_teams_distribute_parallel_for_simd_ast_print.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_messages.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_messages.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_messages.cpp
  
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_messages.cpp
  clang/test/OpenMP/target_teams_distribute_private_messages.cpp
  clang/test/OpenMP/target_teams_distribute_reduction_messages.cpp
  clang/test/OpenMP/target_teams_distribute_simd_ast_print.cpp
  clang/test/OpenMP/target_teams_distribute_simd_firstprivate_messages.cpp
  clang/test/OpenMP/target_teams_distribute_simd_lastprivate_messages.cpp
  clang/test/OpenMP/target_teams_distribute_simd_private_messages.cpp
  clang/test/OpenMP/target_teams_distribute_simd_reduction_messages.cpp
  clang/test/OpenMP/target_teams_firstprivate_messages.cpp
  clang/test/OpenMP/target_teams_private_messages.cpp
  clang/test/OpenMP/target_teams_reduction_messages.cpp
  clang/test/OpenMP/target_uses_allocators_messages.cpp
  clang/test/OpenMP/task_firstprivate_messages.cpp
  clang/test/OpenMP/task_in_reduction_codegen.cpp
  clang/test/OpenMP/task_in_reduction_message.cpp
  clang/test/OpenMP/task_private_messages.cpp
  clang/test/OpenMP/taskgroup_task_reduction_codegen.cpp
  clang/test/OpenMP/taskloop_firstprivate_messages.cpp
  clang/test/OpenMP/taskloop_in_reduction_messages.cpp
  clang/test/OpenMP/taskloop_lastprivate_messages.cpp
  clang/test/OpenMP/taskloop_private_messages.cpp
  clang/test/OpenMP/taskloop_reduction_messages.cpp
  clang/test/OpenMP/taskloop_simd_firstprivate_messages.cpp
  clang/test/OpenMP/taskloop_simd_in_reduction_messages.cpp
  clang/test/OpenMP/taskloop_simd_lastprivate_messages.cpp
  clang/test/OpenMP/taskloop_simd_linear_messages.cpp
  clang/test/OpenMP/taskloop_simd_private_messages.cpp
  clang/test/OpenMP/taskloop_simd_reduction_messages.cpp
  clang/test/OpenMP/teams_distribute_ast_print.cpp
  clang/test/PCH/chain-openmp-allocate.cpp

Index: clang/test/PCH/chain-openmp-allocate.cpp
===================================================================
--- clang/test/PCH/chain-openmp-allocate.cpp
+++ clang/test/PCH/chain-openmp-allocate.cpp
@@ -13,6 +13,7 @@
 #define PASS1
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/teams_distribute_ast_print.cpp
===================================================================
--- clang/test/OpenMP/teams_distribute_ast_print.cpp
+++ clang/test/OpenMP/teams_distribute_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_reduction_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_private_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_linear_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_linear_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_in_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_in_reduction_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_in_reduction_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/taskloop_simd_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_reduction_messages.cpp
+++ clang/test/OpenMP/taskloop_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_private_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_private_messages.cpp
+++ clang/test/OpenMP/taskloop_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_lastprivate_messages.cpp
+++ clang/test/OpenMP/taskloop_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_in_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_in_reduction_messages.cpp
+++ clang/test/OpenMP/taskloop_in_reduction_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskloop_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/taskloop_firstprivate_messages.cpp
+++ clang/test/OpenMP/taskloop_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/taskgroup_task_reduction_codegen.cpp
===================================================================
--- clang/test/OpenMP/taskgroup_task_reduction_codegen.cpp
+++ clang/test/OpenMP/taskgroup_task_reduction_codegen.cpp
@@ -13,6 +13,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/task_private_messages.cpp
===================================================================
--- clang/test/OpenMP/task_private_messages.cpp
+++ clang/test/OpenMP/task_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/task_in_reduction_message.cpp
===================================================================
--- clang/test/OpenMP/task_in_reduction_message.cpp
+++ clang/test/OpenMP/task_in_reduction_message.cpp
@@ -8,6 +8,7 @@
 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/task_in_reduction_codegen.cpp
===================================================================
--- clang/test/OpenMP/task_in_reduction_codegen.cpp
+++ clang/test/OpenMP/task_in_reduction_codegen.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/task_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/task_firstprivate_messages.cpp
+++ clang/test/OpenMP/task_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_uses_allocators_messages.cpp
===================================================================
--- clang/test/OpenMP/target_uses_allocators_messages.cpp
+++ clang/test/OpenMP/target_uses_allocators_messages.cpp
@@ -5,6 +5,7 @@
 struct omp_alloctrait_t {};
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_reduction_messages.cpp
+++ clang/test/OpenMP/target_teams_reduction_messages.cpp
@@ -14,6 +14,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_private_messages.cpp
+++ clang/test/OpenMP/target_teams_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_simd_reduction_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_simd_reduction_messages.cpp
@@ -14,6 +14,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_simd_private_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_simd_private_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_simd_lastprivate_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify=expected,le50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_simd_firstprivate_messages.cpp
@@ -7,6 +7,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_simd_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_simd_ast_print.cpp
+++ clang/test/OpenMP/target_teams_distribute_simd_ast_print.cpp
@@ -17,6 +17,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_reduction_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_private_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_messages.cpp
@@ -14,6 +14,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify=expected,le50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_messages.cpp
@@ -4,6 +4,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_ast_print.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_private_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_messages.cpp
@@ -8,6 +8,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_parallel_for_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_parallel_for_ast_print.cpp
+++ clang/test/OpenMP/target_teams_distribute_parallel_for_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp
@@ -4,6 +4,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_distribute_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_teams_distribute_ast_print.cpp
+++ clang/test/OpenMP/target_teams_distribute_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_teams_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_teams_ast_print.cpp
+++ clang/test/OpenMP/target_teams_ast_print.cpp
@@ -13,6 +13,7 @@
 struct omp_alloctrait_t {};
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_simd_reduction_messages.cpp
+++ clang/test/OpenMP/target_simd_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_simd_private_messages.cpp
+++ clang/test/OpenMP/target_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/target_simd_linear_messages.cpp
+++ clang/test/OpenMP/target_simd_linear_messages.cpp
@@ -4,6 +4,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_simd_lastprivate_messages.cpp
@@ -6,6 +6,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_simd_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_simd_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_simd_ast_print.cpp
+++ clang/test/OpenMP/target_simd_ast_print.cpp
@@ -17,6 +17,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_reduction_messages.cpp
+++ clang/test/OpenMP/target_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_private_messages.cpp
+++ clang/test/OpenMP/target_private_messages.cpp
@@ -4,6 +4,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_reduction_messages.cpp
+++ clang/test/OpenMP/target_parallel_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_private_messages.cpp
+++ clang/test/OpenMP/target_parallel_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_reduction_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_reduction_messages.cpp
@@ -15,6 +15,7 @@
 #pragma omp requires dynamic_allocators
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_private_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
@@ -5,6 +5,7 @@
 #pragma omp requires dynamic_allocators
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_firstprivate_messages.cpp
@@ -5,6 +5,7 @@
 #pragma omp requires dynamic_allocators
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp
+++ clang/test/OpenMP/target_parallel_for_simd_ast_print.cpp
@@ -17,6 +17,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_reduction_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_private_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_private_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_linear_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_linear_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_lastprivate_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_parallel_for_firstprivate_messages.cpp
@@ -4,6 +4,7 @@
 
 #pragma omp requires dynamic_allocators
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_for_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_for_ast_print.cpp
+++ clang/test/OpenMP/target_parallel_for_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_parallel_firstprivate_messages.cpp
@@ -5,6 +5,7 @@
 #pragma omp requires dynamic_allocators
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_parallel_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_parallel_ast_print.cpp
+++ clang/test/OpenMP/target_parallel_ast_print.cpp
@@ -11,6 +11,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/target_firstprivate_messages.cpp
+++ clang/test/OpenMP/target_firstprivate_messages.cpp
@@ -10,6 +10,7 @@
 }
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/target_ast_print.cpp
===================================================================
--- clang/test/OpenMP/target_ast_print.cpp
+++ clang/test/OpenMP/target_ast_print.cpp
@@ -342,6 +342,7 @@
 // RUN: %clang_cc1 -DOMP5 -fopenmp-simd -fopenmp-version=50 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix OMP5
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_simd_reduction_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_simd_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_simd_private_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_reduction_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_private_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_private_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_lastprivate_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp
+++ clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/parallel_master_codegen.cpp
===================================================================
--- clang/test/OpenMP/parallel_master_codegen.cpp
+++ clang/test/OpenMP/parallel_master_codegen.cpp
@@ -446,6 +446,7 @@
 // CK9-DAG: [[STR:@.+]] = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00"
 // CK9-DAG: [[DEF_LOC:@.+]] = private unnamed_addr global %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* [[STR]], i32 0, i32 0) }
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/nvptx_allocate_messages.cpp
===================================================================
--- clang/test/OpenMP/nvptx_allocate_messages.cpp
+++ clang/test/OpenMP/nvptx_allocate_messages.cpp
@@ -23,6 +23,7 @@
 
 #pragma omp declare target
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/nvptx_allocate_codegen.cpp
===================================================================
--- clang/test/OpenMP/nvptx_allocate_codegen.cpp
+++ clang/test/OpenMP/nvptx_allocate_codegen.cpp
@@ -7,6 +7,7 @@
 
 #pragma omp declare target
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_reduction_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_private_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_private_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_lastprivate_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_in_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_in_reduction_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_in_reduction_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_simd_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_simd_firstprivate_messages.cpp
+++ clang/test/OpenMP/master_taskloop_simd_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_reduction_messages.cpp
+++ clang/test/OpenMP/master_taskloop_reduction_messages.cpp
@@ -13,6 +13,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_private_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_private_messages.cpp
+++ clang/test/OpenMP/master_taskloop_private_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_lastprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_lastprivate_messages.cpp
+++ clang/test/OpenMP/master_taskloop_lastprivate_messages.cpp
@@ -5,6 +5,7 @@
 // RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-version=50 -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_in_reduction_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_in_reduction_messages.cpp
+++ clang/test/OpenMP/master_taskloop_in_reduction_messages.cpp
@@ -7,6 +7,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -std=c++11 -ferror-limit 150 -o - %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/master_taskloop_firstprivate_messages.cpp
===================================================================
--- clang/test/OpenMP/master_taskloop_firstprivate_messages.cpp
+++ clang/test/OpenMP/master_taskloop_firstprivate_messages.cpp
@@ -3,6 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/allocate_allocator_messages.cpp
===================================================================
--- clang/test/OpenMP/allocate_allocator_messages.cpp
+++ clang/test/OpenMP/allocate_allocator_messages.cpp
@@ -16,6 +16,7 @@
 #pragma omp allocate(sss) allocator(sss)  // expected-error {{'omp_allocator_handle_t' type not found; include <omp.h>}}
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/test/OpenMP/allocate_allocator_ast_print.cpp
===================================================================
--- clang/test/OpenMP/allocate_allocator_ast_print.cpp
+++ clang/test/OpenMP/allocate_allocator_ast_print.cpp
@@ -17,6 +17,7 @@
 #define HEADER
 
 typedef void **omp_allocator_handle_t;
+extern const omp_allocator_handle_t omp_null_allocator;
 extern const omp_allocator_handle_t omp_default_mem_alloc;
 extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
 extern const omp_allocator_handle_t omp_const_mem_alloc;
Index: clang/lib/Sema/SemaOpenMP.cpp
===================================================================
--- clang/lib/Sema/SemaOpenMP.cpp
+++ clang/lib/Sema/SemaOpenMP.cpp
@@ -2908,15 +2908,14 @@
 static OMPAllocateDeclAttr::AllocatorTypeTy
 getAllocatorKind(Sema &S, DSAStackTy *Stack, Expr *Allocator) {
   if (!Allocator)
-    return OMPAllocateDeclAttr::OMPDefaultMemAlloc;
+    return OMPAllocateDeclAttr::OMPNullMemAlloc;
   if (Allocator->isTypeDependent() || Allocator->isValueDependent() ||
       Allocator->isInstantiationDependent() ||
       Allocator->containsUnexpandedParameterPack())
     return OMPAllocateDeclAttr::OMPUserDefinedMemAlloc;
   auto AllocatorKindRes = OMPAllocateDeclAttr::OMPUserDefinedMemAlloc;
   const Expr *AE = Allocator->IgnoreParenImpCasts();
-  for (int I = OMPAllocateDeclAttr::OMPDefaultMemAlloc;
-       I < OMPAllocateDeclAttr::OMPUserDefinedMemAlloc; ++I) {
+  for (int I = 0; I < OMPAllocateDeclAttr::OMPUserDefinedMemAlloc; ++I) {
     auto AllocatorKind = static_cast<OMPAllocateDeclAttr::AllocatorTypeTy>(I);
     const Expr *DefAllocator = Stack->getAllocator(AllocatorKind);
     llvm::FoldingSetNodeID AEId, DAEId;
@@ -12505,8 +12504,7 @@
     return true;
   // Build the predefined allocator expressions.
   bool ErrorFound = false;
-  for (int I = OMPAllocateDeclAttr::OMPDefaultMemAlloc;
-       I < OMPAllocateDeclAttr::OMPUserDefinedMemAlloc; ++I) {
+  for (int I = 0; I < OMPAllocateDeclAttr::OMPUserDefinedMemAlloc; ++I) {
     auto AllocatorKind = static_cast<OMPAllocateDeclAttr::AllocatorTypeTy>(I);
     StringRef Allocator =
         OMPAllocateDeclAttr::ConvertAllocatorTypeTyToStr(AllocatorKind);
Index: clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
===================================================================
--- clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
@@ -4756,6 +4756,7 @@
     switch (A->getAllocatorType()) {
       // Use the default allocator here as by default local vars are
       // threadlocal.
+    case OMPAllocateDeclAttr::OMPNullMemAlloc:
     case OMPAllocateDeclAttr::OMPDefaultMemAlloc:
     case OMPAllocateDeclAttr::OMPThreadMemAlloc:
     case OMPAllocateDeclAttr::OMPHighBWMemAlloc:
@@ -4922,6 +4923,7 @@
     return false;
   const auto *A = VD->getAttr<OMPAllocateDeclAttr>();
   switch(A->getAllocatorType()) {
+  case OMPAllocateDeclAttr::OMPNullMemAlloc:
   case OMPAllocateDeclAttr::OMPDefaultMemAlloc:
   // Not supported, fallback to the default mem space.
   case OMPAllocateDeclAttr::OMPThreadMemAlloc:
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===================================================================
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -10516,6 +10516,7 @@
     return false;
   const auto *A = VD->getAttr<OMPAllocateDeclAttr>();
   switch(A->getAllocatorType()) {
+  case OMPAllocateDeclAttr::OMPNullMemAlloc:
   case OMPAllocateDeclAttr::OMPDefaultMemAlloc:
   // Not supported, fallback to the default mem space.
   case OMPAllocateDeclAttr::OMPLargeCapMemAlloc:
@@ -11698,7 +11699,8 @@
     return Address::invalid();
   const auto *AA = CVD->getAttr<OMPAllocateDeclAttr>();
   // Use the default allocation.
-  if (AA->getAllocatorType() == OMPAllocateDeclAttr::OMPDefaultMemAlloc &&
+  if ((AA->getAllocatorType() == OMPAllocateDeclAttr::OMPDefaultMemAlloc ||
+       AA->getAllocatorType() == OMPAllocateDeclAttr::OMPNullMemAlloc) &&
       !AA->getAllocator())
     return Address::invalid();
   llvm::Value *Size;
Index: clang/include/clang/Basic/Attr.td
===================================================================
--- clang/include/clang/Basic/Attr.td
+++ clang/include/clang/Basic/Attr.td
@@ -3300,14 +3300,16 @@
   let Args = [
     EnumArgument<"AllocatorType", "AllocatorTypeTy",
                  [
-                   "omp_default_mem_alloc", "omp_large_cap_mem_alloc",
-                   "omp_const_mem_alloc", "omp_high_bw_mem_alloc",
-                   "omp_low_lat_mem_alloc", "omp_cgroup_mem_alloc",
-                   "omp_pteam_mem_alloc", "omp_thread_mem_alloc", ""
+                   "omp_null_allocator", "omp_default_mem_alloc",
+                   "omp_large_cap_mem_alloc", "omp_const_mem_alloc",
+                   "omp_high_bw_mem_alloc", "omp_low_lat_mem_alloc",
+                   "omp_cgroup_mem_alloc", "omp_pteam_mem_alloc",
+                   "omp_thread_mem_alloc", ""
                  ],
                  [
-                   "OMPDefaultMemAlloc", "OMPLargeCapMemAlloc",
-                   "OMPConstMemAlloc", "OMPHighBWMemAlloc", "OMPLowLatMemAlloc",
+                   "OMPNullMemAlloc", "OMPDefaultMemAlloc",
+                   "OMPLargeCapMemAlloc", "OMPConstMemAlloc",
+                   "OMPHighBWMemAlloc", "OMPLowLatMemAlloc",
                    "OMPCGroupMemAlloc", "OMPPTeamMemAlloc", "OMPThreadMemAlloc",
                    "OMPUserDefinedMemAlloc"
                  ]>,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to