<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVEtvozAQ_jXOZVQEJiTlwKFtWq20K620D-2xMmYIsyV2ZJuk7a_fMdA0bfeyWoQwHs98nudX2-ap-kRC3oh0I9Kr6fsFg5BrD9oaTw06CB158LTb9wj4qOKawK8ODdQMALYFsUo9PaOQl0KWvIF2MDqQNcCWxgY4kKeazYMFZVT_9MywFKCxGO9hREUmosBP02BLBhuwDrbK1WqLcFD9gOAwDC6eMIhWfc8QorjW1mEyGDIUSPXsRJOMGN9GbVFsIuqxI91FX_YMEp4iIDXQkNoa6wNpzgDUQ-AgjcaP0dCUjBDVfGeHvjGcoQBHBOX9sOO4OhXA1r9RM0hQARl8VtKdMhxDjeGInLIIhHoIdMAxCi_yO_jasnxwHoHaiNopPj3lcMwIjb-hQ4dTUjkWyyndJee1-4E-cIaOFLoYxvRusCbFN_fsCBzQ-YiULZM0SS-EvOZXpjLLpMzStSyKjAW60O26KbMUi-VFJta3-LiPy5niqpBJWZwuOffiJISbCX8S--AGHWaV9SwEfoS84xfIxAq8JH5KObDiXPnx7F7k1yzb8PJq_zfDk8L03Ts6cFlEfvXR7B5EvoH01WK9gVq5-3cQUb21dm6Lj1HEc_XWL54MeRmhkjP3RH4L2QkC5ke9c-Jf7eccvXVgFr4J7V2J3nQPt-qDP9HBZ6X36BZNlTdlXqqFGkJnXfWgPIvLfDG4vupC2PuY1bGEW-67oU54onnT94eX5YJ7Nc4Gb4kHBvmOu0JeLvNFV2GjcNWmTbOqdbnOyzxLc5lfqrYo8hqLdtGrGntf8awLKQ0eYYTgfx7uxf97QNXc1DIrZbmUybrMMlRthtlKlhlqsUxxp6hPIk5i3XbhqhGyHraeD3vywb8eMiPQ1iCODrOHgUI_bm7G-fvO7EAarmYWZA34_sooU8_vcFczu70QgGfymInGjOwXGXWmlXPOYSZZjMFVY2R_ANJsxHA>52843</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Clang Static Analyzer] Souldn't const member functions be assumend to not change object state?
        </td>
    </tr>

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

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

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

<pre>
    Hi,

Let's consider this simple example. When body of `size()` function is not visible to analyzer it does complain ` Undefined or garbage value returned to caller [core.uninitialized.UndefReturn]` which is pretty valid diagnostic, but since `size()` is const, shouldn't we assume that object state didn't change between consecutive calls? Of course if we have function definition there is no problem.

Tested with ```Debian clang version 14.0.0-++20211221072551+c5cf7d910e54-1~exp1~20211221072652.95```

``` C++
struct
{
    // int size() const { return size_; };
    int size() const;

private:
    int size_ = 0;
} bar_;

int foo()
{
    int a;
    if (bar_.size() > 1)
        a = 0;
    if (bar_.size() > 1)
        return a;
    return 0;
}
```

Thanks,
Kacper
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVE1vnDAQ_TXeyygIzBLCgUOSTVSplSr1Qz1GxgzLNKy9ss1u0l_fMZDNJumlCGEYzzzPezNDY9vn-hMJeSvSjUiv5-cXDEKWHrQ1nlp0EHry4Gm3HxDwScU1gV89GmgYAGwH4jL19AeFvBKy4g_oRqMDWQMcaWyAA3lqODxYUEYNz38YlgK0FuM5jKjIRBT4aVrsyGAL1sFWuUZtEQ5qGBEchtHFHQbRahgYQhQ32jpMRkOGAqmBk2iTCePb5C2KTUQ99qT7mMueQcJzBKQWWlJbY30gzQpAMwYmaTR-ZEOzGCG6-d6OQ2tYoQBHBOX9uGNevQpgm9-oGSSogAy-OOleGebQYDgiSxaBUI-BDjix8CK_h68d20fnEaiLqL3i3ZOGkyI0vYYeHc6iMhfLku6S89r9QB9YoSOFPtKY7w02pPjkgROBAzofkbJ1kibphZA3fMtUZpmUWVrKosjYoAvdlW2VpVisLzJR3uHTPi5njpeFTKridMh5Ficj3M74s9kHN-qwuJSLEfgS8p5vIBMr8CL8LDmw41L5ae9B5Dds2_DyGv-vwJPD_Nw7OnBZRH79MewBRL6B9DWi3ECj3MM7iOjeWbu0xUcWcV-9zYsnQ15FqOQsPZHfQXaCgOVS75L43_hFo7cJLMY31N6V6E33cKs--tPv4LPSe3Srts7bKq_UKlAYsOaZu5066Tv3OWm4XuaZRw2-v87GXL0d7hqe05dW9jwGy8iYaY7jv2EZkPPp4ZlYjW6o-xD2PtZsapAtd_XYJPy_4I9hOLwsFzwJMZY_ibGRGdwX8mqdr_q6LPKWuzWtdI7dVclvWKUqbXAt5WW2xtWgGhx8ZCWkNHiECYLfmc-K6qXhZVbJai2TssoyVF2G2aWsMtRineJO0ZDEPBLrtitXTyk149bz5kA--NdNpk5bg5OIEV-NobeuflSeha7y1XR2PeX-F3WZrgA">