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

    <tr>
        <th>Summary</th>
        <td>
            clang-cl writes preprocessed assembly source to current dir in some invocations
        </td>
    </tr>

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

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

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

<pre>
    I am using Clang/LLVM 19.1.2, and encountered an [error](https://issues.chromium.org/398489345) in a cross build of Chromium (host = Linux on AMD64, target = Windows on ARM64), along these lines:
```
FAILED: clang_x64/obj/third_party/ffmpeg/ffmpeg_nasm/autorename_libavcodec_x86_videodsp.o 
python3 ../../build/gn_run_binary.py clang_x64/nasm -DPIC -felf64 -DARCH_X86_64 -W+error=all -Wno-macro-params-legacy -P../../third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.asm -I../../third_party/ffmpeg/chromium/config/Chrome/linux/x64/ -I../../third_party/ffmpeg/libavcodec/x86/ -I../../third_party/ffmpeg/libavutil/x86/ -I../../third_party/ffmpeg/ -I./ -I../../ -Iclang_x64/gen/ -DPIC -MD clang_x64/obj/third_party/ffmpeg/ffmpeg_nasm/autorename_libavcodec_x86_videodsp.o.d -o clang_x64/obj/third_party/ffmpeg/ffmpeg_nasm/autorename_libavcodec_x86_videodsp.o ../../third_party/ffmpeg/libavcodec/x86/autorename_libavcodec_x86_videodsp.asm
../../third_party/ffmpeg/libavutil/aarch64/asm.S:47: error: parser: instruction expected
../../third_party/ffmpeg/libavutil/aarch64/asm.S:82: error: parser: instruction expected
../../third_party/ffmpeg/libavutil/aarch64/asm.S:83: error: parser: instruction expected
[...]
clang_x64/nasm failed with exit code 1
```
This error occurred due to the presence of a `videodsp.asm` file in the assembler's working directory. This file had been generated in a previous build step, and it contained preprocessed assembler source for aarch64. The assembler picked it up for some reason and attempted to generate AMD64 code from it.

Further investigation showed where the `videodsp.asm` file came from: an invocation of `clang-cl`. But it was not the Chromium build's intended invocation, which is as follows:
```
/opt/llvm/bin/clang-cl --target=aarch64-pc-windows -c -oobj/third_party/ffmpeg/ffmpeg_internal/videodsp.obj /showIncludes [various -D flags elided] [various -I flags elided] ../../third_party/ffmpeg/libavcodec/aarch64/videodsp.S
```

That works as expected, with an `.obj` file written out, and no other side effects.

However, when `ccache` is in use, the command is modified slightly into the following:
```
/opt/llvm/bin/clang-cl --target=aarch64-pc-windows [various -D flags elided] [various -I flags elided] -c /showIncludes -fcolor-diagnostics -Foobj/third_party/ffmpeg/ffmpeg_internal/videodsp.obj ../../third_party/ffmpeg/libavcodec/aarch64/videodsp.S
```

And for reasons unknown, this invocation generates a `videodsp.asm` file in the current working directory.

Here is the full output from an invocation of the first command above, with `-v` added:
```
clang version 19.1.2 (/home/runner/work/llvm-project/llvm-project/clang 7ba7d8e2f7b6445b60679da826210cdde29eaf8b)
Target: aarch64-pc-windows-msvc
Thread model: posix
InstalledDir: /opt/llvm/bin
 "/opt/llvm/bin/clang-19" -cc1 -triple aarch64-pc-windows-msvc19.33.0 -E -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name videodsp.S -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu generic -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -target-abi aapcs -D_MT -flto-visibility-public-std --dependent-lib=libcmt --dependent-lib=oldnames --show-includes -sys-header-deps -stack-protector 2 -fdiagnostics-format msvc -fdebug-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -v -fcoverage-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -resource-dir /opt/llvm/lib/clang/19 -D HAVE_AV_CONFIG_H -D _POSIX_C_SOURCE=200112 -D _XOPEN_SOURCE=600 -D PIC -D FFMPEG_CONFIGURATION=NULL -D CHROMIUM_NO_LOGGING -D _ISOC99_SOURCE -D _LARGEFILE_SOURCE -D USE_AURA=1 -D OFFICIAL_BUILD -D __ARM_NEON__=1 -D _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -D _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D _LIBCPP_INSTRUMENTED_WITH_ASAN=0 -D CR_LIBCXX_REVISION=1f7db7501cf902d5d3ad5fd9b31bea33bb8bf9da -D TMP_REBUILD_HACK -D __STD_C -D _CRT_RAND_S -D _CRT_SECURE_NO_DEPRECATE -D _SCL_SECURE_NO_DEPRECATE -D _ATL_NO_OPENGL -D _WINDOWS -D CERT_CHAIN_PARA_HAS_EXTRA_FIELDS -D PSAPI_VERSION=2 -D WIN32 -D _SECURE_ATL -D WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D WIN32_LEAN_AND_MEAN -D NOMINMAX -D _UNICODE -D UNICODE -D NTDDI_VERSION=NTDDI_WIN10_NI -D _WIN32_WINNT=0x0A00 -D WINVER=0x0A00 -D NDEBUG -D NVALGRIND -D DYNAMIC_ANNOTATIONS_ENABLED=0 -D _CRT_NONSTDC_NO_WARNINGS -D _WINSOCK_DEPRECATED_NO_WARNINGS -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -internal-isystem /opt/llvm/lib/clang/19/include -ferror-limit 19 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.33 -fskip-odr-check-in-gmf -fdelayed-template-parsing -fcolor-diagnostics -target-feature -fmv -faddrsig -o /tmp/videodsp-bb587f.asm -x assembler-with-cpp ../../third_party/ffmpeg/libavcodec/aarch64/videodsp.S
clang -cc1 version 19.1.2 based upon LLVM 19.1.2 default target x86_64-unknown-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
 ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64
 ../../third_party/ffmpeg
 ../..
 gen
 ../../buildtools/third_party/libc++
 ../../third_party/opus/src/include
 /opt/llvm/lib/clang/19/include
End of search list.
Note: including file: ../../third_party/ffmpeg/libavutil/aarch64/asm.S
Note: including file: ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64/config.h
 "/opt/llvm/bin/clang-19" -cc1as -triple aarch64-pc-windows-msvc19.33.0 -filetype obj -main-file-name videodsp.S -target-cpu generic -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -fdebug-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -dwarf-debug-producer "clang version 19.1.2 (/home/runner/work/llvm-project/llvm-project/clang 7ba7d8e2f7b6445b60679da826210cdde29eaf8b)" -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -dwarf-version=4 -mrelocation-model pic -mincremental-linker-compatible -o obj/third_party/ffmpeg/ffmpeg_internal/videodsp.obj /tmp/videodsp-bb587f.asm
```

And here is the same for the second command:
```
clang version 19.1.2 (/home/runner/work/llvm-project/llvm-project/clang 7ba7d8e2f7b6445b60679da826210cdde29eaf8b)
Target: aarch64-pc-windows-msvc
Thread model: posix
InstalledDir: /opt/llvm/bin
 "/opt/llvm/bin/clang-19" -cc1 -triple aarch64-pc-windows-msvc19.33.0 -E -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name videodsp.S -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu generic -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -target-abi aapcs -D_MT -flto-visibility-public-std --dependent-lib=libcmt --dependent-lib=oldnames --show-includes -sys-header-deps -stack-protector 2 -fdiagnostics-format msvc -fdebug-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -v -fcoverage-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -resource-dir /opt/llvm/lib/clang/19 -D HAVE_AV_CONFIG_H -D _POSIX_C_SOURCE=200112 -D _XOPEN_SOURCE=600 -D PIC -D FFMPEG_CONFIGURATION=NULL -D CHROMIUM_NO_LOGGING -D _ISOC99_SOURCE -D _LARGEFILE_SOURCE -D USE_AURA=1 -D OFFICIAL_BUILD -D __ARM_NEON__=1 -D _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -D _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D _LIBCPP_INSTRUMENTED_WITH_ASAN=0 -D CR_LIBCXX_REVISION=1f7db7501cf902d5d3ad5fd9b31bea33bb8bf9da -D TMP_REBUILD_HACK -D __STD_C -D _CRT_RAND_S -D _CRT_SECURE_NO_DEPRECATE -D _SCL_SECURE_NO_DEPRECATE -D _ATL_NO_OPENGL -D _WINDOWS -D CERT_CHAIN_PARA_HAS_EXTRA_FIELDS -D PSAPI_VERSION=2 -D WIN32 -D _SECURE_ATL -D WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D WIN32_LEAN_AND_MEAN -D NOMINMAX -D _UNICODE -D UNICODE -D NTDDI_VERSION=NTDDI_WIN10_NI -D _WIN32_WINNT=0x0A00 -D WINVER=0x0A00 -D NDEBUG -D NVALGRIND -D DYNAMIC_ANNOTATIONS_ENABLED=0 -D _CRT_NONSTDC_NO_WARNINGS -D _WINSOCK_DEPRECATED_NO_WARNINGS -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -internal-isystem /opt/llvm/lib/clang/19/include -ferror-limit 19 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.33 -fskip-odr-check-in-gmf -fdelayed-template-parsing -fcolor-diagnostics -target-feature -fmv -faddrsig -o videodsp.asm -x assembler-with-cpp ../../third_party/ffmpeg/libavcodec/aarch64/videodsp.S
clang -cc1 version 19.1.2 based upon LLVM 19.1.2 default target x86_64-unknown-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
 ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64
 ../../third_party/ffmpeg
 ../..
 gen
 ../../buildtools/third_party/libc++
 ../../third_party/opus/src/include
 /opt/llvm/lib/clang/19/include
End of search list.
Note: including file: ../../third_party/ffmpeg/libavutil/aarch64/asm.S
Note: including file: ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64/config.h
 "/opt/llvm/bin/clang-19" -cc1as -triple aarch64-pc-windows-msvc19.33.0 -filetype obj -main-file-name videodsp.S -target-cpu generic -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -fdebug-compilation-dir=/home/build/u-c-windows/cross-build/build/src/out/Default-arm64 -dwarf-debug-producer "clang version 19.1.2 (/home/runner/work/llvm-project/llvm-project/clang 7ba7d8e2f7b6445b60679da826210cdde29eaf8b)" -I ../../third_party/ffmpeg/chromium/config/Chrome/win/arm64 -I ../../third_party/ffmpeg -I ../.. -I gen -I ../../buildtools/third_party/libc++ -I ../../third_party/opus/src/include -dwarf-version=4 -mrelocation-model pic -mincremental-linker-compatible -o obj/third_party/ffmpeg/ffmpeg_internal/videodsp.obj videodsp.asm
```

Note how the first command writes the preprocessed source to a temporary file (`-o /tmp/videodsp-bb587f.asm`), whereas the second just writes it to a path-less file (`-o videodsp.asm`).

As the Chromium build error I presented above illustrates, writing unexpected intermediate files to the current directory should be avoided.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW91v6jiw_2vSF8sohELhoQ8pCW20ECqgp2efIieZgLeJHdkObf_7q3ECpR_n657dvbraSkc9xHbG45nffHgYmNZ8KwAuneGVMwzOWGN2Ul1y_dCIh7NU5s-XEWEVaTQXWzItmdg63mw-_7Ig_Umv3_Mcb0qYyAmITDbCgIKcMEGc4RUoJZUzDBxvvDOm1s7Ad7yZ48241g3oXrZTsuJN1ZMKaQ4m4_PxZHA-dLwJ4YIwkimpNUkbXuZEFmTarSdIUGpDnEFA5lw0T0QK4i-C0TkyY5jaQjt5z0UuH7WdXi1wemLZLaXYErMDDaTkAixnru-M3O6f68_8aB4GzsAnGR45ecKXZzL9y_FmZsdVntRMmWfHmxVFVcP2-CERTFeON2ONkQoEqyApecr2mcwhS57Go2TPc5C5rnuSOK5fP5udFAPS6znezP6x53W82VYkqhFJygVTz736-RUnuAuhwW00JbSAshidExr4q-lN8nU8SvDp3vE6DQwCVpaE3gtJK5YpSWumWKVpCVuWPRN6-7L3N4520BR-lKLgOGa1AY43K1EDjjdrGWvne5a96O8k_DPkXiSNr41Hv_JaY3j5S2_hmrdLCY1OtbQFYQdbPS2CfxJMvZxQ-Y-i9X8j_p8gjBy4_i8piTGV7ewZma56a2fgn1-grXZ490nNlAb7iQttVJMZLgWBpxoyA_nvbzf2_t3tBr-2nTO86vV66Hpd_53XKBgvISeP3OwIPHFDUCek_8YBbnZctzsSmWWNQreeN0CMRMdJagUaRAbolxlxRu4rdY5cUvAS0IvjYqY1VGkJyvEuNHmU6gFjSc4VZEaq5x6xm9k3diwnKYAgWxCgmIG8DQW1gj2XzSEaaAP1IfDYEwjDuIAc19VKZqA1hqHDvkTLRmVACqlIJ13c9IQzUvPsASyxprbrtKyAKGBaCrsNMwaqGhky8shdG3VaCRZKVoSbHgrS9WeNMjtQhIs9aMO3zOpI7-Qjyn4HCqxoviW5jFUtRdQyE0hGZi0NWeBbVq00K52R2yNXjUHOH5kmQhpL-Bgsu3ByoQkXBkRuJXoghjJ83PFsR7gmTJNClqV8_CAeojupDQK13KPDSDl6tgMThNI26mKsaeVL64w-duGXZoTKn_FGyKESDI3gxe-kfxHHm6HkIpGVTQ4ak4s9UxYPNCBFybaaQMlzyJ1h8Go2ejf7a17sxRaPDK3figaNhRmLayvEoyGicNHKMB0auXiSo34fFTcGBJGNOeBYSCItZDTPgUBRQGZ0h6Yb-Qh7tB9UF1hyWcayHSBBjqoljQab_eyAZLKqrGVoUsmcFxxyoku-3ZnyGVHQmnCray62f7O2f0c5NHuna1pkspSK5pxthdSGZ5rQ2W_B6Z-AgC9y6zZaj6FJIx6EfBStSqyGjgZ8cB76x57TOl5hPvCZHS7Qj3Dd6rMpS8RT3ZjWF71zG3YVV9ocEcJSuYcjTp2RS_fIAstRH-9gYQFA9qA0EmzTf0zGHW-2a1M21QiBMJ0hwx1-aK3kX5CZ948tvYuUXeRj8IqLdHR-PkxH7uhikrOxN_L6bpbn4E2AFeMUk3fX33TI88l76NFK7zNrjgpYjtiH0sZLqfmT4_qR0IaVJeQBt9HzI5i7OOx9zwD6E8fzCM2yPqFG8bqEb7HSn_QGg55LaEhozjVLS6CFAiA0K4EpyrShKRRSAU1Z9gAif1lnRbUHhdar7HDGVE73rGyAYj6lCa0YFxThYgfICzwJrRSUneaplQMGOEJrntES9lASj9CqUKwCWktrJ84gEFIAoQpK9gQ5ZSVn9tJHi4qZHQWlhCS0KGqK8VaxDB2AFIQWQlIlG5FzsaW4ltAqk11qIlVLyZpyI1A-1OARtTMIPNK5EprVTWsYyGY3VgAzjQLieFf7MftouKgpU9V-_NGcAOStG2cpJ4zV6DuCZLEhtCiNpHuuecpLbp5p3aQlz6g2OaE0hxojpTC05KkzCEqeZpX5YEKWeacLik6L8qPX0s-a7oDloPAlHDAse0DwG2vBqIDixKfRQqqKGYK4wRlImy3NZFXzstVijpgNXkztcE1s6BF0CFG8MtPD3OF_rdCR2VgzC6BgTWlQbnhN3FsHuwfFtvBv7KegzcWQ_jsDRKF2ZuZ4s_4EA8iN_yVM_C_JdBnPouvkBseS2-U6-ppMk_XybjUNEUiu2-97du7r8jaMX2ZGrovD9gYWkNlscRted8TuVv4mWsbOIIjv5nOcnt6slovobpHEy2S-vL6O4mtLM1ovp5NJR9SOzP3VdTiL5uHJ4N06TPy7le8Mgj4-L2ezaBr58-TqLpoH9rXEXy2SOFzGSXJYlcyjq-ntbXLjr4IwjuLrZLEMkPOPJ5Lw6yaM19GX8PTlIFr7V_Mw-RKto6toHm3-TPw4Xm7sAdenK6N4vVndLcJ4EwbJfbS5Sfy1jzKwYpqu7LqvX5NViLSsdPrFRZ5eDN1-VkxcLx_mA5YPi3ySDvopsMEgTcdpMckZEtgsbpNVaA-c3PjTP9pTrzdBYuWfTFebZOXHQbI-Pq7D6d0qRJEH4e0qnPqb9mjr6fybc_5mjoOo6murueQ-ioPlvaU6DVebZHrjR3Fy66_85MZfo9RWfjKLwnlg19yu_dso-RKuujNa7NxH8aAFUbevv5l347h65i-i-Z_OIHj1nATh-o_N8jbxb2-PRJJ56McJnnMR-jEOx8tFFC_8r5b8XRxNl0ELmpeP8SYITnlqn--juO8mcXQ45cDDv_EGVfbk-i2876P4S7h6NRQH4dWdhW_8xZ9fr6LYQjD4M_YX0fQUHkkYI3iCAwisVuJlvN4EU5Tyvb9C-K0PHKyX0z9e9BG8XhL9OL36btXn0Ybazlv8iNjJCvy4BfH6HeuQjJSlfkcAfbrjXTne1fe2kXWjjw6t8-6EHhJLyvWzNlD90JGdvlzYWzUtecUNQR-H4bPRQLMnRpmxV3JaVJrCkwGBqZZun9E7M9MFrA-GaJeZocVi5kFooR94TWWuaLaD7IFyQbdVYcNLyZ4hp3ilLZkBWjPVxfoPsu03sZUWFUYNludK8y2hEo9vqvokQ6ZpOhxfFG0Z8Onlmk0xz6RZXf89OXibQNpU7E1WmjINOWlqKchJrZrkbTA61IifbK2Udrk6tQVHuhWNvQINDhpzPK-HnHpEA_JBtGHKaIKX-C5JPlk8mOLiQfjNxX-fffwEsZMVro_28fqdn7KP723zkX20OfTPGoTj-qGw9f1OYCXXtogSSwNtjQvXITgx1cWR36qm_Rbhn9bMsRC--6UbBdM_fadAns1zDQRvtN-7CvzDCfZ_wd__e-l4_shUQdvtaiXzJgNMk73_-6s3IvS_oOtWAy-h9Pybl-mKi0xBBcKwEmPHA6hjQC4B4-Jv1jy_GVM_Lj_tTopB2taPpWofIJMiPxR9Pus6n3Wdz7rOZ13ns67zWdf5rOt81nU-6zqfdZ1v1HVOv5r8rON81nE-6zifdZz_z_79s47zWcf5t-s4b_pc39Rt0IeRnXz8oDfnUXED-tBt-dLV2PUyGkkYwTgvFVPPbdcQAmnk_uALGdy77YO3bYhMn9aI_mq0OezMTbtJzcyOlqD1m03eNC453qTrSvL1By2IXTNp1LWOGui6jwgvy0Yb2xBlmVLcoC9vxKGPzjYuqgpyzgxYHvShDfXQH3XsiyJ6J5syJykQtpc8h7x3ll8O8slgws7gsn9x7p5fjPvD4dnu0p2k7mDQh4vBeToZ5l7hjgbD0fAiH50zdzj0zvil53pD1_OGfded9Ic972IwybLJoO-5wyJnrnPuQsV42UOr7Em1PbM_bbjse-PReHxWshRKbX9Z4XkCHomdxSAyDM7UpTXltNlq59zFYKlfyBhuSrg8Ntx1CvmoufX5BA8n0iBctB2sLx1g-qxR5eXrX2Jsudk1aS-T1UmIf-1h2h9rYLBvD7W_9P4nAAD__8zHPLk">