<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylV1tvo0YU_jX4ZWSLi3HgwQ-OnbSVNm3Vutp9swY4YHYHBg1Dkv33PXPh5pBEVSVkz-Xcb3wkPPu5P3NS_SRdnYFoJa2zsi4Iz8kfDdRPf5Jw4xJ_43kbnzh-1NACiBduHf9IWFlDS7brnePHhJJnKkqaMCAZpIwKyEhZt2UGeOXs3IYKyhgwXBIBRclr8lLKa1mbawm0aid37ZV3LCMJpLwC3Gl5CcgXAORgjMirAJq1BF4h7aQyWV6pJL2aQccV6bvW3APJOWP8Re1QF68aJYqnVIJSnfK6laJLpbZM0xuqS6PMu1RQXTS9IraMXDjBwXFPjnvAU_Okjn-vHnPqB42gRUXJTJ0fYbh-pxXo2A2y_GhJnR_faLBb_fvP4FzaCQG1JEdGa_JEMbQoLw7pNtjlUZrSXRx7WermgRtGURYnHs0D3w8iL_J2kbID09ESCa0kOS1Z-7lnZZ2yDjPsBMeSY-zQbCd4WLpOW5mVfLxcIEHPN9cbihLdqdATdGSMwl1vgBub-9ezLQYnOKkwXwqQFzy-2CKx3MHIp1MNr40gSkLdVWdVf5p_O6GbaKFfMEXMCe97Yic8TSVqGnXxLoklxECowAaHlHdS-Y0PJsof3UArcN9fTc57EeoZ-JzwKAeFM86JW3o_aIY6Y7eGzcpUUoEhJBmVFPU3GD_Jc8ExuQcbB_9onB2SssA_2nu32Ay655WVF9P9fjT4oYtROX1hZVVKvJqEYdBpIrEsPCuxHsukw16bErtxrttMpUvqfLsYCb08DqUzNckUDjGFL291T9UPJ6YYlIBBwZKFw6hy_Ed8tNKhXt93932tVrGaJexDzZMpxEw2_8MMmkuSvCpT0jUZfRNo81hrMHxoEMbv3nvPqE9FmYh-LimhQpQgFmWYWJNGYKRynV7__HB4QrFhpt5p51__ejicdB-ZAxOgcS_1jDPb8FirBvxAj16pNlUFp2JogquKTMcXk25rzH-f0DTCLanNnLVoPt5mJZF_IEuViamUxSrTzzD5JM4zXVc2Jkv67k5vD_uxOPCbGL5hv-Gdbse1PUk4Z6TgPDMCRQdTgWOP07HHKZkOxbGp6cz3eWPp4A0BoNoB31Mie6fU2bsTqXdtnPkgxGTmf950pOayhz_4QtctgN7Z6TLOejqRinrIcl1a2rk_A1_v2lTsxMuR8s5U_t3bHA4ZySlr4fb-w4wKkJ1QkMVTQkbWgfAG_GD9hveI8ArEal2isxBdpWw0bNHdZ242iCBx8_0HMASsBS4x0qFCOThaHxPGE_yrKMIBzMLjOBqH5SZtGtt2VvNB4cLjt2-PXw6__I3erjFiOUe4jMNnbRd4zMqET07W5q2oXtKv0e6y266bdI0mda_rou7I-quCtesGMlpLHITrrzO2JcHFeIjpnsPCs8JyiKJfWj0jFDZWGHEA6Uhu2lhjboWxWjUVn9FhIjkBml7tK3hDThrQW9Q8cNFWbfGLAa1V-4r-wM-BclauqPHlylGddcKickzVDMvbd_6G_FYTwKyBICltoYfgyyD9igbUaGmeQyo3q2wfZHEQ0xXt5JWLfZ_wVSfY_oPCYOy5_1s3gn9HYbgt27YDVSBhgF87q-ueZi5Nd2F0B24QQ5DtwtTfRnEE29CLvRRWjCbA2j0WJSajhheiRWiAdlr9fwvKve_6vut5vue7gbvbZAjto12ahvE2CsPQdbauSiPbKDkbLoqV2GuRSVe0eMkQELXjJW3bsqgBtMFooSwlg7395rP4LTh88AHEgD5jvoeCMsWytjW00ubvte3_As64Mi0>53154</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            OpenMP target: `omp_pteam_mem_alloc` leaves variable thread-private
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jkelling
      </td>
    </tr>
</table>

<pre>
    To my understanding of OpenMP 5.0 2.11.2 (page 154, lines 4-6) a variable declared inside a `parallel` region within a `teams` region should become shared between all threads executing that parallel region when using the following `omp allocate` construct with the `omp_pteam_mem_alloc` allocator:
```c++
#pragma omp allocate(varName) allocator(omp_pteam_mem_alloc)
```

