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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] [Modules] Crash when exporting header unit
        </td>
    </tr>

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

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

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

<pre>
    To reproduce, set `CLANG_BIN` to your clang binary and run this script:
```sh
#!/bin/bash
set -e

# ==== ðŸ”§ Configuration ====

CLANG_BIN="/usr/local/bin/clang-21"  # Set this to your clang binary

OUT_DIR="./build"
PCM_DIR="$OUT_DIR/pcm"
mkdir -p "$PCM_DIR"

# a.hpp
cat <<EOF >a.hpp
EOF

# b.cppm
cat <<EOF >b.cppm
export module b;
export import "a.hpp";
EOF

echo "🔨 Precompiling a.hpp header unit"
"$CLANG_BIN" -std=c++20 -fmodule-header a.hpp -o "$PCM_DIR/a.pcm"

# ==== ðŸ“¦ Precompile modules ====

echo "🔨 Precompiling b.cppm"
"$CLANG_BIN" -std=c++20 -fcxx-modules -fmodules \
  -Xclang -emit-module-interface \
  -fmodule-file="$PCM_DIR/a.pcm" \
  -c b.cppm -o "$PCM_DIR/b.pcm"

echo "✅ Done"
```

It will now crash:
```
🔨 Precompiling a.hpp
🔨 Precompiling b.cppm
b.cppm:2:8: warning: the implementation of header units is in an experimental phase [-Wexperimental-header-units]
    2 | export import "a.hpp";
      |        ^
1 warning generated.
clang-21: /home/***/Documents/llvm-project/clang/lib/Frontend/FrontendAction.cpp:687: bool clang::FrontendAction::BeginSourceFile(CompilerInstance &, const FrontendInputFile &): Assertion `hasASTFileSupport() && "This action does not have AST file support!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /usr/local/bin/clang-21 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -clear-ast-before-backend -main-file-name b.cppm -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/***/delete-me -fcoverage-compilation-dir=/home/***l/delete-me -resource-dir /usr/local/lib/clang/21 -std=c++20 -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/***/.cache/clang/ModuleCache -fmodule-file=./build/pcm/a.pcm -fmodules-validate-system-headers -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -emit-module-interface -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o ./build/pcm/b.pcm -x pcm /tmp/b-8749f9.pcm
 #0 0x000055fa339a4b89 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/***/Documents/llvm-project/llvm/lib/Support/Unix/Signals.inc:804:11
 #1 0x000055fa339a512b PrintStackTraceSignalHandler(void*) /home/***/Documents/llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
 #2 0x000055fa339a2ebc llvm::sys::RunSignalHandlers() /home/***/Documents/llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x000055fa339a58eb SignalHandler(int, siginfo_t*, void*) /home/***/Documents/llvm-project/llvm/lib/Support/Unix/Signals.inc:418:7
 #4 0x00007fcd0ae4bcd0 (/usr/lib/libc.so.6+0x3dcd0)
 #5 0x00007fcd0aea5624 (/usr/lib/libc.so.6+0x97624)
 #6 0x00007fcd0ae4bba0 raise (/usr/lib/libc.so.6+0x3dba0)
 #7 0x00007fcd0ae33582 abort (/usr/lib/libc.so.6+0x25582)
 #8 0x00007fcd0ae334eb __assert_perror_fail (/usr/lib/libc.so.6+0x254eb)
 #9 0x000055fa34d4eedd clang::FrontendAction::BeginSourceFile(clang::CompilerInstance&, clang::FrontendInputFile const&) /home/***/Documents/llvm-project/clang/lib/Frontend/FrontendAction.cpp:689:50
