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

    <tr>
        <th>Summary</th>
        <td>
            clang incorrectly succeeds when outputting to NFS disk with full quota
        </td>
    </tr>

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

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

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

<pre>
    This is probably very similar to #56499, but it's a subtly different failure mechanism, so I figured it was worth a separate bug.

### Necessary ingredients
1. `clang` outputs to stdout
3. stdout is redirected to a file
4. file is on an NFS disk
5. quota is full on NFS disk

### Expected outcome
Print an error message to stderr, and exit with a non-0 status (as shown by the `gcc` compiler here):
```
> g++ -E test.cc > /path/to/nfs/mount/out0
> g++ -E test.cc > /path/to/nfs/mount/out1
<built-in>: fatal error: when writing output to : Disk quota exceeded
compilation terminated.
> echo $?
1
```

### Actual outcome
`clang` prints no error message, exits with a 0/success status, and produces partial or 0-length files:
```
> clang++ -E test.cc > /path/to/nfs/mount/out1
...repeat until quota fills...
> clang++ -E test.cc > /path/to/nfs/mount/out4
> echo $?
0
> ls -l /path/to/nfs/mount/
-rw-rw-r-- 1 matt matt 746K Jul 12 16:57 out1
-rw-rw-r-- 1 matt matt 268K Jul 12 16:57 out2
-rw-rw-r-- 1 matt matt 4.0K Jul 12 16:57 out3
-rw-rw-r-- 1 matt matt    0 Jul 12 16:57 out4
```

This also happens when output is explicitly set to stdout, which is then redirected:
```
> clang++ -c test.cc -o - > /path/to/nfs/mount/out0.o
> clang++ -c test.cc -o - > /path/to/nfs/mount/out1.o
> echo $?
0
> ls -l /path/to/nfs/mount/
-rw-rw-r-- 1 matt matt 2.6K Jul 12 16:59 out0.o
-rw-rw-r-- 1 matt matt    0 Jul 12 16:59 out1.o
```
I can't demonstrate this in `gcc` because it doesn't work at all:
```
> g++ test.cc -c -o - > test.o
Assembler messages:
Fatal error: can't open a bfd on stdout -
```

### OS details
```
> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:        22.04
Codename:       jammy
```

### Clang version
installed from Ubuntu repos
```
> clang -v
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Candidate multilib: .;@m64
Selected multilib: .;@m64
```
### Steps to reproduce

1. Create a ridiculously undersized disk for testing (probably on a different machine)
```
> dd if=/dev/zero of=disk_image bs=1024 count=10240
> mkfs -t ext3 disk_image
> mkdir tmp_mount
> sudo mount -t ext3 -o loop,usrquota disk_image tmp_mount
> sudo chmod a+rwx tmp_mount
```
2. Set ridiculously small quota on disk
```
> sudo quotacheck -cug tmp_mount
> sudo edquota matt
  (NOTE: I set the block hard limit to 1M)
> sudo quotaon tmp_mount
```
3. Mount small disk over NFS
4. Create simple source file
```
//test.cc
#include <iostream>

int main(){
  std::cout << "Hello, World!" << std::endl;
}
```
5. Run commands, and observe they don't fail
```
> clang++ -E test.cc > /path/to/nfs/mount/out1
...repeat until quota fills...
> clang++ -E test.cc > /path/to/nfs/mount/out4
> echo $?
0
> ls -l /path/to/nfs/mount/
-rw-rw-r-- 1 matt matt 746K Jul 12 16:57 out1
-rw-rw-r-- 1 matt matt 268K Jul 12 16:57 out2
-rw-rw-r-- 1 matt matt 4.0K Jul 12 16:57 out3
-rw-rw-r-- 1 matt matt    0 Jul 12 16:57 out4
```

