* [Change] Git build issue on NonStop @ 2025-09-18 2:16 rsbecker 2025-09-18 2:29 ` Jeff King 0 siblings, 1 reply; 8+ messages in thread From: rsbecker @ 2025-09-18 2:16 UTC (permalink / raw) To: git Just a quick FYI. The addition of uintptr_t in clar tests has broken my CI build on NonStop x86. I will be fixing this locally. It may take a patch series unless a quick workaround is possible, which I am hoping. For those on the list from my platform who are monitoring, this looks like -D__NSK_OPTIONAL_TYPES__ is now required for the build. I am unsure what else may be needed. --Randall -- Brief whoami: NonStop&UNIX developer since approximately UNIX(421664400) NonStop(211288444200000000) -- In real life, I talk too much. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Change] Git build issue on NonStop 2025-09-18 2:16 [Change] Git build issue on NonStop rsbecker @ 2025-09-18 2:29 ` Jeff King 2025-09-18 3:20 ` rsbecker 0 siblings, 1 reply; 8+ messages in thread From: Jeff King @ 2025-09-18 2:29 UTC (permalink / raw) To: rsbecker; +Cc: Patrick Steinhardt, git On Wed, Sep 17, 2025 at 10:16:13PM -0400, rsbecker@nexbridge.com wrote: > Just a quick FYI. The addition of uintptr_t in clar tests has broken > my CI build on NonStop x86. I will be fixing this locally. It may take > a patch series unless a quick workaround is possible, which I am > hoping. > > For those on the list from my platform who are monitoring, this looks like > -D__NSK_OPTIONAL_TYPES__ is now required for the build. I am unsure > what else may be needed. We use uintptr_t in lots of places in the regular code. I guess this bit in compat/posix.h is what makes it work: #ifdef NO_INTPTR_T /* * On I16LP32, ILP32 and LP64 "long" is the safe bet, however * on LLP86, IL33LLP64 and P64 it needs to be "long long", * while on IP16 and IP16L32 it is "int" (resp. "short") * Size needs to match (or exceed) 'sizeof(void *)'. * We can't take "long long" here as not everybody has it. */ typedef long intptr_t; typedef unsigned long uintptr_t; #endif But clar has its own compatibility layer. So it would need to do something similar. I see the clar line in question also uses PRIxPTR, which I can imagine might not be available everywhere either. We don't use that ourselves at all. I kind of wonder if just: diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c index 80c5359425..f408af850f 100644 --- a/t/unit-tests/clar/clar.c +++ b/t/unit-tests/clar/clar.c @@ -875,8 +875,8 @@ void clar__assert_equal( void *p1 = va_arg(args, void *), *p2 = va_arg(args, void *); is_equal = (p1 == p2); if (!is_equal) - p_snprintf(buf, sizeof(buf), "0x%"PRIxPTR" != 0x%"PRIxPTR, - (uintptr_t)p1, (uintptr_t)p2); + p_snprintf(buf, sizeof(buf), "0x%"PRIuMAX" != 0x%"PRIuMAX, + (uintmax_t)p1, (uintmax_t)p2); } else { int i1 = va_arg(args, int), i2 = va_arg(args, int); would be sufficient. -Peff ^ permalink raw reply related [flat|nested] 8+ messages in thread
* RE: [Change] Git build issue on NonStop 2025-09-18 2:29 ` Jeff King @ 2025-09-18 3:20 ` rsbecker 2025-09-18 5:37 ` Patrick Steinhardt 0 siblings, 1 reply; 8+ messages in thread From: rsbecker @ 2025-09-18 3:20 UTC (permalink / raw) To: 'Jeff King'; +Cc: 'Patrick Steinhardt', git On September 17, 2025 10:29 PM, Jeff King wrote: >On Wed, Sep 17, 2025 at 10:16:13PM -0400, rsbecker@nexbridge.com wrote: > >> Just a quick FYI. The addition of uintptr_t in clar tests has broken >> my CI build on NonStop x86. I will be fixing this locally. It may take >> a patch series unless a quick workaround is possible, which I am >> hoping. >> >> For those on the list from my platform who are monitoring, this looks >> like -D__NSK_OPTIONAL_TYPES__ is now required for the build. I am >> unsure what else may be needed. > >We use uintptr_t in lots of places in the regular code. I guess this bit in >compat/posix.h is what makes it work: > > #ifdef NO_INTPTR_T > /* > * On I16LP32, ILP32 and LP64 "long" is the safe bet, however > * on LLP86, IL33LLP64 and P64 it needs to be "long long", > * while on IP16 and IP16L32 it is "int" (resp. "short") > * Size needs to match (or exceed) 'sizeof(void *)'. > * We can't take "long long" here as not everybody has it. > */ > typedef long intptr_t; > typedef unsigned long uintptr_t; > #endif > >But clar has its own compatibility layer. So it would need to do something similar. I >see the clar line in question also uses PRIxPTR, which I can imagine might not be >available everywhere either. We don't use that ourselves at all. > >I kind of wonder if just: > >diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c index >80c5359425..f408af850f 100644 >--- a/t/unit-tests/clar/clar.c >+++ b/t/unit-tests/clar/clar.c >@@ -875,8 +875,8 @@ void clar__assert_equal( > void *p1 = va_arg(args, void *), *p2 = va_arg(args, void *); > is_equal = (p1 == p2); > if (!is_equal) >- p_snprintf(buf, sizeof(buf), "0x%"PRIxPTR" != >0x%"PRIxPTR, >- (uintptr_t)p1, (uintptr_t)p2); >+ p_snprintf(buf, sizeof(buf), "0x%"PRIuMAX" != >0x%"PRIuMAX, >+ (uintmax_t)p1, (uintmax_t)p2); > } > else { > int i1 = va_arg(args, int), i2 = va_arg(args, int); > >would be sufficient. Yes, it would work. uintmax_t is part of the standard set while uintptr_t is considered an extension. Not my decision on this grouping. I'm setting the -D in CFLAGS to see if that works, I would be fine going that way, although better would be adding it into config.uname.mak in the NONSTOP section. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Change] Git build issue on NonStop 2025-09-18 3:20 ` rsbecker @ 2025-09-18 5:37 ` Patrick Steinhardt 2025-09-18 6:31 ` Jeff King 0 siblings, 1 reply; 8+ messages in thread From: Patrick Steinhardt @ 2025-09-18 5:37 UTC (permalink / raw) To: rsbecker; +Cc: 'Jeff King', git On Wed, Sep 17, 2025 at 11:20:05PM -0400, rsbecker@nexbridge.com wrote: > On September 17, 2025 10:29 PM, Jeff King wrote: > >On Wed, Sep 17, 2025 at 10:16:13PM -0400, rsbecker@nexbridge.com wrote: > > > >> Just a quick FYI. The addition of uintptr_t in clar tests has broken > >> my CI build on NonStop x86. I will be fixing this locally. It may take > >> a patch series unless a quick workaround is possible, which I am > >> hoping. > >> > >> For those on the list from my platform who are monitoring, this looks > >> like -D__NSK_OPTIONAL_TYPES__ is now required for the build. I am > >> unsure what else may be needed. > > > >We use uintptr_t in lots of places in the regular code. I guess this bit in > >compat/posix.h is what makes it work: > > > > #ifdef NO_INTPTR_T > > /* > > * On I16LP32, ILP32 and LP64 "long" is the safe bet, however > > * on LLP86, IL33LLP64 and P64 it needs to be "long long", > > * while on IP16 and IP16L32 it is "int" (resp. "short") > > * Size needs to match (or exceed) 'sizeof(void *)'. > > * We can't take "long long" here as not everybody has it. > > */ > > typedef long intptr_t; > > typedef unsigned long uintptr_t; > > #endif > > > >But clar has its own compatibility layer. So it would need to do something similar. I > >see the clar line in question also uses PRIxPTR, which I can imagine might not be > >available everywhere either. We don't use that ourselves at all. > > > >I kind of wonder if just: > > > >diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c index > >80c5359425..f408af850f 100644 > >--- a/t/unit-tests/clar/clar.c > >+++ b/t/unit-tests/clar/clar.c > >@@ -875,8 +875,8 @@ void clar__assert_equal( > > void *p1 = va_arg(args, void *), *p2 = va_arg(args, void *); > > is_equal = (p1 == p2); > > if (!is_equal) > >- p_snprintf(buf, sizeof(buf), "0x%"PRIxPTR" != > >0x%"PRIxPTR, > >- (uintptr_t)p1, (uintptr_t)p2); > >+ p_snprintf(buf, sizeof(buf), "0x%"PRIuMAX" != > >0x%"PRIuMAX, > >+ (uintmax_t)p1, (uintmax_t)p2); > > } > > else { > > int i1 = va_arg(args, int), i2 = va_arg(args, int); > > > >would be sufficient. > > Yes, it would work. uintmax_t is part of the standard set while uintptr_t is > considered an extension. Not my decision on this grouping. I'm setting > the -D in CFLAGS to see if that works, I would be fine going that way, > although better would be adding it into config.uname.mak in the NONSTOP > section. That should work alright, yeah. Peff, do you want to create a PR in https://github.com/clar-test/clar to fix this? Otherwise I can handle this. Thanks, both! Patrick ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Change] Git build issue on NonStop 2025-09-18 5:37 ` Patrick Steinhardt @ 2025-09-18 6:31 ` Jeff King 2025-09-18 13:00 ` Patrick Steinhardt 0 siblings, 1 reply; 8+ messages in thread From: Jeff King @ 2025-09-18 6:31 UTC (permalink / raw) To: Patrick Steinhardt; +Cc: rsbecker, git On Thu, Sep 18, 2025 at 07:37:34AM +0200, Patrick Steinhardt wrote: > > >diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c index > > >80c5359425..f408af850f 100644 > > >--- a/t/unit-tests/clar/clar.c > > >+++ b/t/unit-tests/clar/clar.c > > >@@ -875,8 +875,8 @@ void clar__assert_equal( > > > void *p1 = va_arg(args, void *), *p2 = va_arg(args, void *); > > > is_equal = (p1 == p2); > > > if (!is_equal) > > >- p_snprintf(buf, sizeof(buf), "0x%"PRIxPTR" != > > >0x%"PRIxPTR, > > >- (uintptr_t)p1, (uintptr_t)p2); > > >+ p_snprintf(buf, sizeof(buf), "0x%"PRIuMAX" != > > >0x%"PRIuMAX, > > >+ (uintmax_t)p1, (uintmax_t)p2); > > > } > > > else { > > > int i1 = va_arg(args, int), i2 = va_arg(args, int); > > > > > >would be sufficient. > > > > Yes, it would work. uintmax_t is part of the standard set while uintptr_t is > > considered an extension. Not my decision on this grouping. I'm setting > > the -D in CFLAGS to see if that works, I would be fine going that way, > > although better would be adding it into config.uname.mak in the NONSTOP > > section. > > That should work alright, yeah. Peff, do you want to create a PR in > https://github.com/clar-test/clar to fix this? Otherwise I can handle > this. I'd be happy if you take it from here. Note in what I posted above it should probably be PRIxMAX to show hex (not "u"). -Peff ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Change] Git build issue on NonStop 2025-09-18 6:31 ` Jeff King @ 2025-09-18 13:00 ` Patrick Steinhardt 2025-09-18 14:47 ` Junio C Hamano 0 siblings, 1 reply; 8+ messages in thread From: Patrick Steinhardt @ 2025-09-18 13:00 UTC (permalink / raw) To: Jeff King; +Cc: rsbecker, git On Thu, Sep 18, 2025 at 02:31:52AM -0400, Jeff King wrote: > On Thu, Sep 18, 2025 at 07:37:34AM +0200, Patrick Steinhardt wrote: > > > > >diff --git a/t/unit-tests/clar/clar.c b/t/unit-tests/clar/clar.c index > > > >80c5359425..f408af850f 100644 > > > >--- a/t/unit-tests/clar/clar.c > > > >+++ b/t/unit-tests/clar/clar.c > > > >@@ -875,8 +875,8 @@ void clar__assert_equal( > > > > void *p1 = va_arg(args, void *), *p2 = va_arg(args, void *); > > > > is_equal = (p1 == p2); > > > > if (!is_equal) > > > >- p_snprintf(buf, sizeof(buf), "0x%"PRIxPTR" != > > > >0x%"PRIxPTR, > > > >- (uintptr_t)p1, (uintptr_t)p2); > > > >+ p_snprintf(buf, sizeof(buf), "0x%"PRIuMAX" != > > > >0x%"PRIuMAX, > > > >+ (uintmax_t)p1, (uintmax_t)p2); > > > > } > > > > else { > > > > int i1 = va_arg(args, int), i2 = va_arg(args, int); > > > > > > > >would be sufficient. > > > > > > Yes, it would work. uintmax_t is part of the standard set while uintptr_t is > > > considered an extension. Not my decision on this grouping. I'm setting > > > the -D in CFLAGS to see if that works, I would be fine going that way, > > > although better would be adding it into config.uname.mak in the NONSTOP > > > section. > > > > That should work alright, yeah. Peff, do you want to create a PR in > > https://github.com/clar-test/clar to fix this? Otherwise I can handle > > this. > > I'd be happy if you take it from here. Note in what I posted above it > should probably be PRIxMAX to show hex (not "u"). One thing I missed: `uintmax_t` doesn't work on 32 bit systems: ::error file=clar.c,line=879::clar.c:879:8: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] 879 | (uintmax_t)p1, (uintmax_t)p2); | ^ I'm inclined to just use "%p" instead and accept that this has platform-dependent behaviour. Means we'll have to drop the test for this, but that's the lesser evil from my point of view. Patrick ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Change] Git build issue on NonStop 2025-09-18 13:00 ` Patrick Steinhardt @ 2025-09-18 14:47 ` Junio C Hamano 2025-09-18 15:20 ` rsbecker 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2025-09-18 14:47 UTC (permalink / raw) To: Patrick Steinhardt; +Cc: Jeff King, rsbecker, git Patrick Steinhardt <ps@pks.im> writes: > One thing I missed: `uintmax_t` doesn't work on 32 bit systems: > > ::error file=clar.c,line=879::clar.c:879:8: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] > 879 | (uintmax_t)p1, (uintmax_t)p2); > | ^ > > I'm inclined to just use "%p" instead and accept that this has > platform-dependent behaviour. Means we'll have to drop the test for > this, but that's the lesser evil from my point of view. As long as %p works everywhere and with stable output, that is the most appropriate solution, I would think. After all, this is used only for "oops, the test expects these two pointers are pointing at the same address, but they differ; they point at these places...". To test such a test, wouldn't it be sufficient to perform "does it give a bit of output or not?" check in isolation? ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [Change] Git build issue on NonStop 2025-09-18 14:47 ` Junio C Hamano @ 2025-09-18 15:20 ` rsbecker 0 siblings, 0 replies; 8+ messages in thread From: rsbecker @ 2025-09-18 15:20 UTC (permalink / raw) To: 'Junio C Hamano', 'Patrick Steinhardt' Cc: 'Jeff King', git On September 18, 2025 10:48 AM, Junio C Hamano wrote: >Patrick Steinhardt <ps@pks.im> writes: > >> One thing I missed: `uintmax_t` doesn't work on 32 bit systems: >> >> ::error file=clar.c,line=879::clar.c:879:8: cast from pointer to integer of different >size [-Werror=pointer-to-int-cast] >> 879 | (uintmax_t)p1, (uintmax_t)p2); >> | ^ >> >> I'm inclined to just use "%p" instead and accept that this has >> platform-dependent behaviour. Means we'll have to drop the test for >> this, but that's the lesser evil from my point of view. > >As long as %p works everywhere and with stable output, that is the most >appropriate solution, I would think. After all, this is used only for "oops, the test >expects these two pointers are pointing at the same address, but they differ; they >point at these places...". > >To test such a test, wouldn't it be sufficient to perform "does it give a bit of output >or not?" check in isolation? Surprisingly, this actually works on NonStop x86 in both memory models despite warnings to the contrary in their man page.. Thanks :) ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-09-18 15:20 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-18 2:16 [Change] Git build issue on NonStop rsbecker 2025-09-18 2:29 ` Jeff King 2025-09-18 3:20 ` rsbecker 2025-09-18 5:37 ` Patrick Steinhardt 2025-09-18 6:31 ` Jeff King 2025-09-18 13:00 ` Patrick Steinhardt 2025-09-18 14:47 ` Junio C Hamano 2025-09-18 15:20 ` rsbecker
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).