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

            Bug ID: 68801
           Summary: __builtin_object_size multiple objects ptr size issue
                    when adding/removing printf()
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: derrick at ca dot ibm.com
  Target Milestone: ---

As following code shows, if adding printf("OK\n") and printf("NOK\n") in
function test02(), then the result is as expected: t3=0, return 0
if comment printf("OK\n") and printf("NOK\n") in function test02(), then the
result is : t3=1, return 1.

Is this a backend issue of GCC?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int test02(int i)
{
    char a2[5];
    char b2[6];
    char *p2;

    if (i>0)
        p2=a2;
    else
        p2=b2;

    if ((__builtin_object_size (p2, 0) == 6) && (__builtin_object_size (p2, 1)
== 6) && (__builtin_object_size (p2, 2) == 5) && (__builtin_object_size (p2,
3)== 5))
    {
        //printf ("OK\n");
        return 0;
    }
    else
    {
        //printf ("NOK\n");
        return 1;
    }
}

int main()
{
    int t2=1;
    int t3=test02(t2);
    printf ("t3=%d\n", t3);

    //if (!test02(t2))
    if (!t3)
        return 0;
    else
        return 1;
}

Reply via email to