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

    <tr>
        <th>Summary</th>
        <td>
            `__builtin_dynamic_object_size` of pointer member marked with `counted_by` confused by extra parens
        </td>
    </tr>

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

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

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

<pre>
    Strangely, `__builtin_dynamic_object_size()` of a pointer member annotated with `counted_by` goes wrong if passed with wrapping parens. As in, the latter reports `SIZE_MAX`.

```
 printf("%zu\n", __builtin_dynamic_object_size(fixed->a, 1));
 printf("%zu\n", __builtin_dynamic_object_size((fixed->a), 1));
```

This should not be, and doesn't happen for any other similar constructions:

```
#include <stdio.h>

struct fixed_size {
        int *a __attribute__((counted_by(a_count)));
        short a_count;
};

struct dyn_size {
        short b_count;
        int b[] __attribute__((counted_by(b_count)));
};

void __attribute__((noinline))
foo(struct fixed_size *fixed, struct dyn_size *dyn)
{
        int b;
        int *p = &b;

        printf("%zu\n", __builtin_dynamic_object_size(p, 1));
        printf("%zu\n", __builtin_dynamic_object_size((p), 1));
        printf("%zu\n", __builtin_dynamic_object_size(dyn->b, 1));
        printf("%zu\n", __builtin_dynamic_object_size((dyn->b), 1));
        printf("%zu\n", __builtin_dynamic_object_size(&fixed->a_count, 1));
 printf("%zu\n", __builtin_dynamic_object_size((&fixed->a_count), 1));
 printf("%zu\n", __builtin_dynamic_object_size(fixed->a, 1));
 printf("%zu\n", __builtin_dynamic_object_size((fixed->a), 1));
}

int main(void)
{
        struct fixed_size f = { .a_count = 0 };
 struct dyn_size d = { .b_count = 0 };

        foo(&f, &d);
        return 0;
}
```

Prints:

```4
4
0
0
2
2
0
18446744073709551615
```

@bwendling 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1v4zYQ_TXUZbAGPdSHfdBBiWOghwIFtoeiF4EUKYtdmRRIKl7vry8oKYl35SKHzR4qiAgVcx7fG84Mh3uvT0apkmQPJDskfAyddeUXpXwirLyWn4Pj5qT6K8FHIDmtazHqPmhTy6vhZ93UVvyjmlB7_U0R3BHck5yCbYHDYLUJysFZnYVywI2xgQcl4aJDF8EaO5qgZC2u0eZklYeLs-YEuoWBe_-y9OL4MGhzgoE7ZfwGKg_aREahU9DzEHdxarAu-Ij7-be_n-rfq79ITjeEVvHN6fLSCganTWgnskgw-zaS7NFM80d4T1-rvyr5ibAnHldvo1zcE_bws7g_QO9X6LcKCK3-7LQH39mxl2BsAKGiBTcSpFXeECwCdHwYlIHWRt9fwYZOOfD6rHvuoLHGBzc2QVvjCavWfiLItGn6USog7NEHqe2mI-xpXjkbw0R6EgGkmLywPNoEIFhxqGsegtNiDKquZ6U35447Xk-fi9ZXZy6P76wL8LJm9kRxWCavLOTV3OMwG4tb41t6Yg76dxmKuwxvaTxbLe_BGKtNr41a7GjVWktwd8d3WE1f8RBXmrCSVzPbr30s1roIVgMQdgCCuXjl-LLiZ6J0WAf9B6DOwOuQ_whseTUxpcSvIv6G_2v4E8zf6sJLHH5w4bm7xx05_8-6WRzm-I-Zcebx2tjFdL2XT-u8bOc8Kh5gs3hm-geF1-xfpat8MxH3TW52nOtBPIDpfsVcrqLHqTA6A_Q7Od9fBn9EB94p4imhVRx0GbiMON_u0jQv0pQWrKD7LNvm22yNTFIqLsrIPt6-iSyZ3LM9T1S5LTK2wzTLd0lXMppJLBgvGJepYEzxJkcqBLbpVrKiTXSJFDNa4B63uMfdppE5yzLEQhVMqrYlKVVnrvtN3z-fN9adEu39qMpttkWWJz0XqvdTk4Jo1AWmX2OIZIfEldHokxhPnqS01z74N5igQ6_KdxuXuWX5oWE5c_flP7uVxpp2jB2KuIL6GhxfmpNkdH3ZhTBM54FHgseTDt0oNo09EzxGZsufT4OzkQLB46THEzwugp9L_DcAAP__1YDaBQ">