ahatanak wrote:

clang started issuing a warning after this PR was merged when compiling the 
following code:

```
typedef long unsigned int size_t;

extern "C" {
void *
  memcpy(void * __dst, const void * __src,
  size_t __n);
}

struct MyClass
{
    unsigned numberOfBuffers;
    unsigned long long buffers[1];
};
typedef struct MyClass MyClass;

MyClass a0;

void test() {
  const size_t byteSize = sizeof(MyClass) + sizeof(unsigned long long);
  MyClass &a1 = *(MyClass *)__builtin_alloca(byteSize);
  MyClass *a2 = (MyClass *)__builtin_alloca(byteSize);
  memcpy(&a1.buffers[0], &a0.buffers[0], sizeof(unsigned long long)); // no 
warnings.
  memcpy(&a1.buffers[1], &a0.buffers[0], sizeof(unsigned long long)); // 
warning: 'memcpy' will always overflow; destination buffer has size 0, but size 
argument is 8 [-Wfortify-source]
  memcpy(a2->buffers[1], &a0.buffers[0], sizeof(unsigned long long)); // no 
warnings.
}
```

Is the warning valid? Is the change in clang's behavior intentional?

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

Reply via email to