[llvm-dev] Confusing UB warning

Manuel Rigger via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 18 07:55:23 PDT 2017


the C11 standard provides the following example for variable-length arrays
and pointer arithmetics (see ยง6.5.6:10):

int main() {
  int n = 4, m = 3;
  int a[n][m];
  int(*p)[m] = a;
  assert(p == &a[0]);
  p += 1;
  assert(p == &a[1]);
  (*p)[2] = 99;
  assert(a[1][2] == 99);
  n = p - a;
  assert(n == 1);

When compiling the program with Clang 3.9, I get the following warning:

warning: subtraction of pointers to type 'int [m]' of zero size has
undefined behavior [-Wpointer-arith]

This is confusing (and probably a bug), since m is not zero and both
pointers refer to the same object. If I define a as int a[n][3] the warning
no longer appears.

- Manuel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170418/24092b87/attachment-0001.html>

More information about the llvm-dev mailing list