[PATCH] D129872: [clang][OpenMP] Fix runtime crash in the call to __kmp_alloc.

Jennifer Yu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 25 12:23:08 PDT 2022


jyu2 added inline comments.


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:16379
+    // UnsignedPointerDiffType avoid truncate.
+    AllocatorHT = Context.getUnsignedPointerDiffType();
+  Allocator = PerformImplicitConversion(Allocator.get(), AllocatorHT,
----------------
ABataev wrote:
> jyu2 wrote:
> > ABataev wrote:
> > > jyu2 wrote:
> > > > ABataev wrote:
> > > > > jyu2 wrote:
> > > > > > ABataev wrote:
> > > > > > > It must be int type, no?
> > > > > > unsigned int?
> > > > > Check the standard, IIRC it says just int.
> > > > I see that is enum type.
> > > > 
> > > > Runtime library definitions: The enum types for omp_allocator_handle_t:
> > > > 
> > > > The type omp_allocator_handle_t, which must be an implementation-defined (for C++
> > > > possibly scoped) enum type with at least the omp_null_allocator enumerator with the
> > > > value zero and an enumerator for each predefined memory allocator in Table 2.10;
> > > IIRC, in C enums are always int-based.
> > That is right.  But not for C++.
> For C++ need to get the base int type.
For C++ enum type is unsigned int:  
since following is defined inside the omp_allocator_handle_t.
 KMP_ALLOCATOR_MAX_HANDLE = (18446744073709551615UL)  

But for C it is int.  

```
-EnumDecl 0x11b31d88 <line:18:9, line:33:1> line:18:14 omp_allocator_handle_t
| |-EnumConstantDecl 0x11b31e90 <line:19:3, col:24> col:3 referenced omp_null_allocator 'omp_allocator_handle_t'
| | `-ImplicitCastExpr 0x11b4b770 <col:24> 'unsigned long' <IntegralCast>
| |   `-ConstantExpr 0x11b31e70 <col:24> 'int'
| |     |-value: Int 0
```




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D129872



More information about the cfe-commits mailing list