diff mbox

extra 'make check' failures on 32bit Linux

Message ID 444abf20-b5ef-664a-fed4-ebfd8969e1da@ramsayjones.plus.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Ramsay Jones March 27, 2017, 3:27 p.m. UTC
On 27/03/17 02:03, Luc Van Oostenryck wrote:
> On Sun, Mar 26, 2017 at 11:21:44PM +0100, Ramsay Jones wrote:
>> Hi Christopher, Luc,
>>
>> On occasion I build sparse on 32-bit Linux and I have noticed, for some
>> weeks now, unexpected test failures. I have been meaning to take a look
>> at fixing these failures, but I just haven't had the time ... :(
> 
>>   ...
>>   
>>        TEST     division constants (div.c)
>>   error: actual error text does not match expected error text.
>>   error: see div.c.error.* for further investigation.
>>   --- div.c.error.expected	2017-03-26 18:26:04.142887258 +0100
>>   +++ div.c.error.got	2017-03-26 18:26:04.142887258 +0100
>>   @@ -2,8 +2,6 @@
>>    div.c:4:20: warning: division by zero
>>    div.c:5:22: warning: division by zero
>>    div.c:7:25: warning: constant integer operation overflow
>>   -div.c:8:27: warning: constant integer operation overflow
>>    div.c:9:34: warning: constant integer operation overflow
>>    div.c:11:25: warning: constant integer operation overflow
>>   -div.c:12:27: warning: constant integer operation overflow
>>    div.c:13:34: warning: constant integer operation overflow
>>   ...
> 
> It's not very clear to me what is the cause of this error.
> Have you only since some weeks (then I think it's since the
> we define __SIZEOF_POINTER__) or is it older (then I think
> it exists since quite a long time)?

I just did a git bisect, which shows:

...

$ git bisect good
8d688c9a6ee220ce00b30afd8bdffa34434c9950 is the first bad commit
commit 8d688c9a6ee220ce00b30afd8bdffa34434c9950
Author: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Date:   Tue Feb 7 21:04:24 2017 +0100

    define __LONG_MAX__ & __SIZEOF_POINTER__
    
    They're part of GCC's common predefined macros and some
    code & header files depends on them.
    
    Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
    Signed-off-by: Christopher Li <sparse@chrisli.org>

:100644 100644 38ff165b360525c2b83cd76d674593ee79cb9ffb 65887c40d3b5b020991be2372b0af5c1b7088776 M	lib.c
$ 

So, I looked in the debugger and 'bits_in_long' and 'bits_in_pointer'
are set correctly, but __LONG_MAX__ is being printed with an LL suffix,
so, this fixes it for me:

$ git diff
$ 

Not a proper fix, but ...

Ah, I've just noticed you have sent some patches. ;-)

I will take a look and let you know.

ATB,
Ramsay Jones


--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Luc Van Oostenryck March 27, 2017, 4:10 p.m. UTC | #1
On Mon, Mar 27, 2017 at 5:27 PM, Ramsay Jones
<ramsay@ramsayjones.plus.com> wrote:

> So, I looked in the debugger and 'bits_in_long' and 'bits_in_pointer'
> are set correctly, but __LONG_MAX__ is being printed with an LL suffix,
> so, this fixes it for me:
>
> $ git diff
> diff --git a/lib.c b/lib.c
> index 272d2c8..502c264 100644
> --- a/lib.c
> +++ b/lib.c
> @@ -834,7 +834,7 @@ static void predefined_macros(void)
>         add_pre_buffer("#define __CHECKER__ 1\n");
>
>         val = (1ULL << (bits_in_long-1)) - 1;
> -       add_pre_buffer("#weak_define __LONG_MAX__ %#llxLL\n", val);
> +       add_pre_buffer("#weak_define __LONG_MAX__ %#llxL\n", val);
>         add_pre_buffer("#weak_define __SIZEOF_POINTER__ %d\n", bits_in_pointer/8);
>  }
>
> $
>
> Not a proper fix, but ...

Well, actually it is the proper fix as __LONG_MAX__ is supposed to be
a 'long' and not a 'long long'.

> Ah, I've just noticed you have sent some patches. ;-)
>
> I will take a look and let you know.

OK, thanks.
It should be OK as I new tested it on a 32bit machine but
another environment is always good for testing.

-- Luc
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ramsay Jones March 27, 2017, 4:53 p.m. UTC | #2
On 27/03/17 17:10, Luc Van Oostenryck wrote:
> On Mon, Mar 27, 2017 at 5:27 PM, Ramsay Jones
> <ramsay@ramsayjones.plus.com> wrote:
> 
>> So, I looked in the debugger and 'bits_in_long' and 'bits_in_pointer'
>> are set correctly, but __LONG_MAX__ is being printed with an LL suffix,
>> so, this fixes it for me:
>>
>> $ git diff
>> diff --git a/lib.c b/lib.c
>> index 272d2c8..502c264 100644
>> --- a/lib.c
>> +++ b/lib.c
>> @@ -834,7 +834,7 @@ static void predefined_macros(void)
>>         add_pre_buffer("#define __CHECKER__ 1\n");
>>
>>         val = (1ULL << (bits_in_long-1)) - 1;
>> -       add_pre_buffer("#weak_define __LONG_MAX__ %#llxLL\n", val);
>> +       add_pre_buffer("#weak_define __LONG_MAX__ %#llxL\n", val);
>>         add_pre_buffer("#weak_define __SIZEOF_POINTER__ %d\n", bits_in_pointer/8);
>>  }
>>
>> $
>>
>> Not a proper fix, but ...
> 
> Well, actually it is the proper fix as __LONG_MAX__ is supposed to be
> a 'long' and not a 'long long'.
> 
>> Ah, I've just noticed you have sent some patches. ;-)
>>
>> I will take a look and let you know.
> 
> OK, thanks.
> It should be OK as I new tested it on a 32bit machine but
> another environment is always good for testing.

OK, so I tested the 5 patch series + the v2 patch that you sent
out on Linux 64bit, Linux 32bit and cygwin 64bit.

I applied the patches on top of the current 'sparse-next' branch:

  $ git branch -v
    chrisl-master   ce18a90 sparse: update __builtin_object_size() prototype
    master          fbbfc73 simplify float-to-float casts that doesn't change size
    mingw           9e96dd5 test-suite: Add -b option to ignore CR at eol on MinGW
    sparse-next     f7817f0 llvm: cleanup of output_[ptr]cast()
  * sparse-next-tmp df7cd04 fix expansion of integers to floats

  $ git log --oneline sparse-next..
  df7cd04 fix expansion of integers to floats
  83de8c4 do not depends on limits.h to test __CHAR_BIT__
  ac9f7b4 fix test validation/div.c
  153d5cf predefine __SIZEOF_INT__ & friends
  a3a916c predefine __INT_MAX__ and friends
  26a0a0a fix test for cast to bool on 32bit machines
  $ 

On Linux 64bit, I get:

  $ make check
  ...
  Out of 214 tests, 205 passed, 9 failed (9 of them are known to fail)
  39 tests were disabled
  $ 

On Linux 32bit, I get:

  $ make check
  ...
       TEST     call-inlined (call-inlined.c)
  error: actual output text does not match expected output text.
  error: see call-inlined.c.output.* for further investigation.
  --- call-inlined.c.output.expected	2017-03-27 16:57:23.438683323 +0100
  +++ call-inlined.c.output.got	2017-03-27 16:57:23.442685323 +0100
  @@ -15,14 +15,14 @@
   bas:
   .L6:
   	<entry-point>
  -	add.64      %r16 <- "abc", $1
  -	ret.64      %r16
  +	add.32      %r16 <- "abc", $1
  +	ret.32      %r16
 
 
   qus:
   .L9:
   	<entry-point>
  -	add.64      %r21 <- messg, $1
  -	ret.64      %r21
  +	add.32      %r21 <- messg, $1
  +	ret.32      %r21
 
 
       TEST     call-variadic (call-variadic.c)
  error: actual output text does not match expected output text.
  error: see call-variadic.c.output.* for further investigation.
  --- call-variadic.c.output.expected	2017-03-27 16:57:23.482705323 +0100
  +++ call-variadic.c.output.got	2017-03-27 16:57:23.486707323 +0100
  @@ -1,14 +1,14 @@
   foo:
   .L0:
   	<entry-point>
  -	push.64     "msg %c: %d %d/%ld %ld/%p %p\n"
  +	push.32     "msg %c: %d %d/%ld %ld/%p %p\n"
   	push.32     $120
   	push.32     %arg2
   	push.32     $7
  -	push.64     %arg3
  -	push.64     $0
  -	push.64     %arg4
  -	push.64     $0
  +	push.32     %arg3
  +	push.32     $0
  +	push.32     %arg4
  +	push.32     $0
   	call.32     %r5 <- print
   	ret.32      %r5
 
  ...
  Out of 214 tests, 203 passed, 11 failed (9 of them are known to fail)
  39 tests were disabled
  Makefile:213: recipe for target 'check' failed
  make: *** [check] Error 1
  $ 

And on cygwin 64bit, I get:

  $ tail test-out-tmp
       TEST     Varargs bogus warning regression test #1 (varargs1.c)
       TEST     wide character constants (wide.c)
       TEST     Woverride-init-def (Woverride-init-def.c)
       TEST     Woverride-init-no (Woverride-init-no.c)
       TEST     Woverride-init-yes (Woverride-init-yes.c)
       TEST     warn-unknown-attribute (Wunknown-attribute-def.c)
       TEST     warn-unknown-attribute-no (Wunknown-attribute-no.c)
       TEST     warn-unknown-attribute-yes (Wunknown-attribute-yes.c)
  Out of 253 tests, 235 passed, 18 failed (9 of them are known to fail)
  make: *** [Makefile:213: check] Error 1
  $ 

Note that the 9 unexpected failures on cygwin are due to the same
'llvm tool problems' that we discussed before. ie the new tests added
in these patches all pass.

Hope that helps.

ATB,
Ramsay Jones

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Luc Van Oostenryck March 27, 2017, 5:15 p.m. UTC | #3
On Mon, Mar 27, 2017 at 05:53:17PM +0100, Ramsay Jones wrote:
> 
> > OK, thanks.
> > It should be OK as I new tested it on a 32bit machine but
> > another environment is always good for testing.
> 
> OK, so I tested the 5 patch series + the v2 patch that you sent
> out on Linux 64bit, Linux 32bit and cygwin 64bit.
> 
> I applied the patches on top of the current 'sparse-next' branch:
> 
>   $ git branch -v
>     chrisl-master   ce18a90 sparse: update __builtin_object_size() prototype
>     master          fbbfc73 simplify float-to-float casts that doesn't change size
>     mingw           9e96dd5 test-suite: Add -b option to ignore CR at eol on MinGW
>     sparse-next     f7817f0 llvm: cleanup of output_[ptr]cast()
>   * sparse-next-tmp df7cd04 fix expansion of integers to floats
> 
>   $ git log --oneline sparse-next..
>   df7cd04 fix expansion of integers to floats
>   83de8c4 do not depends on limits.h to test __CHAR_BIT__
>   ac9f7b4 fix test validation/div.c
>   153d5cf predefine __SIZEOF_INT__ & friends
>   a3a916c predefine __INT_MAX__ and friends
>   26a0a0a fix test for cast to bool on 32bit machines
>   $ 
> 
> On Linux 64bit, I get:
> 
>   $ make check
>   ...
>   Out of 214 tests, 205 passed, 9 failed (9 of them are known to fail)
>   39 tests were disabled
>   $ 
> 
> On Linux 32bit, I get:
> 
>   $ make check
>   ...
>        TEST     call-inlined (call-inlined.c)
>   error: actual output text does not match expected output text.
>   error: see call-inlined.c.output.* for further investigation.
>   --- call-inlined.c.output.expected	2017-03-27 16:57:23.438683323 +0100
>   +++ call-inlined.c.output.got	2017-03-27 16:57:23.442685323 +0100

Yes, this is expected. Sorry, I should have told earlier.
Those were part of another serie that I didn't yes sent an updated
version. The 5 patches series only covered what's already in master,
not sparse-next.

I'll sent an updated version for what's in sparse-next a bit later.

-- Luc
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/lib.c b/lib.c
index 272d2c8..502c264 100644
--- a/lib.c
+++ b/lib.c
@@ -834,7 +834,7 @@  static void predefined_macros(void)
        add_pre_buffer("#define __CHECKER__ 1\n");
 
        val = (1ULL << (bits_in_long-1)) - 1;
-       add_pre_buffer("#weak_define __LONG_MAX__ %#llxLL\n", val);
+       add_pre_buffer("#weak_define __LONG_MAX__ %#llxL\n", val);
        add_pre_buffer("#weak_define __SIZEOF_POINTER__ %d\n", bits_in_pointer/8);
 }