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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] Allows incorrect memory size directive.
        </td>
    </tr>

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

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

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

<pre>
    I discovered that the latest Clang improperly checks memory size directives.

## Case 1
I discovered that the latest Clang disallows valid memory size directives but allows invalid memory size directives.

Specifically, when I used the valid memory size directive "QWORD PTR" for clrssbsy and rstorssp instruction, Clang emitted an error message. 
However, Clang accepted the invalid directive "DWORD PTR".

Buggy code
```
.intel_syntax noprefix
Bug:
 clrssbsy DWORD PTR [RAX] 
    //Assembly Error 
    //clrssbsy QWORD PTR [RAX]      
    rstorssp DWORD PTR [RAX]
 //Assembly Error                            
    //rstorssp QWORD PTR [EAX] 
```

Compiled Code
```
Bug:
   clrssbsy QWORD PTR [rax]

```

You can reproduce it through godbolt
- x64: https://godbolt.org/z/sx3488hqe
- x86: https://godbolt.org/z/vbecf5dPG

## Case 2 
I discovered that the latest Clang does not check memory size directives.
This error has been identified in 41 opcodes in x64 and 21 opcodes in x86.

Buggy Code (x64)
```
.intel_syntax noprefix
Bug:
    aesencwide128kl ZMMWORD PTR [RAX]  
    aesencwide256kl ZMMWORD PTR [RAX]              
 aesdecwide128kl ZMMWORD PTR [RAX]              
    aesdecwide256kl ZMMWORD PTR [RAX]       
    
    call ZMMWORD PTR [RAX]
    call WORD PTR [RAX]          
          
    jmp ZMMWORD PTR [RAX]   
 jmp WORD PTR [RAX]                               

    fldenv ZMMWORD PTR [RAX]                           
    fnsave ZMMWORD PTR [RAX] 
    frstor ZMMWORD PTR [RAX] 
    fxsave ZMMWORD PTR [RAX]                        
    fnstenv ZMMWORD PTR [RAX]                          
    fxrstor ZMMWORD PTR [RAX] 
    fxsave64 ZMMWORD PTR [RAX] 
    fxrstor64 ZMMWORD PTR [RAX]                        

 ldtilecfg ZMMWORD PTR [RAX]                       
    lgdt ZMMWORD PTR [RAX]                             
    lidt ZMMWORD PTR [RAX] 

    sgdt ZMMWORD PTR [RAX]                             
 sttilecfg ZMMWORD PTR [RAX]                          

    xsave ZMMWORD PTR [RAX]                             
    xrstor ZMMWORD PTR [RAX]                        
    xsavec ZMMWORD PTR [RAX] 
    xsaves ZMMWORD PTR [RAX]                             
 xrstors ZMMWORD PTR [RAX]                          
    xsave64 ZMMWORD PTR [RAX]                         
    xrstor64 ZMMWORD PTR [RAX] 
    xsavec64 ZMMWORD PTR [RAX] 
    xsaveopt ZMMWORD PTR [RAX]                         
    xsaves64 ZMMWORD PTR [RAX]                         
    xrstors64 ZMMWORD PTR [RAX] 
    xsaveopt64 ZMMWORD PTR [RAX] 
```

Compiled Code (x64)
```
Bug:
   aesencwide128kl [rax]
   aesencwide256kl [rax]
   aesdecwide128kl [rax]
 aesdecwide256kl [rax]
   call   FWORD PTR [rax]
   call   FWORD PTR [rax]
   jmp    FWORD PTR [rax]
   jmp    FWORD PTR [rax]
   fldenv [rax]
   fnsave [rax]
   frstor [rax]
   fxsave [rax]
   fnstenv [rax]
   fxrstor [rax]
   fxsave64 [rax]
   fxrstor64 [rax]
 ldtilecfg [rax]
   lgdt   [rax]
   lidt   [rax]
   sgdt   [rax]
 sttilecfg [rax]
   xsave  [rax]
   xrstor [rax]
   xsavec [rax]
 xsaves [rax]
   xrstors [rax]
   xsave64 [rax]
   xrstor64 [rax]
   xsavec64 [rax]
   xsaveopt [rax]
   xsaves64 [rax]
 xrstors64 [rax]
   xsaveopt64 [rax]
```

Buggy Code (x86)
```
.intel_syntax noprefix
Bug:
    aesencwide128kl ZMMWORD PTR [EAX]  
    aesencwide256kl ZMMWORD PTR [EAX]              
 aesdecwide128kl ZMMWORD PTR [EAX]              
    aesdecwide256kl ZMMWORD PTR [EAX]       

    call ZMMWORD PTR [EAX]
    call WORD PTR [EAX]          
          
    jmp ZMMWORD PTR [EAX]   
    jmp WORD PTR [EAX]                               

    fldenv ZMMWORD PTR [EAX]                           
    fnsave ZMMWORD PTR [EAX] 
    frstor ZMMWORD PTR [EAX]                         
 fxsave ZMMWORD PTR [EAX]                        
    fnstenv ZMMWORD PTR [EAX]                          
    fxrstor ZMMWORD PTR [EAX] 

    lgdt ZMMWORD PTR [EAX] 
    lidt ZMMWORD PTR [EAX]      

    sgdt ZMMWORD PTR [EAX]                             

    xsave ZMMWORD PTR [EAX]                             
    xrstor ZMMWORD PTR [EAX] 
    xsavec ZMMWORD PTR [EAX]                            
 xsaves ZMMWORD PTR [EAX]                             
    xrstors ZMMWORD PTR [EAX]                                                    
 xsaveopt ZMMWORD PTR [EAX] 

```
Compiled Code (x86)
```
Bug:
 aesencwide128kl [eax]
 aesencwide256kl [eax]
 aesdecwide128kl [eax]
 aesdecwide256kl [eax]
 call   FWORD PTR [eax]
 call   WORD PTR [eax]
 jmp    FWORD PTR [eax]
 jmp    WORD PTR [eax]
 fldenv [eax]
 fnsave [eax]
 frstor [eax]
 fxsave [eax]
 fnstenv [eax]
 fxrstor [eax]
 lgdtd [eax]
 lidtd  [eax]
 sgdtd  [eax]
 xsave  [eax]
 xrstor [eax]
 xsavec [eax]
 xsaves [eax]
 xrstors [eax]
 xsaveopt [eax]

```

