NetBSD Problem Report #49745
From www@NetBSD.org Sat Mar 14 09:52:40 2015
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [149.20.53.66])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id B3E43A654B
for <gnats-bugs@gnats.NetBSD.org>; Sat, 14 Mar 2015 09:52:40 +0000 (UTC)
Message-Id: <20150314095238.D235FA6567@mollari.NetBSD.org>
Date: Sat, 14 Mar 2015 09:52:38 +0000 (UTC)
From: isaki@pastel-flower.jp
Reply-To: isaki@pastel-flower.jp
To: gnats-bugs@NetBSD.org
Subject: tests/include/sys/t_bitops: improvement
X-Send-Pr-Version: www-1.0
>Number: 49745
>Category: lib
>Synopsis: tests/include/sys/t_bitops: improvement
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: lib-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Mar 14 09:55:00 +0000 2015
>Closed-Date: Sat Mar 21 05:45:27 +0000 2015
>Last-Modified: Sat Mar 21 05:45:27 +0000 2015
>Originator: Tetsuya Isaki
>Release: NetBSD-current (2015/02)
>Organization:
>Environment:
NetBSD XXXXX 7.99.4 NetBSD 7.99.4 (GENERIC) #1: Wed Feb 11 12:54:54 JST 2015 isaki@XXXXX:/var/obj/current/x68k/obj/sys/arch/x68k/compile/GENERIC x68k
>Description:
The current ilog2()'s implementation consists of 32bit variable
part, 64bit variable part and constant part. But 'ilog2_basic'
test checks only 64bit variable. 32bit variable and constant
were not checked.
'ilog2_log2' test is fully meaningless. It checks only bit 0
and bit 16-31 of 64bit variable though it spent 65000 times loop.
All range of 64bit variable was already checked by 'ilog2_basic'
before.
In addition, comparing it with math log2() is also really bad
idea. It should be compared with prepared(=pre-calculated)
value. The current 'ilog2_log2' test does not seem to work
on vax and QEMU due to lack/fail of math log2() according to
source code comment (I don't know details and it seems to work
on my QEMU though..). However, it's not necessary to use math
log2() here.
>How-To-Repeat:
See source code. tests/include/sys/t_bitops.c
>Fix:
Here is my proposal.
- remove ilog2_basic and ilog2_log2 for the above reason.
- new ilog2_32bit checks ilog2() as 32bit variable.
- new ilog2_64bit checks ilog2() as 64bit variable.
- new ilog2_const checks ilog2() as constant.
I'll commit it if ok.
--- tests/include/sys/t_bitops.c 14 Mar 2015 07:23:46 -0000 1.17
+++ tests/include/sys/t_bitops.c 14 Mar 2015 07:32:40 -0000
@@ -174,55 +174,176 @@
}
}
-ATF_TC(ilog2_basic);
-ATF_TC_HEAD(ilog2_basic, tc)
+ATF_TC(ilog2_32bit);
+ATF_TC_HEAD(ilog2_32bit, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for correctness");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 32bit variable");
}
-ATF_TC_BODY(ilog2_basic, tc)
+ATF_TC_BODY(ilog2_32bit, tc)
{
- uint64_t i, x;
+ int i;
+ uint32_t x;
- for (i = x = 0; i < 64; i++) {
-
- x = (uint64_t)1 << i;
-
- ATF_REQUIRE(i == (uint64_t)ilog2(x));
+ for (i = 0; i < 32; i++) {
+ x = 1 << i;
+ ATF_REQUIRE(ilog2(x) == i);
}
}
-ATF_TC(ilog2_log2);
-ATF_TC_HEAD(ilog2_log2, tc)
+ATF_TC(ilog2_64bit);
+ATF_TC_HEAD(ilog2_64bit, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test log2(3) vs. ilog2(3)");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 64bit variable");
}
-ATF_TC_BODY(ilog2_log2, tc)
+ATF_TC_BODY(ilog2_64bit, tc)
{
-#ifdef __vax__
- atf_tc_skip("Test is unavailable on vax because of lack of log2()");
-#else
- double x, y;
- uint64_t i;
-
- /*
- * This may fail under QEMU; see PR misc/44767.
- */
- for (i = 1; i < UINT32_MAX; i += UINT16_MAX) {
+ int i;
+ uint64_t x;
- x = log2(i);
- y = (double)(ilog2(i));
+ for (i = 0; i < 64; i++) {
+ x = ((uint64_t)1) << i;
+ ATF_REQUIRE(ilog2(x) == i);
+ }
+}
- ATF_REQUIRE(ceil(x) >= y);
+ATF_TC(ilog2_const);
+ATF_TC_HEAD(ilog2_const, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for constant");
+}
- if (fabs(floor(x) - y) > 1.0e-40) {
- atf_tc_expect_fail("PR misc/44767");
- atf_tc_fail("log2(%"PRIu64") != "
- "ilog2(%"PRIu64")", i, i);
- }
- }
-#endif
+ATF_TC_BODY(ilog2_const, tc)
+{
+ ATF_REQUIRE(ilog2(0x0000000000000001ULL) == 0);
+ ATF_REQUIRE(ilog2(0x0000000000000002ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000004ULL) == 2);
+ ATF_REQUIRE(ilog2(0x0000000000000008ULL) == 3);
+ ATF_REQUIRE(ilog2(0x0000000000000010ULL) == 4);
+ ATF_REQUIRE(ilog2(0x0000000000000020ULL) == 5);
+ ATF_REQUIRE(ilog2(0x0000000000000040ULL) == 6);
+ ATF_REQUIRE(ilog2(0x0000000000000080ULL) == 7);
+ ATF_REQUIRE(ilog2(0x0000000000000100ULL) == 8);
+ ATF_REQUIRE(ilog2(0x0000000000000200ULL) == 9);
+ ATF_REQUIRE(ilog2(0x0000000000000400ULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000800ULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001000ULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000002000ULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000004000ULL) == 14);
+ ATF_REQUIRE(ilog2(0x0000000000008000ULL) == 15);
+ ATF_REQUIRE(ilog2(0x0000000000010000ULL) == 16);
+ ATF_REQUIRE(ilog2(0x0000000000020000ULL) == 17);
+ ATF_REQUIRE(ilog2(0x0000000000040000ULL) == 18);
+ ATF_REQUIRE(ilog2(0x0000000000080000ULL) == 19);
+ ATF_REQUIRE(ilog2(0x0000000000100000ULL) == 20);
+ ATF_REQUIRE(ilog2(0x0000000000200000ULL) == 21);
+ ATF_REQUIRE(ilog2(0x0000000000400000ULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000800000ULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001000000ULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000002000000ULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000004000000ULL) == 26);
+ ATF_REQUIRE(ilog2(0x0000000008000000ULL) == 27);
+ ATF_REQUIRE(ilog2(0x0000000010000000ULL) == 28);
+ ATF_REQUIRE(ilog2(0x0000000020000000ULL) == 29);
+ ATF_REQUIRE(ilog2(0x0000000040000000ULL) == 30);
+ ATF_REQUIRE(ilog2(0x0000000080000000ULL) == 31);
+ ATF_REQUIRE(ilog2(0x0000000100000000ULL) == 32);
+ ATF_REQUIRE(ilog2(0x0000000200000000ULL) == 33);
+ ATF_REQUIRE(ilog2(0x0000000400000000ULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000800000000ULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001000000000ULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000002000000000ULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000004000000000ULL) == 38);
+ ATF_REQUIRE(ilog2(0x0000008000000000ULL) == 39);
+ ATF_REQUIRE(ilog2(0x0000010000000000ULL) == 40);
+ ATF_REQUIRE(ilog2(0x0000020000000000ULL) == 41);
+ ATF_REQUIRE(ilog2(0x0000040000000000ULL) == 42);
+ ATF_REQUIRE(ilog2(0x0000080000000000ULL) == 43);
+ ATF_REQUIRE(ilog2(0x0000100000000000ULL) == 44);
+ ATF_REQUIRE(ilog2(0x0000200000000000ULL) == 45);
+ ATF_REQUIRE(ilog2(0x0000400000000000ULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000800000000000ULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001000000000000ULL) == 48);
+ ATF_REQUIRE(ilog2(0x0002000000000000ULL) == 49);
+ ATF_REQUIRE(ilog2(0x0004000000000000ULL) == 50);
+ ATF_REQUIRE(ilog2(0x0008000000000000ULL) == 51);
+ ATF_REQUIRE(ilog2(0x0010000000000000ULL) == 52);
+ ATF_REQUIRE(ilog2(0x0020000000000000ULL) == 53);
+ ATF_REQUIRE(ilog2(0x0040000000000000ULL) == 54);
+ ATF_REQUIRE(ilog2(0x0080000000000000ULL) == 55);
+ ATF_REQUIRE(ilog2(0x0100000000000000ULL) == 56);
+ ATF_REQUIRE(ilog2(0x0200000000000000ULL) == 57);
+ ATF_REQUIRE(ilog2(0x0400000000000000ULL) == 58);
+ ATF_REQUIRE(ilog2(0x0800000000000000ULL) == 59);
+ ATF_REQUIRE(ilog2(0x1000000000000000ULL) == 60);
+ ATF_REQUIRE(ilog2(0x2000000000000000ULL) == 61);
+ ATF_REQUIRE(ilog2(0x4000000000000000ULL) == 62);
+ ATF_REQUIRE(ilog2(0x8000000000000000ULL) == 63);
+
+ ATF_REQUIRE(ilog2(0x0000000000000003ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000007ULL) == 2);
+ ATF_REQUIRE(ilog2(0x000000000000000fULL) == 3);
+ ATF_REQUIRE(ilog2(0x000000000000001fULL) == 4);
+ ATF_REQUIRE(ilog2(0x000000000000003fULL) == 5);
+ ATF_REQUIRE(ilog2(0x000000000000007fULL) == 6);
+ ATF_REQUIRE(ilog2(0x00000000000000ffULL) == 7);
+ ATF_REQUIRE(ilog2(0x00000000000001ffULL) == 8);
+ ATF_REQUIRE(ilog2(0x00000000000003ffULL) == 9);
+ ATF_REQUIRE(ilog2(0x00000000000007ffULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000fffULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001fffULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000003fffULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000007fffULL) == 14);
+ ATF_REQUIRE(ilog2(0x000000000000ffffULL) == 15);
+ ATF_REQUIRE(ilog2(0x000000000001ffffULL) == 16);
+ ATF_REQUIRE(ilog2(0x000000000003ffffULL) == 17);
+ ATF_REQUIRE(ilog2(0x000000000007ffffULL) == 18);
+ ATF_REQUIRE(ilog2(0x00000000000fffffULL) == 19);
+ ATF_REQUIRE(ilog2(0x00000000001fffffULL) == 20);
+ ATF_REQUIRE(ilog2(0x00000000003fffffULL) == 21);
+ ATF_REQUIRE(ilog2(0x00000000007fffffULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000ffffffULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001ffffffULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000003ffffffULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000007ffffffULL) == 26);
+ ATF_REQUIRE(ilog2(0x000000000fffffffULL) == 27);
+ ATF_REQUIRE(ilog2(0x000000001fffffffULL) == 28);
+ ATF_REQUIRE(ilog2(0x000000003fffffffULL) == 29);
+ ATF_REQUIRE(ilog2(0x000000007fffffffULL) == 30);
+ ATF_REQUIRE(ilog2(0x00000000ffffffffULL) == 31);
+ ATF_REQUIRE(ilog2(0x00000001ffffffffULL) == 32);
+ ATF_REQUIRE(ilog2(0x00000003ffffffffULL) == 33);
+ ATF_REQUIRE(ilog2(0x00000007ffffffffULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000fffffffffULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001fffffffffULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000003fffffffffULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000007fffffffffULL) == 38);
+ ATF_REQUIRE(ilog2(0x000000ffffffffffULL) == 39);
+ ATF_REQUIRE(ilog2(0x000001ffffffffffULL) == 40);
+ ATF_REQUIRE(ilog2(0x000003ffffffffffULL) == 41);
+ ATF_REQUIRE(ilog2(0x000007ffffffffffULL) == 42);
+ ATF_REQUIRE(ilog2(0x00000fffffffffffULL) == 43);
+ ATF_REQUIRE(ilog2(0x00001fffffffffffULL) == 44);
+ ATF_REQUIRE(ilog2(0x00003fffffffffffULL) == 45);
+ ATF_REQUIRE(ilog2(0x00007fffffffffffULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000ffffffffffffULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001ffffffffffffULL) == 48);
+ ATF_REQUIRE(ilog2(0x0003ffffffffffffULL) == 49);
+ ATF_REQUIRE(ilog2(0x0007ffffffffffffULL) == 50);
+ ATF_REQUIRE(ilog2(0x000fffffffffffffULL) == 51);
+ ATF_REQUIRE(ilog2(0x001fffffffffffffULL) == 52);
+ ATF_REQUIRE(ilog2(0x003fffffffffffffULL) == 53);
+ ATF_REQUIRE(ilog2(0x007fffffffffffffULL) == 54);
+ ATF_REQUIRE(ilog2(0x00ffffffffffffffULL) == 55);
+ ATF_REQUIRE(ilog2(0x01ffffffffffffffULL) == 56);
+ ATF_REQUIRE(ilog2(0x03ffffffffffffffULL) == 57);
+ ATF_REQUIRE(ilog2(0x07ffffffffffffffULL) == 58);
+ ATF_REQUIRE(ilog2(0x0fffffffffffffffULL) == 59);
+ ATF_REQUIRE(ilog2(0x1fffffffffffffffULL) == 60);
+ ATF_REQUIRE(ilog2(0x3fffffffffffffffULL) == 61);
+ ATF_REQUIRE(ilog2(0x7fffffffffffffffULL) == 62);
+ ATF_REQUIRE(ilog2(0xffffffffffffffffULL) == 63);
}
ATF_TP_ADD_TCS(tp)
@@ -231,8 +352,9 @@
ATF_TP_ADD_TC(tp, bitmap_basic);
ATF_TP_ADD_TC(tp, fast_divide32);
ATF_TP_ADD_TC(tp, ffsfls);
- ATF_TP_ADD_TC(tp, ilog2_basic);
- ATF_TP_ADD_TC(tp, ilog2_log2);
+ ATF_TP_ADD_TC(tp, ilog2_32bit);
+ ATF_TP_ADD_TC(tp, ilog2_64bit);
+ ATF_TP_ADD_TC(tp, ilog2_const);
return atf_no_error();
}
>Release-Note:
>Audit-Trail:
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, lib-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc:
Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
Date: Sat, 14 Mar 2015 10:18:14 -0400
On Mar 14, 9:55am, isaki@pastel-flower.jp (isaki@pastel-flower.jp) wrote:
-- Subject: lib/49745: tests/include/sys/t_bitops: improvement
| >Number: 49745
| >Category: lib
| >Synopsis: tests/include/sys/t_bitops: improvement
| >Confidential: no
| >Severity: non-critical
| >Priority: low
| >Responsible: lib-bug-people
| >State: open
| >Class: sw-bug
| >Submitter-Id: net
| >Arrival-Date: Sat Mar 14 09:55:00 +0000 2015
| >Originator: Tetsuya Isaki
| >Release: NetBSD-current (2015/02)
| >Organization:
| >Environment:
| NetBSD XXXXX 7.99.4 NetBSD 7.99.4 (GENERIC) #1: Wed Feb 11 12:54:54 JST 2015 isaki@XXXXX:/var/obj/current/x68k/obj/sys/arch/x68k/compile/GENERIC x68k
| >Description:
| The current ilog2()'s implementation consists of 32bit variable
| part, 64bit variable part and constant part. But 'ilog2_basic'
| test checks only 64bit variable. 32bit variable and constant
| were not checked.
|
| 'ilog2_log2' test is fully meaningless. It checks only bit 0
| and bit 16-31 of 64bit variable though it spent 65000 times loop.
| All range of 64bit variable was already checked by 'ilog2_basic'
| before.
|
| In addition, comparing it with math log2() is also really bad
| idea. It should be compared with prepared(=pre-calculated)
| value. The current 'ilog2_log2' test does not seem to work
| on vax and QEMU due to lack/fail of math log2() according to
| source code comment (I don't know details and it seems to work
| on my QEMU though..). However, it's not necessary to use math
| log2() here.
I would prefer if you put the constants in an array and loop instead
of inlining it.
christos
From: Tetsuya Isaki <isaki@pastel-flower.jp>
To: gnats-bugs@NetBSD.org
Cc: lib-bug-people@netbsd.org,
gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org, christos@zoulas.com
Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
Date: Sun, 15 Mar 2015 17:08:36 +0900
At Sat, 14 Mar 2015 14:20:00 +0000 (UTC),
Christos Zoulas wrote:
> | >Description:
> | The current ilog2()'s implementation consists of 32bit variable
> | part, 64bit variable part and constant part. But 'ilog2_basic'
> | test checks only 64bit variable. 32bit variable and constant
> | were not checked.
:
> I would prefer if you put the constants in an array and loop instead
> of inlining it.
It can not be changed to loop because it tests
__builtin_constant_p() part of ilog2(). If all these inline tests
passed, ATF_TC_BODY(ilog2_const, tc) is compiled into
ATF_TC_BODY(ilog2_const, tc)
{
}
---
Tetsuya Isaki <isaki@pastel-flower.jp / isaki@NetBSD.org>
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, lib-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, isaki@pastel-flower.jp
Cc:
Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
Date: Sun, 15 Mar 2015 10:32:48 -0400
On Mar 15, 8:10am, isaki@pastel-flower.jp (Tetsuya Isaki) wrote:
-- Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
| The following reply was made to PR lib/49745; it has been noted by GNATS.
|
| From: Tetsuya Isaki <isaki@pastel-flower.jp>
| To: gnats-bugs@NetBSD.org
| Cc: lib-bug-people@netbsd.org,
| gnats-admin@netbsd.org,
| netbsd-bugs@netbsd.org, christos@zoulas.com
| Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
| Date: Sun, 15 Mar 2015 17:08:36 +0900
|
| At Sat, 14 Mar 2015 14:20:00 +0000 (UTC),
| Christos Zoulas wrote:
| > | >Description:
| > | The current ilog2()'s implementation consists of 32bit variable
| > | part, 64bit variable part and constant part. But 'ilog2_basic'
| > | test checks only 64bit variable. 32bit variable and constant
| > | were not checked.
| :
| > I would prefer if you put the constants in an array and loop instead
| > of inlining it.
|
| It can not be changed to loop because it tests
| __builtin_constant_p() part of ilog2(). If all these inline tests
| passed, ATF_TC_BODY(ilog2_const, tc) is compiled into
Ah, ok. Please put a comment to that effect.
Thanks,
christos
From: Tetsuya Isaki <isaki@pastel-flower.jp>
To: gnats-bugs@NetBSD.org
Cc: lib-bug-people@netbsd.org,
gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org, christos@zoulas.com (Christos Zoulas)
Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
Date: Wed, 18 Mar 2015 23:38:27 +0900
At Sun, 15 Mar 2015 10:32:48 -0400,
Christos Zoulas wrote:
> | > | >Description:
> | > | The current ilog2()'s implementation consists of 32bit variable
> | > | part, 64bit variable part and constant part. But 'ilog2_basic'
> | > | test checks only 64bit variable. 32bit variable and constant
> | > | were not checked.
> | :
> | > I would prefer if you put the constants in an array and loop instead
> | > of inlining it.
> |
> | It can not be changed to loop because it tests
> | __builtin_constant_p() part of ilog2(). If all these inline tests
> | passed, ATF_TC_BODY(ilog2_const, tc) is compiled into
>
> Ah, ok. Please put a comment to that effect.
Ok, I'll add a comment as following:
--- t_bitops.c.ORG 2015-03-18 23:31:26.000000000 +0900
+++ t_bitops.c 2015-03-18 23:32:55.000000000 +0900
@@ -216,6 +216,10 @@
ATF_TC_BODY(ilog2_const, tc)
{
+ /*
+ * These inlines test __builtin_constant_p() part of ilog2()
+ * at compile time, so don't change it to loop. PR lib/49745
+ */
ATF_REQUIRE(ilog2(0x0000000000000001ULL) == 0);
ATF_REQUIRE(ilog2(0x0000000000000002ULL) == 1);
ATF_REQUIRE(ilog2(0x0000000000000004ULL) == 2);
---
Tetsuya Isaki <isaki@pastel-flower.jp / isaki@NetBSD.org>
From: christos@zoulas.com (Christos Zoulas)
To: Tetsuya Isaki <isaki@pastel-flower.jp>, gnats-bugs@NetBSD.org
Cc: lib-bug-people@netbsd.org, gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org
Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
Date: Wed, 18 Mar 2015 10:39:59 -0400
On Mar 18, 11:38pm, isaki@pastel-flower.jp (Tetsuya Isaki) wrote:
-- Subject: Re: lib/49745: tests/include/sys/t_bitops: improvement
| Ok, I'll add a comment as following:
Thanks, this looks great.
christos
From: "Tetsuya Isaki" <isaki@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/49745 CVS commit: src/tests/include/sys
Date: Sat, 21 Mar 2015 05:32:07 +0000
Module Name: src
Committed By: isaki
Date: Sat Mar 21 05:32:07 UTC 2015
Modified Files:
src/tests/include/sys: t_bitops.c
Log Message:
Rewrite ilog2's test. PR lib/49745.
- Reorganize ilog2_basic to ilog2_32bit, ilog2_64bit and ilog2_const.
ilog2_const is compile-time test for __builtin_constant_p() part of
current ilog2() implementation.
- Remove fully meaningless ilog2_log2. So this part of PR misc/44767
is no longer present.
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/tests/include/sys/t_bitops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->closed
State-Changed-By: isaki@NetBSD.org
State-Changed-When: Sat, 21 Mar 2015 05:45:27 +0000
State-Changed-Why:
commited. Thanks christos@.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.