https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69487

            Bug ID: 69487
           Summary: Unexpected VLA initialization of char[] from ""
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rogero at howzatt dot demon.co.uk
  Target Milestone: ---

The initialization of a VLA char array from a string literal in C++ mode is
surprising: the code appears to copy a string literal starting with the NUL
character into the dynamically-sized buffer.

This is different from the (standard C/C++) treatment of the same syntax for a
fixed-size array.

--- vla-init.cxx ---
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void testfixed()
{
    const int size = 6;
    char buffer[size] = "";
    for (int i = 0; i != size; ++i)
    {
        printf("Fixed: buffer[%i] = %2.2x\n", i, buffer[i] & 0xff);
    }
}

int size = 6;

void testvariable()
{
    char buffer[size] = "";
    for (int i = 0; i != size; ++i)
    {
        printf("Variable: buffer[%i] = %2.2x\n", i, buffer[i] & 0xff);
    }
}


int main()
{
    testfixed();
    testvariable();
}
--- ends ---

Sample output:

Fixed: buffer[0] = 00
Fixed: buffer[1] = 00
Fixed: buffer[2] = 00
Fixed: buffer[3] = 00
Fixed: buffer[4] = 00
Fixed: buffer[5] = 00
Variable: buffer[0] =00
Variable: buffer[1] =00
Variable: buffer[2] =00
Variable: buffer[3] =00
Variable: buffer[4] =01
Variable: buffer[5] =1b

Reply via email to