You can reproduce the bugs through Godbolt Site:
x64: https://godbolt.org/z/EvosqvGhr
x86: https://godbolt.org/z/4cYbsbGfG

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WV-P2jgQ_zThZVQETqDsAw_bXdjrQ3X9J931Xk6OPSRuTUxtw0I__SkhJZvETgIrHaro4vnN33jGPznUGJFkiMtg9i6YPY7o3qZKL5-FjbXIklGs-Gn5HrgwTB1QIwebUgs2RZDUorHwIGmWgNjutNqhlidgKbIfBra4VfoERvxC4EIjs-KAZhxMHoPJfflNwoCE8EANwvS8NMAVF4ZKqZ4NHKgU3OMI4r2FEieyLmQtpC87ZGIjGJXyFJAHeE4xg_ewN0U42OUSAkI-_fXn50f4-PVzQAhslAYmtTGxOQHNOGhjlTZmByIzVu-ZFSrLnZzzwq2wFjnQDFBrpWGLxtAEx3AO7Q_1jAfUlQJlDHe2DOx3jrVwHl-EU0vz3T5JTsAUx3J1Pin_FT_HIrMo_zWnzNIjZGqncSOOF9UgLM1U6V08QTB79_n-72D2WIYNABCQdUDW98bgNpYnWBXpNcUXW58ctopPpXGppMNviXL67Pg0w7m4qIWzeplao2rn7we13QmJHB581a1VEMCdt6bHSy4d3r6pPTCagcadVnzPEETeMlrtkxQSxWMl7Rn5Bo7zKAjvIbV2Z_IAijRLzFjpJCDrXwFZm2MYLRbpT7zoLeZD9A4xss2Mf3zytTiB4T2u0ECm7HmYdDfu11SYsmNSaiBGzEBwzKzYCOQgMoimoHb5Zs9HQV6GohtJfXUxd3RI_gwhIIu8dOTudb0CABQNZuxZcJySxQ8J_3z44NrrLgUym_sVHPuYouHY78rdAZVyv9sXfXP5Kx-fbqUGpiukCtr8_X2784ZUonJIX76eEVD52UiO2WFI6Tx13GSGHtBj4AWsmDX9sGOHtSGx2Buyeen-mjDn0QBgYdCLHPKUJLdCItskV9moYpAJt1c_4JoB4TXQ3E7mVb6MvSVTx66-YRc1cu7cCP3auX_WuzsKmLk9znOQVxtoBHDt5mxVaUAfnAsyFKh2126iZk1fnZPfQjvWHmg_heo5fhtHbPOEbTApx5HqRNSOziaieTq2LRRnG8DaR-iGQfIz7PWQ8hBzCM6Hk0Nwbm-H4OjTKM8Wl0q3sXnkV3LIqnHf1ipGObgEwiMwbo1q0rZVzhVwCXx5luOuKSjHm8-QU-ItmLdeL4aLR5SPE4_IOLSqAeC31xY6u7zBsBfz_4Fhr65l2KubGXaHZj_DXrUZdje7XvWx62Y4V7HrVYNdl6i-dD0HSR_B7jXVR7BXwwh2j59S3c26u3V7WXdfir2se-WmmC4626qGi7KuWtcs3bx1wOMexDsH2wEv72zl5yaY_Z7qk_n1gd5iY0BoDgLo2A2NGdqmVP55W5upDkKFDTLUpFNNeZNMeeRufRdPcgG8chdFcgG88opA1Zcv9Km-fOEB9eWjG10RpwbcbSbvb95eFflqa9kkzuWKwmD7ZHejmXvZeIw41l9QDbz1ZtOmCPE-MZf7zafzHSR8ERYvO3bgLefqoMzPw1OqS61hd5wR-xab-GlT3nGO-DLkd-EdHeFy-na6mN5F8zAapUsezt6ycDYhiJzOF2TCFtMYF2EU83CDMRuJJZmQaDKfkimZvp1GYxpv8C6cbaINixiN5kE0wS0VcizlYZtHMBLG7HF5NyMhGUkaozTFSxtCmKRZEhASzB5Hepnj3-RlCqKJFMaayoIVVhZveopL1nxi3P9-QcKU1sis-6Z1PNpruWzURth0H4-Z2gZknXso_3uz0-o7MhuQdRGwCcj6HPNhSf4LAAD__2BnE9Q">