On Tue, Aug 19, 2014 at 2:10 PM, Mark Wielaard <m...@redhat.com> wrote:
> On Tue, 2014-08-19 at 13:22 +0200, Richard Biener wrote:
>> On Tue, Aug 19, 2014 at 1:05 PM, Mark Wielaard <m...@redhat.com> wrote:
>> > On Mon, 2014-07-07 at 11:57 +0200, Richard Biener wrote:
>> >> Btw, why doesn't it succeed with LTO?  I suspect it's because
>> >> we drop the unused variables - try adding __attribute__((used)) to
>> >> them.
>> >
>> > You are right, this makes the whole new test PASS also with LTO:
>> >
>> > 2014-08-19  Mark Wielaard  <m...@redhat.com>
>> >
>> >     * gcc.dg/guality/const-volatile.c: Add `used' attribute to pi.
>> >
>> > OK to commit?
>>
>> Ok.
>
> Here is the same for the new restrict.c testcase.
>
> gcc/testsuite/ChangeLog
> 2014-08-19  Mark Wielaard  <m...@redhat.com>
>
>     * gcc.dg/guality/restrict.c: Add `used' attribute to all variables.
>     (cpy): Change type of last argument to int.
>
> That last change is necessary to succeed with LTO. Otherwise the type of
> the function:
>
> static __attribute__((noclone, noinline)) void *
> cpy (void * restrict s1, const void * restrict s2, unsigned int n)
>
> comes out as:
>
> void *(void * restrict, const void * restrict, __unknown__)
>
> That seems a genuine bug. Should I commit the cpy function type change
> to make the test PASS with LTO? Or leave it as is so it FAILs and
> someone else can look into it?

Yeah, that's a genuine bug.  Not sure why it happens.  If you file a bug
I can have a look later.

Thanks,
Richard.

> Thanks,
>
> Mark
>
> diff --git a/gcc/testsuite/gcc.dg/guality/restrict.c 
> b/gcc/testsuite/gcc.dg/guality/restrict.c
> index e31224b..43a4ede 100644
> --- a/gcc/testsuite/gcc.dg/guality/restrict.c
> +++ b/gcc/testsuite/gcc.dg/guality/restrict.c
> @@ -2,19 +2,19 @@
>  /* { dg-do run } */
>  /* { dg-options "-std=c99 -gdwarf-3" } */
>
> -int *ip;
> -const int *cip;
> -int * restrict irp;
> -int * const icp;
> -const int * restrict cirp;
> -int * const restrict icrp;
> -const int * const restrict cicrp;
> +int *ip __attribute__((used));
> +const int *cip __attribute__((used));
> +int * restrict irp __attribute__((used));
> +int * const icp __attribute__((used));
> +const int * restrict cirp __attribute__((used));
> +int * const restrict icrp __attribute__((used));
> +const int * const restrict cicrp __attribute__((used));
>
> -int * const volatile restrict cvirp;
> -const volatile int * restrict pcvir;
> +int * const volatile restrict cvirp __attribute__((used));
> +const volatile int * restrict pcvir __attribute__((used));
>
>  static __attribute__((noclone, noinline)) void *
> -cpy (void * restrict s1, const void * restrict s2, unsigned int n)
> +cpy (void * restrict s1, const void * restrict s2, int n)
>  {
>    char *t1 = s1;
>    const char *t2 = s2;
> @@ -45,4 +45,4 @@ main (int argc, char **argv)
>  /* { dg-final { gdb-test 30 "type:pcvir" "const volatile int * restrict" } } 
> */
>
>  /* { dg-final { gdb-test 30 "type:main" "int (int, char **)" } } */
> -/* { dg-final { gdb-test 30 "type:cpy" "void *(void * restrict, const void * 
> restrict, unsigned int)" } } */
> +/* { dg-final { gdb-test 30 "type:cpy" "void *(void * restrict, const void * 
> restrict, int)" } } */
>

Reply via email to