### Other note
When the output is redirected to an existing file, an error can happen, and it will (correctly) exit with a non-0 status:
```
> clang++ -c test.cc -o - > /path/to/nfs/mount/out3.o
fatal error: error in backend: IO failure on output stream: Input/output error
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: clang++ -c test.cc -o -
1.      <eof> parser at end of file
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm3sys15PrintStackTraceERNS_11raw_ostreamEi+0x31)[0x7f69b56c0d01]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm3sys17RunSignalHandlersEv+0xee)[0x7f69b56bea3e]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm3sys15CleanupOnSignalEm+0xfb)[0x7f69b56c00ab]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(+0xd6bbea)[0x7f69b55ecbea]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(+0xd6bb8b)[0x7f69b55ecb8b]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm3sys7Process4ExitEib+0x27)[0x7f69b56bb007]
clang++[0x4136d2]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm18report_fatal_errorERKNS_5TwineEb+0x113)[0x7f69b55fb673]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm14raw_fd_ostreamD1Ev+0xf6)[0x7f69b56a2126]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm14raw_fd_ostreamD0Ev+0x9)[0x7f69b56a1079]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang17EmitBackendOutputERNS_17DiagnosticsEngineERKNS_19HeaderSearchOptionsERKNS_14CodeGenOptionsERKNS_13TargetOptionsERKNS_11LangOptionsEN4llvm9StringRefEPNSE_6ModuleENS_13BackendActionESt10unique_ptrINSE_17raw_pwrite_streamESt14default_deleteISK_EE+0xc88)[0x7f69bc9aa2c8]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(+0x1b7c855)[0x7f69bcccf855]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang8ParseASTERNS_4SemaEbb+0x244)[0x7f69bbb57834]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang13CodeGenAction13ExecuteActionEv+0xb1)[0x7f69bcccbb71]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang14FrontendAction7ExecuteEv+0x67)[0x7f69bd667b57]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang16CompilerInstance13ExecuteActionERNS_14FrontendActionE+0x336)[0x7f69bd5bf3a6]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang25ExecuteCompilerInvocationEPNS_16CompilerInstanceE+0x29b)[0x7f69bd6e145b]
clang++(_Z8cc1_mainN4llvm8ArrayRefIPKcEES2_Pv+0x99b)[0x41328b]
clang++[0x4114bc]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(+0x20eaed2)[0x7f69bd23ded2]
/lib/x86_64-linux-gnu/libLLVM-14.so.1(_ZN4llvm20CrashRecoveryContext9RunSafelyENS_12function_refIFvvEEE+0xdd)[0x7f69b55ecb6d]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZNK5clang6driver10CC1Command7ExecuteEN4llvm8ArrayRefINS2_8OptionalINS2_9StringRefEEEEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb+0x140)[0x7f69bd23d9c0]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZNK5clang6driver11Compilation14ExecuteCommandERKNS0_7CommandERPS3_+0x3f3)[0x7f69bd208183]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZNK5clang6driver11Compilation11ExecuteJobsERKNS0_7JobListERN4llvm15SmallVectorImplISt4pairIiPKNS0_7CommandEEEE+0x8a)[0x7f69bd20840a]
/lib/x86_64-linux-gnu/libclang-cpp.so.14(_ZN5clang6driver6Driver18ExecuteCompilationERNS0_11CompilationERN4llvm15SmallVectorImplISt4pairIiPKNS0_7CommandEEEE+0x1a7)[0x7f69bd222507]
clang++(main+0x2816)[0x410f26]
/lib/x86_64-linux-gnu/libc.so.6(+0x29d90)[0x7f69b434fd90]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80)[0x7f69b434fe40]
clang++(_start+0x25)[0x40e3b5]
> echo $?
1

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWltT4zgW_jXhRZWUb3GcBx7oYKaZpoEi7EztvLhkWUk87dtKNpD59fsdyblyKaZhnnapVCCWdO7nO-copHW2Pr1f5Zrh1ag65WmxZg9SrZnOy7zgirU1G3j-OAym04E3Y2nXsrwdeBPNONNd2mJ_li8WUsmqZQueF52SrJRixatcl3RE1-ySLfIlFjKcZY9cs8datSuiIBuueCtBdzkaOOcD56x_93z7YtdSSK05RMqrJUjkYKTtJnfEBqEjCl4t8ZvVXdt0rSaRdZvhk93lj_qPpCQRUFK0EAXbOOQqpN0WjMwH2lRXjFfs-mIO1fQPuzwesf90dctpfdEVBW063HEsePzUWEZgLeqyZ3OrchgK5KVStYKloNtS9jLjGVmMVxmTT2Sq3Fipqquhg3XedhreiGBAvaofK5auWbuSZISlEGQC8GmghGIrOGTgTQf-RqzQ6V_2ox-z5cD7ghcbxqyVuh0JwejxwLtoeLvCr7bGW7XQeC_rroLXL6DKxym4GwqztMuLdphXOAVJET4tL6xh6OPjSlbsUeUtHN8714Qjls5h9d4f8klImcnMErUG4G0O97RSlXmF6MpGO5kRmRTRwcC_6IPoZQMdOfNMtB1kO3Dlfuw15FYNTx36lbxJntQbVzowge4EhXTv0I3DkX5Zh-cMGdHmxEsxZ1jIaomDFJn6LWdaQT7ijtFopGQjecuwkhe9dcG40Fj6FE7BG27Y06XQbFi8TcxuHqpH8xoOmctK3rb2bRKE39ivXcFcj7khrDaesJ2erxzywuilQ96bh4KR89Ih_81D-HFeOBS8EYcGonkBJF3xppGVtrnR5wTW5FNT5CInNNay3UNABNfjKhcr2tTSmR0AvjucxNbJw5oN3wcSo_rziLn7xP7JwPFGx4EzZfvKvNuh5thO7EP7XjLBK1TQlmWyrCvdmgLYmipc7WF5KgXvtKSSmdVS2yMonD8YcpQXxXuwfWvrPXObZ71oZ1rLMqWC0QPWDmQuDsF4I3ON8AOOpYuMKmBfWIfvwtAbVEvZokXQr8pd6DRRspAceg-5fX5ds6v5F1YCHgGCjKO_4A-ggl5F9riEctCqHL0JMPPy3Kgw_VcKj3f9utRC5Q1Vhf1F5nkjJ2BX93O77c5ytlvMmn0-qzNZ8bJf-JOX5fpdCs8o8Kmd0sTYLObwN3yHrmCh6pL1cgB469eNYvKHDR_sk_6I2KfNXCDRyBm6nVnske6eq6VsyXlPUZiEwbARwyKvuqfhsuo2wKIkz8i2kuKJQYz8qQ_TjaTnuQkAJE-n0Z5cpHmvC3ITdQuBkeUZhfAvsxnr9eO9qQ9PeRcoJN5Fkad4pyj3LnrJdmJ5F24v_hzeMP3TJ9OdbQUuuwKVDqdAcDTwvwwCpwyDI-5vbTp21tbz81Y2phGFZ21d348Q9K0z2B0ScKbyLBddUXca2A17kkP_AlvqK9kC8UzpSg0Q-r5th04N6l7bXXKxyivT770WQxla78XAP4cdMvmA97-kqllNj4hTkpfUhaZI_3PX8QI0koSX9sMemfLHAhjbot60Ptsd3N-A8sLaskks4m4XdJfVzDzbngciFXXdoEbBlbbd2JPlNRpihWhlHOimHp-e7TrU3BuxOcrhgY11iTjquxvYca9_f241w9BsFSspfgBGu-WrgsnMEqWaYJcYOe365t40t5e2MqNdT4satFZcZazAlGXKtft9570DxtTHvqkjxpvvxqxWMRM3NXCBppPtZNOHG4a6BiOOrjsl5N7s8yyOL6h62tqxDe28EkWXYdrwZ3kNvJW8pL59L65zE4uUkBFpM_myMQPKBGGnj_Yc1QIE8IJtvK-yKGrqUX6vVZENPBfPNsvbM7LKCso7y2hy_qLIGM_uuormnxLpvW2q61RL9UDVVWJOrW0Joyn1_430_2QjvdeMICQU5rW2T4HfqTmm7Nw11Ud3BRVNchaLTeaYEOvHPRTBvjXfRJ6Z3guyfiRqRWSKNZLi1bn-n-zG_U27dzRgW9nRdKZc_ECaGZi62d7i1NsJY5PtWK6arqdKC5aUvdi4is_mhFwpQRqnGx3T1yiDb6u2bYyOBlqW0L9LR8hWKtvFw-bXEBXuT5gKH3OtO0l6WGv22EMOEorrlREZnbMwfmhMmaWhGr6y6LbxA9e6FjldAjAFgLB9YJ-Fc-D6D5Z1ZbO1voOl6a2ql4qXaDWXXWmum6gBft0Jm6qOo0AuSVU1pjEe2EO9uiQgWuzB7Y6viQTCRL0u07pg1GWaKx7MeOSCdd0hrgBgxjp2E9oD4zSsKXZ7dv-Vbgo2tUVWD7mqK5KaPXBF48TV1W_fk_m_v3-5ubr8I75L6AjNF_BKUxNk4w-60tu7LNr0Ui90UVgggkN0nLoeAbCj5I_rgMTz9Vq7Y3O_ZRS8J-_Ed9fzxHUVf0z6mhHnsKDz5LvEcYy_Jotwmo5D4WSOOxiff1iECQrBPF9WvPiKAMBso-MHw1LKI5ap5L78DJbjGQaHqmtuesZxaRgu0mc6Ojz9SYaGYhamEPqQ6lgKevZBqlH6nGr0s7LuG2dyazMziIF8MdEAD29y7IrUcSZbbnu5ZjYFrh9m3geFcSMLR4lBwcRAV3z3DfE5vn9E-xxb0VzXP7LEIg0n_keZB5QCi2yTBeduH5SL8MgS3HO98LO5OT236TEz15lM38vMeGUomsawCyy_sXnqTmKg_hdbRm5MbbCZPznP-bKCGLnQcbUkMxuTu9OvGDylmkuuxOrGjOa6Xwpo3v5FVodPfTvOHj50r8B888jqPp23gKDlnVzEt9fzOAm_m4uD2NDoJTwTdCKet67TVfl_Opk0rbqk3e6ELNfQrbNMesDCtiCTC45BMMGcLFt5Of-WxLGxqIiiA5uKKeeeiH7epjYI04mIxuNDykIs6NnHvRXdUm06m98bHwVzWfI47RMzCA6Ypul4EvnBZ4SI37vVGt_14ycpulb2vrDxmbrHKqfp5N1V4S3uwQXKYrv1_aTn3vMND_EoC8MJFP8MvuGs_0rG3KdUQh4rbtLkSDobWr5_iA3ZOF34_N3Y8IZU3riXYSfcQy3M5QolTfJcaiuRN02P7CTdYJy-iNvELhLCTWgitKkZnSnF18jMy9tvIo7nXnLbw9KOLqDei16maJfdIBUfzC7PkVyinhyo4vmZ_HCN8ZwZdad3UtAIvp6RU5_aKXUkfCGLtUEhb9FVxs2JgikuHh7iHkuy7HkNDrMP-fubdXiYqRwCuc5s5s7sjLzNgGPfXMMvkcVUXphPe5BKP4iQdpIk4gm10vVSrnNBUIkdlwJY6YoVVwl687zVlyKec7zhUF9dA-eZ2afC-Uwd3dnuO0A32AU6KW3KhpNMth9v535ik23hHwnmRG707rL_twVze8F-rVO9kQp_X2HCBCTYKj6e05XObxiIanVZNsXlvA0anqvL_PZQjU0ARfyZDoHz7tbwDcDoVQjPrSbRAXzwDY45yYGOP6-Hy4_w2PO88Sv9oRfZKyfK68gNdzjiLN7fRwlSOdziwzSbHoZp4AcLevZ3ySUJfUJ2cPSdWzmj58Rl4LyGouawlWvbEASO9NO9VuCtL7YPbxVOslNknD_lJ23eFvLUfo-A-XpzScHM19MyO_iO0dx6YE7c_MeDvcEw_wdhrrdOOlWc_vyMPw7HjnuyOo2CbDwJQp4uQocHnGMkRMvjAzFT6QXu9KTgqSz0KWww8LxKPjJDAn_DFCf5qed4njNxPc93Hc8dOdMIqDuBqVA6uXAHMBucUIxIjlGtlifq1IiUdkuNxQLJp3eLXGtMc1IadqDPO8zq6rRMizVG7Sg8McxPjfD_BaD8uzY">