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

    <tr>
        <th>Summary</th>
        <td>
            PDB: `getAge()` is not consistent across different streams/sources
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          florian-kuebler
      </td>
    </tr>
</table>

<pre>
    TLDR: `NativeSession::getGlobalScope()->getAge()` and `InfoStream::getAge()` differs from `DbiStream::getAge()`, while the one from `DbiStream` seam to be correct.

Consider the following code:
```
    llvm::pdb::NativeSession* native_session = ...;
    llvm::pdb::PDBFile& pdb_file = native_session->getPDBFile();

    llvm::Expected<llvm::pdb::DbiStream&> debug_info_stream = pdb_file.getPDBDbiStream();
    CHECK(debug_info_stream);

    llvm::Expected<llvm::pdb::InfoStream&> info_stream = pdb_file.getPDBInfoStream();
    CHECK(info_stream);

    uint32_t is_age = info_stream->getAge();
    uint32_t dbi_age = debug_info_stream->getAge();
    uint32_t global_scope_age = session_->getGlobalScope()->getAge();

    CHECK(is_age == dbi_age); // fails
    CHECK(is_age == global_scope_age); // succeeds
    CHECK(dbi_age == global_scope_age); // fails
```

As an example I used the following one:
PDB: `ntdll.pdb`
GUID: `168bc37b40ebc0d8152621ee552a7823`
Actual Age (checked with DIA SDK, and dumpbin): `1`
is_age: `3`
dbi_age: `1`
global_scope_age: `3`

I used the pdb file downloaded by Visual Studio, but it should be also possible to use the Microsoft Symbol Store:
https://msdl.microsoft.com/download/symbols/ntdll.pdb/168BC37B40EBC0D8152621EE552A78231/ntdll.pdb
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVd-PmzAM_mvgJToEoVB44KEtve20H5rWba9VIKbNlpKKhN3uv58DlNL2tk5ahShx7M-f7dgpFH_JvrzPPzvhgjix_5EZ8RM2oLVQNcrw2YF5I1XB5KZUR3Bo4tD0wQnXKMe9fo2WhNXcIjzVldqYBthhNL9Q46KqoNGkatTB6ueF-Iu6Q1fkeS8kELMHomp4xQ5BNf4To0gBpFRNA6XxHD93_EX_XqlaCw5NB1IpKdWzqHeoysF67TXRWf90S4I_KX8OrI686D8u80MXpO4EW91LiBPmxPM8J1z-FeZTvnzEoBwaE5RtKxugNb1EG7I8Knc5OSG_hr_-dcTQgTvh6hWn54zRGJEJh6LdbQXWa6s7eUfhxMfrPU-MLtxbx6u369U7lN8A_R_PyQnqid6hONX_I8e77FpRm5BuDRF6y3Z9OSZGNyd-6mS05YUYjW-y8m8Qu67Xtto224g1HIjtAHG_H2_jGxMxhteR7An3JsShj_iQigmp71le87yE0G1ZAvBXUCYpug8zYXLVn_17oXHsEPjFDkfsoCfSauBXTY4zY-xxPCzDnKsNl9KzR-4E-ObrUz5sBnFSlOG8mPlQlD5PgojGNACIIsrmCQ1Hm0VpWibJwoZDk3IP5Q_0_yzMnuRPC7LJ39n5ZQcjbw_HQtRddL2PEaRP6yA-Y58qc61-k7Brw_49yQVGSboJw9VzLRXjKC9eyDehLfmNablQlmfR4uE3RO9VK7kdpUxqRY4Kj15hB7CykB3iB1E2SqvKkM3LoVAWRDXnNO-NOWq76op40Fx6h5OFVypswMcTFfzUHYTGr3NR6CPWYLkK58uZv16u_HyowXqNNVjYGgRTfReyII4DGsVJFLs8C3kapsw1wkjIzkW_voqEJrUyeA3g7aAN1IYwy1IPd5QV9J1ryWnVNiVot21kdhngDuvdFkNg3Tzr_x6OjfqOcw6XQusWLEo0D33f3WdpBOWcJbGfpFDNZikL_YD7EUtpGse8mrmSFSB15kRLJ8pdkVGfUt_GTYNZEHmUBmECaegzCjxiMwfP6gGbxbOOPdXs3CbrOOAM0rgpMUB93mRY010NcMJnrdmrJqukagSrH360gBVv3I521nH-DRw1cU4">