<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132023>132023</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Use of wrong-architecture inline assembly with `-fopenmp` turns diagnostic into crash
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
whisperity
</td>
</tr>
</table>
<pre>
When porting a project which originally targeted _X86-64_ to _ARM64_ (MacOS), I've come across a crash which I was able to reduce to the following.
```c
#include <stdlib.h>
__inline__ uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
int main(void) {
rdtsc();
}
```
The code is diagnosed in normal compilation mode:
```
❯ ./clang --target=arm64-apple-darwin24.3.0 -c ./temp.c
./temp.c:5:36: error: invalid output constraint '=a' in asm
5 | __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
| ^
1 error generated.
```
But crashes with `-fopenmp`:
```
❯ ./clang --target=arm64-apple-darwin24.3.0 -c ./temp.c -fopenmp
Assertion failed: (IsValid && "Failed to parse output constraint"), function EmitAsmStmt, file CGStmt.cpp, line 2747.
Stack dump:
0. Program arguments: ./clang --target=arm64-apple-darwin24.3.0 -c ./temp.c -fopenmp
1. <eof> parser at end of file
2. Per-file LLVM IR generation
3. ./temp.c:3:21: Generating code for declaration 'rdtsc'
#0 0x00000001041c310c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
#1 0x00000001041c11d0 llvm::sys::RunSignalHandlers()
#2 0x00000001041c26c0 llvm::sys::CleanupOnSignal(unsigned long)
#3 0x0000000104117b7c CrashRecoverySignalHandler(int)
#4 0x0000000188386de4 (/usr/lib/system/libsystem_platform.dylib)
#5 0x000000018834ff70 (/usr/lib/system/libsystem_pthread.dylib)
#6 0x000000018825c908 (/usr/lib/system/libsystem_c.dylib)
#7 0x000000018825bc1c (/usr/lib/system/libsystem_c.dylib)
#8 0x0000000106d4a59c clang::CodeGen::CodeGenFunction::EmitBreakStmt(clang::BreakStmt const&) (.cold.1)
#9 0x000000010497cd18 clang::CodeGen::CodeGenFunction::EmitAsmStmt(clang::AsmStmt const&)
#10 0x000000010497ecbc clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot)
#11 0x00000001049da200 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&)
#12 0x00000001049fc79c clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*)
#13 0x00000001049f564c clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*)
#14 0x00000001049e8b70 clang::CodeGen::CodeGenModule::EmitDeferred()
#15 0x00000001049e8b98 clang::CodeGen::CodeGenModule::EmitDeferred()
#16 0x00000001049e63e0 clang::CodeGen::CodeGenModule::Release()
#17 0x0000000104a7d404 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&)
#18 0x00000001049cb944 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)
#19 0x0000000105845fac clang::ParseAST(clang::Sema&, bool, bool)
#20 0x0000000104cf4080 clang::FrontendAction::Execute()
#21 0x0000000104c8a870 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
#22 0x0000000104d6e9a0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
#23 0x0000000102cb76c0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
#24 0x0000000102cb4d88 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&)
#25 0x0000000104b01ab0 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(long)
#26 0x0000000104117888 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
#27 0x0000000104b01514 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const
#28 0x0000000104ad11a8 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const
#29 0x0000000104ad1370 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&, bool) const
#30 0x0000000104ae85a8 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&)
#31 0x0000000102cb41cc clang_main(int, char**, llvm::ToolContext const&)
#32 0x0000000102cbfca4 main
#33 0x0000000187fd0274
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 21.0.0git
Target: arm64-apple-darwin24.3.0
Thread model: posix
Build config: +assertions, +expensive-checks
```
commit 861efd4b3f93d30d353f0a6eea249fbdac1778a0
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWU1v5KjW_jVkg6pkY1fZXmThVDr9ZjStGXUyPe_OwnBcxW0MFuBK8u-vANeHK8l0Zu6M7uZGkWJjeM5zPoETaq3YKoBrtLpBq9srOrqdNtdPO2EHMMK9XLWav1z_vgOFB22cUFtM8WD0v4A5_LQTbIe1EVuhqJQv2FGzBQccN_9frhfrvMFO46b--sU_IlJ-oeyXB0QqRDb4HpFiD5jpHjBlRluLKWaG2t2Ee4-fqMW0leBRDPCRhSe3A9xpKfWTUNslSmr_u07iL_MvJBOKyZEDRtnGOi5Fu9yh7FOc2zRCSaGgafAolFvnjcOGO8sQKRGpMCpuUFJjHL5mpHFYak94J1A2fWkaavumwU2z15I6IT1YWE4mJIJRVmNECMpuaXglpYcJqsdhPg3vRBiujugG3GiU_3Tgh0i1E14ZlG1wRjAqNp5UWICK26iXUA73VChEyr0WfKbKmX6zVQezRYTHnfcHByws5oJulbbAsVBYadNT6X01CK-vVrjXHFBWX5jfP38iqLpF9R1eInLHJFVbvFjEyPDGMP06X9BhkLDg1DwJRfJltkzwgoUFDvphySLs2XtWr1BWZ2tvVTBGG_8g1J5KwbEe3TA6zLSyzlBvB0SKaPjC06e2j2bAq2C6f9yDGB_k_OgHrXxUplEnvAUFhjrgy9fOufEa-vQAi5-E22G0ThadHkD1g5_0j_kCH6UkdW0tmOD_jgoJPJqovLffgiMQWSOy9ta5C599ug7UWHjtIm_BaMtuVCxAfuqFq23_4HoXxoUEvPnsX5dsGPyQT1tMiryY0v7BUfYd87EfovrJMlr1V6O3hvaYmu3Yg3LW8_w7TIC9syYhKNuA7lD2KapoMHUYFMe6C9RRUpMDHTCLoM3PP3_7gu-_HvwstEJJnU2zZtGeoawmqaf9eZqrtjE3O20wByZpBPChPkVs4YMPkSzByXMSf9IkT1mWJgxLue-9kbLavtj48KsRygUTPhrKwMf3cZKhT422zgDtg1M3OPismkSkFyLSlCdvifg6qgexVVT-H1VcgrFTDYoo5AKFrNmbKBsJVI3DLxOWL4wq7FscS622J8BsDpgWbcHwxifNV2B6D-ZlxgaRcqZVfra8LLNyzSGPReFutAaROylaRO7si3XQx9f43AySuk6bfslfwpwD4mqOmHddkXwQ0e0MUH4JuJ4BkhWrkvJjgOwSqriAalnK_iJUeW73Nc_pqmI45NrkQM3hM6jZy92U9nHQ5_6NAfo9Zn95tvg4HKtHCMfKE10yLfkyPdGoZu6vCsbT8s_TOJagcxLT4DmFeNJIkwuhwNq_oPtG94MeFfdCfhdup0f3wPQAcxbns86obHCrtfR_35Nbb7ffqBzhQWp3oj7P4opTkiR_jvpUnMB_nFP9LHVL5S2wwOuU1Mf1pP4jwpvPh4n3qtNvmH1eO6qOFT8OuS-ajxJORo8cD4JuoRNKRG4f0SSOB7MGZQ7Msgtmq3X-F5n9XYzyOSMo2-KHfr5kdAsdGAP8WMA98OoVcPXDhPsQ8PoCeJ3Bn2L8FSRQCzPMYoZJC54nobpTpdVLr0eLFe3BDmErrGbQPsa1ue8HGYfj_vFoqLLxOPybEpcF4-Fxo5WD53nYlnPFWFvl-bliN5R9B8U3WtmxB_OfiptVxFWZrzo6i8Vf_cmlfnicgz1ATy8KS_w7wZJ5zWNdnpQz99wZz0Xx-rzKPQMb3cwlZF6AWEnLy8D0Fw4w98o6qhjMkCbwGfMLwWemIPOCwddQ0ZmsCfUkcq8ZfS3hFaWzRCOz1CesLfyBhrG0me5lp1StjaEvX6FD2YbtqDkUuNrfUn1ZnI2RDY43ujNR-YWonJclPuiwSR-Dv84EPvRUym_AjnH8htz1vJx4jCmoXhdgMs_9NklpmwSaZwiHo31jgqbh6-EW-ilOYVTKlrLvTac8p5OhuRH7QwJsNulG9z1V_DKW3rSoddO8pknjgx48DerVPjOJM0Jtw5JPk91fr2ypFayxYepktLcn-i-Nv9v420ac9x4mldLHlr_EHif6ufUp07ynJ6OHJYjkTRImlacjr3fD-vLIW5blmQdmh99DhTgezWkH8mVmxT_22FFqcen8VTorY_9z3uS8aK551ac8TWn5rrlOTZbLwhRsOKtGFwv9hNm58GNT61mxn1OvLqln8xL9Eeo_6da-z_sn3f4s7Pw8-0d167VLBiq8N8Jd7uM6T357T_OLazSFcvW-027PnmcbyRs7yHsW-29oPuXz_D7vd5OUTeeEw9Z1EBFSqJ7C_YN7xfyiT1jbMZrHXmX8fr5vlkXHE1LkKKkP-pw6frF_0027PGaTZrEZFdti8Cxc7JSkWTjfjRbwYo-dxhYAi7N9vTrIwHswVmiFSbpMlslW-Bh4nHpENX6vSRRapv6WHrqh_myIB23Fc-jWCRks3oltbJLd0EPvzMYO4g08D6Cs2MOC7YB9t697fl4_4XC5TqHjeZt1VcazhGerrEvoGoCSvOpaTllaFCVNrvh1xqusoldwnRY5yaqkSvOr3XWbde06y8pVWbC0TbqyXeerrPD7RVfQsrgS1yQhqyRLqzQjZZYt26JMgbSQF1necVihPIGeCrn0Ll9qs70S1o5wnWYkIdmVpC1IG_6LQIiCJxy-IkLQ6vbKXPtFi3bcWpQnUlhnTzBOOAnXv1nAusNPRqvtghq2Ew6YG433V2j6eeP1rXx5q_WJ3WjUsWPtBMNCOR2bpVejkdc754bQSiJ3iNxthduN7ZLp0NTwERz_LKZ_ayByF9hbRO4m9fbX5N8BAAD__3whd5w">