Cydox wrote:

> I reverted my last commit. This leaves the original patch, which seems to 
> work. @efriedma-quic, would you be okay with this patch while I work to 
> improve the code in follow-up?

The original (and current) patch in this PR still introduces a regression. So 
it should not be merged in my opinion.

Look at the following C file (`test.c`):
```C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

struct variable {
        int a;
        int b;
        int length;
        short array[] __attribute__((counted_by(length)));
};

struct bucket {
        int a;
        struct variable growable;
};

int main(int argc, char *argv[])
{
        struct bucket *p;

        p = malloc(sizeof(*p) + sizeof(*p->growable.array) * 32);
        p->growable.length = 32;

        printf("%zu\n", __builtin_dynamic_object_size(p->growable.array, 1));

        return 0;
}
```

Compiling this file with clang 19.1.0 and running it:
```bash
$ clang --version
clang version 19.1.0 (Fedora 19.1.0-1.fc41)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Configuration file: /etc/clang/x86_64-redhat-linux-gnu-clang.cfg

$ clang test.c

$ ./a.out
64
```
Correctly prints `64`.

But compiling and running it with the originial (and current) patch in this PR:
```bash
$ clang --version
clang version 20.0.0git (g...@github.com:llvm/llvm-project.git 
2de76472e0d1417b64da5aa2c1138eb365685d3a)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/jan/llvm-project/build2/bin

$ clang test.c

$ ./a.out
Segmentation fault (core dumped)
```

Will result in a binary that crashes with a segmentation fault.

---

My PR #110497 adds a test case for this scenario and does not have the same 
issue: 
https://github.com/Cydox/llvm-project/blob/15b69329a97706ada7d5e8cbeb76508aa55b418f/clang/test/CodeGen/attr-counted-by-pr110385.c#L61

https://github.com/llvm/llvm-project/pull/110487
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to