<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVcFyGjkQ_ZrhooKCwSzmwIHEuNZVTpwCJ1eXNGoYORppImkg7Nfvaw2scSqXrVQNSDNqPXW_ft1SXp-WxV_jbeVbwii6SFFIJzC39tAU0xWebSOt_ZLClhLbJC9i8oFEqklYE5PwO6GpsjLIZLyLwjhhUlF-FMfaVLUwUTjvhpoShcY47DDVSIi__ZEOFNhu50NGa7vQenaBEY3cO8-2MUPhLO9b4bEFtsDMR5vs65Ya2fu6qtKT--LbS0T4JOqU2sjL5T2evUl1p0aVb_CSg-yHYRv8K1Xw-15ZrzA00jgMCMzt2cjwx3xUP9wh5lHVtkU5fSzHN7NifFeMV_3_ylrRnIRMiZo2RSbNq0jhQL3z8FsKJgPcCvopm9aS8E7svVbeJiEzv0cZEmlMfLevmYU2UOwaqexJKKok0pXDf58gA55lAouZUm8c3qOIPmOpkzhI2xGjSaeZVz7Lmu8EUOD4Cll0e94MdOa3nPugOVHz91m7cqaPKZ5jxCcSR_DMzj0-fvv0sv68-vC4ftmsv6032_XLw_N6s3p-ePqMdWBuiX5NUk_DyAdm_h_8Xn98cnr67A5ZLJDof6TtIDM6y_FKNGB3XydBiLFrwRbHFNj1SBpnPtcyiSiN5kgeEFtzdp7tTBK6CzyTIpLdDVVnrAYTt6pL4mBk_t6y4OkSM0tfNFTVEgpvGNX53vYXx4pyMbqWysOZyIsyIkQ3T2ePkWOOQp0yivK5rKJxFc7tgmAZCqQaCtO-34fsGs1-8Yanzd1685tqeu1QO2xAP1FFlOHeGYEh70hUvkPclXc7Exr2AtMUDFjoyeGjgSPfju1VlwXDkFeJYonlRalQxO8o-OqQ1NQ57LenS7X3inTEBeC5wRhNnGpA9N1Cam2YdVRQbGVFw0A_OhOoIZc4V9AJqrw1lobJgN6rZT4D0maUSsYcvLxUyAFNwEPgCxb0Ed_qPjFv7PThgQGwNNDLqV5MF3IgO9RpWGKhqr-TdDTogl3-7-ZjYuwISbqfTReLyaBe6pvJDNFPZotpeSMnSpJSupzPprdEpG4nAysV2bgsZh-KsnR0FBkC82J2N_hzD8yyHJf8lJP5ZDaejybVfE67yfh2tiilkqq4GUOGxo4Yh0t2EJYZUnX7iEVu1PFtUcZo9khrdhgeJpMsLfu-Oo-ib7f9xcNNXKQT_vKNEwW33N_cJmhbWTZcnZDOuQH2d4XJlwR0eN2b5Gk0yGEuc4z_AnN7aHY>53991</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Sema's clang::Scope type stores Decls non-deterministically, but we iterate over it in an observable way.
        </td>
    </tr>

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

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

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

<pre>
    `Scope` uses an `llvm::SmallPtrSet` to store the list of declarations in it, which is non-deterministic.  However, for the purposes of diagnostics, we loop over this list in `Sema::ActOnPopScope`: https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDecl.cpp#L2045

All my attempts to observe this in a minimal example on godbolt are thwarted though, presumably because `SmallPtrSet` iterates the pointers sorted by value, and we are likely allocating these in 'order'.  However, presumably this is observable with `LLVM_ENABLE_REVERSE_ITERATION`.  See https://godbolt.org/z/jqMnd3Tnv for an example of where the diagnostics might end up being reversed.  That said, I'm observing it during a self-build (but via a separate observation mechanism, not via the diagnostics).

I presume this isn't being caught by the bot, since our Sema tests don't validate the ORDER of diagnostics, just the existence of diagnostics.  one could confirm by contributing a test that validates the order of an example like the above.

Unfortunately, we likely need to decide whether the additional space-requirement (or compile-time requirement, in the case of a sorted vector) is worth this diagnostic ordering.  
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVE1z2zgM_TXyBWOPLcdxfNDB3TizmUmbjp32muEHLDGlSJWk7Hp__QKUvXE6veyMbFIi-AA8PEB6faqK2-lO-Q5phT5iBOGA9tYe2mK-pmfXCmu_prDDxDbJQ0w-IKQGwZqYwO9Bo7IiiGS8i2AcmFSUf8GxMaoBE8F5N9aYMLTG0Q2jJgB_-yMeMLDd3oeM1vWh8xwCIxpRO8-2MUORL-878HSFbAkzuzY51h22Yoh1rdKz--q7S0b0CZqUusjH5QM9tUlNLyfKt_SSkxyWcRf8GyqK-0FaL2lphXG0UGKuZiPDH7OrYbmnnCeq64py_lRObxbF9L6Yrof_tbXQnkCkhG2XIpPmZcRwwCF4ilsAk0HcAv4SbWcRvIPaa-ltApH5PYqQUNPG93XDLHQBY98KaU8gUQkqV07_Y4EM8SwSsZgp9cbRe4ToM5Y8wUHYHhlNOM28si9rfiCBEo5XVEVX82VCZ37LpQ-aC7X8WLWrYIac4jlH-oRwJJ45uKen759fN1_Wn542r9vN9812t3l9fNls1y-Pz1_onDB3iL8XaaBh4gMz_w_93n5-dnr-4g5ZLCTR_0jbk8zwLMcr0RC7dZMAKce-I7Y4p8ChR9Tk86URCaIwmjN5pNzac_BsZxLoPvBOQES7H8veWE1M3Mk-wcGI_L1jweMlZ5Y-tKgaQQpvGdX5wfa3wIpyNbmWyuOZyIsyIolumc4RU405C3nKKNLntorGKfLbB2AZApWaFKb9cI-qazTHxReet_eb7R-66a2n3mED_EVdhBnugxEx5B2C8j3lrbzbm9ByFLRNwRALAznsmnDEu9tBdVkwDHlVKJZYPhSSmvgDBd8cFTX1ju7b06XbB0U65AbwPGCMRi41QQzTQmhtmHXqoNgJheOAP3sTsEWXuFakE-ryzlgcJ0P0Xh2zD5I2oygRc_Li0iEHGgKeBL5iQR_pWzMU5p2dIT1igFga6WquV_OVGCWTLFbDfFhGGMbGMEB5GEE60V-enBF4dPxhKlL75fRZZUTBuZGHmWfysCM-r3tMnCajPtjqf484E2OPJIWHxXy1mo2aanEjUYtS3dwtV_N5OdtLpe4Ws9vprZaz23I_skKijVWx-FSUpcMjZAjaF4v7kanKaclPOVvOFtPlZKaWS9zPpneLVSmkkMXNlIgxdsJxcFuPQpVDkn0d6ZCHeXw_FDGamkqf3RG-6GkGhopIV80PFA5H2XuVo_8XDWRScQ">