<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/147336>147336</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang: Clang error for metadirective with multiple when clauses and no otherwise
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          Ritanya-B-Bharadwaj
      </td>
    </tr>
</table>

<pre>
    This commit - https://github.com/llvm/llvm-project/pull/127113 fixes the "expected expression" error caused by a missing implicit otherwise clause in metadirective.
However, the issue still persists when multiple when clauses are present without an explicit default.
For example:
```
#include <stdio.h>
#include <omp.h>

#if defined(OPENMP_THREAD)
#define OMP_MODEL_THREADS       1
#define OMP_MODEL_TARGET        0
#elif defined(OPENMP_TARGET)
#define OMP_MODEL_THREADS       0
#define OMP_MODEL_TARGET        1
#else
#define OMP_MODEL_THREADS       0
#define OMP_MODEL_TARGET        0
#endif

double a,x[1000],y[1000],z[1000];
int good_with_default()
{
  int i;

// Routine with "otherwise" clause compiles clean.
#pragma omp metadirective \
 when(user={condition(OMP_MODEL_THREADS)}:parallel for simd) \
 when(user={condition(OMP_MODEL_TARGET)}: target teams distribute parallel for simd) \
     otherwise(simd)

  for (i=0;i<1000;i++)
    {
 z[i]=a*x[i]+y[i];
    }
  return 0;
}


int error_without_default()
{
  int i;
  // error: expected expression
#pragma omp metadirective \
 when(user={condition(OMP_MODEL_THREADS)}:parallel for simd) \
 when(user={condition(OMP_MODEL_TARGET)}: target teams distribute parallel for simd)

  for (i=0;i<1000;i++)
    {
      z[i]=a*x[i]+y[i];
    }
 return 0;
}
```

Output 
```
<source>:40:89: error: expected expression
   40 |      when(user={condition(OMP_MODEL_TARGET)}: target teams distribute parallel for simd)
      | ^
1 error generated.
Compiler returned: 1
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcVlFv4zYM_jXMC9FAlpLYefCDkzS7h91adH0vFIuJdZAtQ5LbdL9-kOzm2l3v0DsMe5ghIFJI8aP4UaSk9_rUEZWw3MByN5NDaKwr73SQ3bO82lxtGumkepJfZgernsv7RnusbdvqgFfYhNB7EBXwPfD9SYdmOMxr2wLfG_P48nPVO_uF6gB83w_GAN9nPM8ygUd9Jo-hIQTO6dxTHUghnXtH3mvbAedIzlmHtRw8KTw8o8RWe6-7E-q2N7rWAW1oyD1pT1ibqIe6w5aCVNpRHfQjzYFVn-wTPZIDvk2A2vuB0AdtDPbkvPbB41NDHbaDCbo3NK5Gix6lI4xuURfwSYfGDgFlF30dfVB0lIMJEWlvHdJZtr2hGBpWwYpNg1XAhe5qMyhCEFsflLbzBsT1NyLb9hfBKDtGEN2RAl7c3F7_8fn24f7T3XW1A74eVUY53ny-ffh8s7v-fZL_ieOXfU-ruvvt-n5SwslLMu8CJtWPArIPAWYvgJ7-Rasvx-iUPo4xVHY4GEIJfHuG5SZjjMFyB3z7_Gb116uV2ACrdBfwZK16iLw_TEQDL6Yo5FEHMWrpcUNCjhcC7-wQopNxZ8zxS6bGzJ6StbZtrw15rA3Jbj663Tt5aiXatn-byQjLbYSLuQm8GDw5EDvIN7XtlA7pzhTfBC56mu9AVL100hgyeLQOvW4V8PXPmrxkQLKIQboTBQwkW49K--D0YQiEP4KK36tQFJN4DB2mHcALDWLHQGw0iG0iJE75Jo31ZGaKfuRMJ8J2Enh1flnyzfNFsrls2aWZozC4DtnEWfp3HJHKVHYeppv-EdIRJ87TzhiZ9wra_5jcX2cvfb9A4bsMvq61rLoZQj8E_KdAbL0dXE2xvopqwUBUxTpx9mPyEHHBEPLt6PN_E9URK4LCMraDbOqJJ-rIyUAq1oztWEXcFBRSESh7fe6ZKoVai7WcUZnly2zNFnzJZk25XuR5IVa5PB4PTBRC8sM6W-YrwYpFsSI20yVnfMlylmcrtmB8zotDwYuFXNVCKXZksGDUSm3msdvPrTvNUnsts0UuxGpm5IGMTy8MzmsjuxNwHh8brkzPg8Nw8rBgJvbgryaCDobKbVIXFabJdPIYn7c3JxXY73TuTmFnv9ab2eBM-dMPl3QgH58u45keS_53AAAA__-UOMah">