#10 0x000055fa34c5d8d3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/***/Documents/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1054:9
#11 0x000055fa34f3541d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/***/Documents/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:300:8
#12 0x000055fa2f32f198 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/***/Documents/llvm-project/clang/tools/driver/cc1_main.cpp:294:13
#13 0x000055fa2f320d73 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/***/Documents/llvm-project/clang/tools/driver/driver.cpp:218:5
#14 0x000055fa2f31faa9 clang_main(int, char**, llvm::ToolContext const&) /home/***/Documents/llvm-project/clang/tools/driver/driver.cpp:259:5
#15 0x000055fa2f356bfa main /home/***/Documents/llvm-project/build_debug/tools/clang/tools/driver/clang-driver.cpp:17:10
#16 0x00007fcd0ae35488 (/usr/lib/libc.so.6+0x27488)
#17 0x00007fcd0ae3554c __libc_start_main (/usr/lib/libc.so.6+0x2754c)
#18 0x000055fa2f31f4f5 _start (/usr/local/bin/clang-21+0x1e004f5)
clang-21: error: unable to execute command: Aborted (core dumped)
clang-21: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 21.0.0git (https://github.com/llvm/llvm-project.git 64555e3d48223c4c5a851f0cbe0278ec6f2241ba)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Build config: +unoptimized, +assertions
clang-21: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-21: note: diagnostic msg: /tmp/b-a6db61.cppm
clang-21: note: diagnostic msg: /tmp/b-a6db61.cache
clang-21: note: diagnostic msg: /tmp/b-a6db61.sh
clang-21: note: diagnostic msg:

********************
```

I found this issue while investigating #58540.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWV1z46jS_jXkpguXhCRbvsiFYsczqZrdpCbZ3ffOhRCS2UigApR43l9_CpA_8zUzO3vOlGsio6Z5uul-usHUGNFIzi9RdoWy5QUd7Ebpy0fVt9RclKr6dvmgQPNeq2pgHJEFGG4BTaPFl-L3T-urm9_RNAKr4JsaNLCWygZKIan-BlRWoAcJdiMMGKZFb1FSoKhA0yh8zMZ9IwkiMSKrUkj3P_WjbhXM3WsvAShZ7j-AVhGar9A8RcUMFkrWohk0tULJE7kw-wA0WSJCEFkNRiOyahWj7X5Zjxw7HATALXjPbUD-mm1B8-0fD-vlzdegd-JUDaKt3BpRcbf47fAOkXQnS1Y964JI91gJDbiHILGb4d-NVtPJpu9RVDBqASULlCyub1eAkuvdi-vb1UG6nLC-714T37_h215pC52qhpZDiZKrw6Do_B9ESNBOSHi9X4OzjfJgD-7P4U5zprpetEI2AS9sOK24hkEKO1rjDTxsBCGAja1QsmSIXCFyRSLAdQCFx9lBFVbn3lnRyd6D78VGgorpARwfTTavBMjHZo3u-wFb2HaLdyvuLDOAsgWKCgD8fyGYMO-EHeWwkJbrmjJ-ENu5pBYt30fSS08cJrAR6mt-K0_8tjf6mqD5AuUZLJXk4-tdfgbRGwvPom1Bqmdg2qXnaRa75_cj4l2JfWyOD0lBUFLkKCngmWopZOMe7Ya7AG15x6UNqa7q40gzIAwICVQC3_ZcCy_YQr-hxrn0Cv91PD6GGfZTUbb0_gMggGYL-CAhwP9zguM_lF2jqIh3eKHhkmtqeTVxybhjlqQARFYb1XFEVogUu89qqdjgUBnHSu1Th3ut_ubM7mjJDYsSkdVKK2m5rI4eC-Z84TyHkmKaz9wqpVJtoCu3U0lxKhvGrngj5L0aNOMrF10kX4RE0TfSWCpdGJKp43umpLGw03Ej-8G6GeH13K1XGMN1YN9ptKGmuH9wEvdD7_yHSI7IPIhPnTMfHKtSjwUqxQ1IZWFDnzgU9w_gYh3Mbmrso3gGNRVtcOfdl-vi_hrMUHbCAoVyaFx9chtlFWys7Y2z0Hl41Qi7GcoJU93o2ZcOFsYM3DnelyshWTtU3EebD3UoKXu0mobS1_tCyLgxvALjneeG3UxqjGLC7bmveaHcObz3lrJHqIauD2kTTULM3GnVaNoB1c24-SE-3itOgBmLAVst-pbDNp-upyke5KNUzxK3Qg5b3MhhpBVV_g24EoaWjkE054BZy6nG1Fhc8lppjp11XFaAOyqkpxksacf3LNJp7pC4rXI0xVvoBQPcC4Zb_sRbIOGLMLgXHHBXa9px3CtPZihZ0rZ1NEbtBnOtpQJc1z1mSjqfWpQslQRcS4W1GmQlZIOdLODOR50emFUa01ZQ44l0kM9CVtg6mwxKlgSwpbrhFrN-cA7B0xSwHST3Az4PHeCKl0PTcO1eeUJZNlUJuPbjOHBRsLIS2jPta3la8ZZbjjvuCF49cU0b_n2T29PZmofgcRNe7nnI9V3mu11_WV8q3mvOXLjhjjLt_Mq1Vhq3wqVFPAdcN3Jg-Ilr45N-mU7IJD4qRrh2fCrYoQJ1tD-qVphRtuG4p3bzpkcmXuYI7W9-7sKNvihfRx1SaIJCATta8Ym2oqKWY_PNWN6NHO0wmUfRY1VpzDacPWIhcdPVY53lW8Z7538nePKFqVZpXAnaSGWsYOatiotrWlXaiAbwcr3-tFisPxd_Xq-XfxVfV2S9WN2si_vfULKMXWF9aUcZ7NiC-4PIyna9G8X5LJ3Xc193I5fcSQTRNoqiKMtqmiRzmpb5HDwxeVI230x4uNNCWs8cD4F78oOQps9rZazmtBsZWkgbGPYHi8uOEX287dl69YcUWzcgGklbMxGSuXocpSgp4ng0JD4zJItJCWeog4LPVFYt14jkT0pUHtO_DTWPHNQRKTlDSnjJXnP510GeADb7uvVroO4whkodRxlKimzEmJx7M-clnLvP7_ICjGiErNXaeiAL-G95NY1dSzYbEacj4lnNqojytGRVBN5jOzLzOltRsolRkykiV9E2qVgVuZ4h6MhOddBsStIPdcxnU5IedEzPcZQ0Ak2Fa_k-RFPSIzSzU01JkuUEaBkawPc1kSzLyUFTfq4p5SWs19R3Seve8_TaNTTfoTjl5UHx_DhM0irlvKp-vM87mnDe8u06vpcqD22fL8yh9_v321nXXmZROObFJ-SZsqzKqwTes8aPXm85GywffXJi_pm_frVN53gOqe-odD5adcKkaZ1kaXyyqSP-g7KnsSH7aCt_jhJet-ZBKdeZvIllNC2JIn90C5YdMy-pE1LH8xwYi9eu2TwpaYXW9NtXXqNkwTZU72KsQMm1j8eTsX_IeTsDrVKte11p8eT4dbVDNtpC5r7gJaMxyZkxUTVLYOePRRwcdGTSfUfb9k_u-tebrm9ftcwn22GK07Fw_t7aX5NlL0wMDzsDPaFno33pqX1xTek8hOFuu8b648zYgfhfos_mR-izU_TZtKwpONw_vrzv7Nb-YHAE4u2o8UezE2jxzGf5CO2sQiVZmucfE_8szfNA_E7HeW3KspTBeu3mrI2l2q5HWz_SmqXsoDU_3_K0ziDoO1X1xkXpVbSNeRSldRZ0Hl90-CLnHgbpzmruaM5DsgBTXUdl5S8OXHnllVuNKc39KZlX72gL12b1yEo7VePtAFSDX8j4vsUpHQwH_OTHOAdxRJ37FWA8IAGJJ9EkaoS3_ceuESZu1jTNsownVZoTkrCUZTTP4jpiJY_ILOdsWhOSxiUNaz_4U6sz6a1TvBPaaE4r8AdvJ9orI7YoKjzHty2vlkK_eWsQFVcukl0u1qIJYleDVL0Vnfh_5-WFG6G7uxtz5nOprKugcDg9QWea8eqP_IOPv1Mcb3GKh4di8RkePl_D6vbLl9u_bn7_BKubL9f38HDrh6_--ARfr-9uvz6Epe9eu4LJjWOaN69h9gKag7_O4BXQ8beI7zL5-ExHp1U5jfc37T873Z-bf36-_43ku7frn-_Y2Y0w1GqQVfh9xN-gwfPGNYdCPnFjRUOtkI3v8fMsjSYX1WVSzZM5veCX8SwleZSR6fxic8nqOmJJHc9nNJ9Pa1LGVVLNnMQ0jaMovhCXJCJZlJA0ypOUzCd8ntc0zeopjVhW8zlKI95R0U5cQk6Ubi48nss4IdM5uWhpyVvjf90iZCRxgrLlhb70GVwOjUFp1ApjzUGFFbb1P4kt_IxsCSi7Clcbxn1b-KvB5w2X41Wxs_boLvpi0O3lz19FjtifLsl_AgAA__8nPHb0">