From: Jakub Jelinek Date: Mon, 25 Jun 2018 16:53:57 +0000 (+0200) Subject: backport: tree-object-size.c (pass_through_call): Do not handle BUILT_IN_STPNCPY_CHK... X-Git-Tag: releases/gcc-6.5.0~246 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1f64d7d51854b124141f9bf14e090aef6f3b8c1;p=thirdparty%2Fgcc.git backport: tree-object-size.c (pass_through_call): Do not handle BUILT_IN_STPNCPY_CHK which is not a pass through call. Backported from mainline 2017-11-24 Jakub Jelinek * tree-object-size.c (pass_through_call): Do not handle BUILT_IN_STPNCPY_CHK which is not a pass through call. * gcc.dg/builtin-object-size-18.c: New test. From-SVN: r262037 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 207df787ac7b..1bf9540d50b3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,11 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2017-11-24 Jakub Jelinek + + * tree-object-size.c (pass_through_call): Do not handle + BUILT_IN_STPNCPY_CHK which is not a pass through call. + 2017-11-23 Jakub Jelinek PR middle-end/82253 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 65dde4ec2a8c..10146f45ea0a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,10 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2017-11-24 Jakub Jelinek + + * gcc.dg/builtin-object-size-18.c: New test. + 2017-11-23 Jakub Jelinek PR middle-end/82253 diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-18.c b/gcc/testsuite/gcc.dg/builtin-object-size-18.c new file mode 100644 index 000000000000..e065393282a9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-object-size-18.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ +/* __stpncpy_chk could return buf up to buf + 64, so + the minimum object size might be far smaller than 64. */ +/* { dg-final { scan-tree-dump-not "return 64;" "optimized" } } */ + +typedef __SIZE_TYPE__ size_t; + +size_t +foo (const char *p, size_t s, size_t t) +{ + char buf[64]; + char *q = __builtin___stpncpy_chk (buf, p, s, t); + return __builtin_object_size (q, 2); +} diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index e683861a1220..af7d6f7064e9 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -469,7 +469,6 @@ pass_through_call (const gcall *call) case BUILT_IN_MEMSET_CHK: case BUILT_IN_STRCPY_CHK: case BUILT_IN_STRNCPY_CHK: - case BUILT_IN_STPNCPY_CHK: case BUILT_IN_STRCAT_CHK: case BUILT_IN_STRNCAT_CHK: case BUILT_IN_ASSUME_ALIGNED: