[LLVMbugs] [Bug 17818] variable-sized object check seems to be too restrictive

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Nov 5 18:19:26 PST 2013


Richard Smith <richard-llvm at metafoo.co.uk> changed:

           What    |Removed                     |Added
             Status|NEW                         |RESOLVED
                 CC|                            |richard-llvm at metafoo.co.uk
         Resolution|---                         |INVALID

--- Comment #1 from Richard Smith <richard-llvm at metafoo.co.uk> ---
These are both VLAs. With a slightly different testcase:

  C c1;
  C *c2 = new C;
  int a[c1.asize], b[c2->asize];

... and -pedantic-errors, we see:

<stdin>:9:9: error: variable length array folded to constant array as an
extension [-Werror,-Wgnu-folding-constant]
  int a[c1.asize], b[c2->asize];
<stdin>:9:21: error: variable length arrays are a C99 feature
  int a[c1.asize], b[c2->asize];

Note that Clang is happy to fold the first case to a constant, and treat it as
not-a-VLA (and indeed, the first *is* a constant expression in C++11 onwards),
but is not happy to do the same for the second case. That's because 'c2->asize'
is defined to mean '(*c2).asize', and while we can evaluate the '.asize' part,
the '(*c2)' is non-constant, because it involves reading the value of 'c2'.

Finally, g++ allows a VLA to have an initializer, whereas Clang does not, so
Clang rejects the second example.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20131106/074edcb0/attachment.html>

More information about the llvm-bugs mailing list