Using the current Clan Main (95a436f8cca6991dc0f30588d9b1af3223818168) this test fails:
```c++
#include <iostream>
#include <cstdio>

#include <omp.h>

int main()
{
        int maxThreads = omp_get_max_threads();
        constexpr int numTeams = 4;

        int aLocal[numTeams];
        int aTeam[numTeams];

        std::cout << "maxThreads=" << maxThreads
                << "\tnumTeams=" << numTeams << std::endl;

#pragma omp target data map(tofrom:aLocal,aTeam)
#pragma omp target
        {
#pragma omp teams num_teams(numTeams) thread_limit(maxThreads)
                {
#pragma omp distribute
                        for(int t = 0; t < omp_get_num_teams(); ++t)
                        {
                                int team = 0;
#pragma omp parallel //num_threads(maxThreads)
                                {
                                        int local = 0;
#pragma omp allocate(local) allocator(omp_pteam_mem_alloc)
#pragma omp atomic update
                                        local += t+1;
#pragma omp atomic update
                                        team += t+1;
#pragma omp barrier
                                        // printf("TEAM %d, THREAD=%d, local=%d, team=%d\n"
                                        //      , (int)(omp_get_team_num()), (int)(omp_get_thread_num()), local, team);
                                        if(omp_get_thread_num() == 0)
                                                aLocal[t] = local;
                                }
                                aTeam[t] = team;
                        }
                }
        }

        bool good = true;
        for(int a = 0; a < numTeams; ++a)
        {
                if(aLocal[a] != aTeam[a])
                {
                        std::cerr << "allocator(omp_pteam_mem_alloc) not shared in team for team " << a << ": "
                                << aLocal[a] << " != " << aTeam[a] << '\n';
                        good = false;
                }
        }

        return !good;
}
```
([on github](https://github.com/jkelling/omp5tests/blob/master/allocate/allocate.cpp))
* `CXXFLAGS=-"fopenmp -fopenmp=libomp -fopenmp-targets=x86_64-pc-linux-gnu -Wall -pedantic -Wopenmp-target -fopenmp=libomp -g -fopenmp"`

This shows, that the variable `local` remains private to each thread. Declaring `local` as `static` makes it shared in the whole target region (between all teams). In either case the `allocate` construct has no effect.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVV9lu4zYU_Rr5hbChxXKkBz84dtIWmLRFx8XMm0FRlMwZShQoKsn8fS8XbY6SoICQiOTlXc5ddJyJ_Nf-LFD1C3V1TmWrcJ2zukSiQH81tH76G8UbH4WbINiEyAuTBpcUBfHWC4-Is5q2aLveeWGKMHrGkuGMU5RTwrGkOWJ1y3IKR97Ob7DEnFMOr0jSkokavTB1ZbU9VhRX7eSsvYqO5yijRFQUVkZfRtULpXCDc6SukuK8RfSVkk5pl9UVK9SbGWxcQb5r7TlFheBcvOgV2BJVo1UJghXVpomoWyU7ooxnRt5KXRrt3qWi1cXIa2F3UUgvOnj-yfMPsGsf4oX3-rG7YdRIXFYYzcyFCcD1J66owW7QFSZL5sL0xoJbmr__DsGRTkpaK3TkuEZPGKAFfWmMt9GuSAjBuzQNcuIXkR8nSZ5mAS6iMIySIAl2ifYD0tEiRVuFCsx4-3lkrCa8gwx70ZEJwA7c9qKHpWPSqpyJ8XBBBCLfXG8kGIRTQSQQyIjCXe-An9rz17MrBi86aZgvJVUX2L64InG3o_GeSTV9bSTSGuquOuv6M_e3E7mJFfwFUsS9-L4X9uLTVKOR0QfvijhBAEIDGx2I6JSOGx5IVDiGAV7Auj-a7Pcq9DPc8-KjGgzObk7CMuvBMq1zfuvYrEwVlgAhyrHCYL8B_JQopIDkHhwO4dEGOyRl4f7o791iM5ie115ebPeHyRCHKUYd9IWziik4msAw2LRILCvPGdQjyzrotamwnxamzXS6lMm3D0iY1-NQOlOXbOEgW_jq1vbU_LBji0ErGAwseTiMKi98hMcYHer1_XDft-oM61nCP7Q8mULcZvN_zKC5JiUqRlDX5PgN0PZx3gB84BDgdx-859Snqiyin2vKsJSMykUdFmvUSECqMOkNzw-HJ1Ab5_qbdv79n4fDyfSR3bAAjWtlZpxdxsdaN-AHdsybblNdcBpDC64uMoMvJN3VWPi-oG2EW1GXOefRfLzNSqL4QJcuE1spi1VmnmHyKZhnpq4cJkv27k5vN_uxONy3GL65fnN3uhzf3U4mBEelELlVKDs6VTj2OB57HKPpUBybGs9inzeWAW8AAJsAwkCr7IPSe-9OpD60ceZTKScz__OmQ7VQPf2BD7ppAYjOTZdx1uOJVrCDluvSyc7jGe71oU3VTqIcJe9s5d-9zeGQkQLzlt6ef5hRSVUnNWUJtJLx6iB4Q36gfuN7YHglcLUuM1lIrko1hraY7rMnG2CQsPjxk3IgrCW8AtKxZjkwWh8zLjL4V2GgA5CFx3E0Dq8b0jSu7Zzlg-aFx-_fH78cfvsK0a4BsUIAXYbhs3YvsM1ZJiY7a_tV1B_p12R32W3XDVmDS93ruqw7tP6mae26oTmuFQzC9bfZtSXF5bgJ6Z7TwrPmcsCiX1ozIzQ31hxxIOkgbtvYcG7NsVo9FZ8hYKQEophc3Sd4g06G0DvWPNzCrV7CLwbwVq8r_BN-DrBZuYLFl6sAcy4Ix8ohVTMu7775G_RHjShkjUpEcEt7Cr5M0q_gQA2eFgUlarPK91GeRileKaY43btfL46JRIcPqDyn-Bk8H6CxYa8dGqtO8v0HhcX5c_8Progf4AwsWdt2VBdYHMGvpdV1T2IcBds0J1keZbsEE5wnu7hIgyhOgrDAK44zyts9FDUks6YvyKgwBO-0YvvQD0M_CMIg9CN_t8mB2Cc7QuJ0m8Rx7HtbXyeRb7QfGyHLldwbl7KubOGQAx1qx0PctqysKTXmQD_u1FXIfd8kK2N7b3z_D62EHT4">