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

    <tr>
        <th>Summary</th>
        <td>
            [clang-ccl][Diagnostic] Crash when the file contains "#pragma diagnostic push" compiled twice
        </td>
    </tr>

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

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

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

<pre>
    Given we have a file `t.c` with "#pragma diagnostic push":
```
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wuninitialized"
void foo() {
}
#pragma clang diagnostic pop
```
When compiled with `clang -cc1 t.c t.c`, we will get crash at Diagnostic.cpp:194
```
clang: /export/users2/pengfeiw/llvm-project/clang/lib/Basic/Diagnostic.cpp:194: void clang::DiagnosticsEngine::DiagStateMap::append(clang::SourceManager&, clang::SourceLocation, clang::DiagnosticsEngine::DiagState*): Assertion `Last.Offset <= Offset && "state transitions added out of order"' 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: clang -cc1 t.c t.c
1.      t.c:2:2: current parser token 'pragma'
 #0 0x00000000058c84b5 (clang+0x58c84b5)
 #1 0x00000000058c856c (clang+0x58c856c)
 #2 0x00000000058c6520 (clang+0x58c6520)
 #3 0x00000000058c7efd (clang+0x58c7efd)
 #4 0x00007f8b134e8d80 __restore_rt sigaction.c:0:0
 #5 0x00007f8b11fc993f raise (/lib64/libc.so.6+0x3793f)
 #6 0x00007f8b11fb3c95 abort (/lib64/libc.so.6+0x21c95)
 #7 0x00007f8b11fb3b69 _nl_load_domain.cold.0 loadmsgcat.c:0:0
 #8 0x00007f8b11fc1df6 .annobin_assert.c_end assert.c:0:0
 #9 0x0000000005c4489d (clang+0x5c4489d)
#10 0x0000000005c45572 (clang+0x5c45572)
#11 0x0000000005c4581b (clang+0x5c4581b)
#12 0x0000000005c4590c (clang+0x5c4590c)
#13 0x000000000ab2ff73 (clang+0xab2ff73)
#14 0x000000000ab2ace1 (clang+0xab2ace1)
#15 0x000000000ab2ace1 (clang+0xab2ace1)
#16 0x000000000ab2afa3 (clang+0xab2afa3)
#17 0x000000000aaffa55 (clang+0xaaffa55)
#18 0x000000000aac4c5e (clang+0xaac4c5e)
#19 0x000000000aac2150 (clang+0xaac2150)
#20 0x000000000ab43754 (clang+0xab43754)
#21 0x0000000008b79ab2 (clang+0x8b79ab2)
#22 0x0000000008b6f1cd (clang+0x8b6f1cd)
#23 0x0000000008b6ae9e (clang+0x8b6ae9e)
#24 0x0000000006756c9f (clang+0x6756c9f)
#25 0x00000000067565cb (clang+0x67565cb)
#26 0x0000000006699b92 (clang+0x6699b92)
#27 0x00000000068ddeef (clang+0x68ddeef)
#28 0x00000000025db47c (clang+0x25db47c)
#29 0x00000000025d006f (clang+0x25d006f)
#30 0x00000000025d06e0 (clang+0x25d06e0)
#31 0x00007f8b11fb5813 __libc_start_main (/lib64/libc.so.6+0x23813)
#32 0x00000000025ce9de (clang+0x25ce9de)
Aborted (core dumped)
```
Noticed while triaging #55224
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydl01v2zgQhn-NfCEqSNT3wYekSffS3S3QQ48GRY5kbmRRIKm4u79-h5LihFTQADX8Ib3iQ84Mh-S4VeLf4x_yGUZyBXJmz0AY6eQAJCoTG3P8JldpzySiNKLZpFl_YURI1o_KWMnJNJuze5bdRclDlNwhsL3X2xvDBzb2O_KjRhIvNAg3_Kcf8yhHaSUb5H8g3KAL_aykIJ1SEa0j2pCout96rR4-tkFN75r944wB4eoyYSTEFoAyWfFPnKcEQ0PW8ET0swvdVQ4D6cESrpk5E2bJw22YmE8TBiht8ncHW7rF5-jkF_g5KW3xYjagDYb8ywRj34G84uUwPF8-TVr9A9w1WTmUZYvf98xIjr_vDoudL2F6GQrfr-3M49jLEV7l75ZZ-JNNq8ImNAHDXb-Bv6tZc2wysh50REsXhN3jr4ozK9UYPPxo4IjijDXO5DuDQXA9uOB_ZcbGf3edwRhH2ecoeyAvd2780qWIcTyxmo1GOs4QJgROoJotUR1RWjhrMaoV6Zib2nidgW9fH---PxIztxdpcQG0c080uJkgVpGztZNxRtIv-O4xGeY2xuTYZmQ_MdKYGQxeEDYKIkc-zALNOsOWHC3jT2gkBxeZCQfSigP6KohZAudkRzJjFJfokiB6HonhWk52MxlDxZ-ImC_TbeklMVle37TqNbsQpvv5AqN1tpN3cneB0g1yQnZHtw_hs9aIkolpnAOMwhMuCIzbupDwYqVRyhKS_ExeXkXN67wtyC1d6H3ycxPdrN6oNKSKku8pFD2KBlRZ0GRHOdGjsoCqoBM7yokelW9U1dVtmuVQizohp5MGY3FLOmFuGNkz7vJsiV2yfG548RZPO940WUc0kwbIslO5ZVvm6y-PjYrLxZKswnaeHaXfUZvxpiCsdcn5q45oiu28jqqwo7ZsyGkcToNi4iTUhUn0RA0iToiTLqbHBfyeb3XgWyq6ksRsHFUrxxNblm3MT7Dm8HKz76TxZoXned2Es7KKNydc2iQBVRQV3VFO9Kg0pOq03VMoehQNqSYJc3QVPcrLNtbSrqsyn9pEj8oDCneHdEc50aOK36LKkOrY3kInelTlUazrWBGs8030qNqneM4LCKlF9KgmoGhaJDvKiW8pmvh-5VlV5KFfi-hRXm7UbdWg8z61iR5FfarsUi5CahE9KgsoBg3sKCd6lJcbZYWbYtP51CZ6VBFSBW_3FIoe5eVGWTZN2wTR2ESP8nKjrPHQhdDCVfQoLzdoIdq8CtbXJnpUE1A4YLejnPiW8k8p16CEZE-h6FFpsGXiFpHhGeB22hMWG9qe3Kb56304Q8brlPqmcGgEhKYs4o26c7s9rPmFZ89y7MObzPLryb8U1laubD27Ot5qLKwknv3uTCoozQ_imIkma9jBSjvAMSrul5GxNhii4gFvXys0vCefl5rl6ipiV8Isfw64Gi06bj76W_BaQ9sr2nSY9XD8_XIKzS-zw_koqoKCyMsOWEUhL0AAT1reQte0WGfUh4G1MBjnGTpwkEeaUJoUSZ5St0vEuJYFVgkVCM7LKs-jPAGcxyF2A8dK9wd9XGzAOtDgw0Eaa14f4pGGf0sAXvpnsz0rfZzOClq4YiQPi8XHxdz_AVVwxBs">