Am 05.04.2025 um 02:07 schrieb Taylor R Campbell: >> Module Name: src >> Committed By: rillig >> Date: Fri Apr 4 20:52:32 UTC 2025 >> >> Modified Files: >> src/sys/sys: cdefs.h >> >> Log Message: >> sys/cdefs.h: fix __predict_true and __predict_false for lint >> >> -#define __predict_true(exp) __builtin_expect((exp) ? 1 : 0, 1) >> -#define __predict_false(exp) __builtin_expect((exp) ? 1 : 0, 0) >> +#define __predict_true(exp) __builtin_expect(/*CONSTCOND*/(exp) ? 1 >> : 0, 1) >> +#define __predict_false(exp) __builtin_expect(/*CONSTCOND*/(exp) ? 1 >> : 0, 0) > > This seems wrong to me. Why should we tell lint that _every_ input to > __predict_true/false is constant? > > What lint objected to in this case is that ALIGNED_POINTER(...) is > always 1 on x86. But it's not always 1 on all architectures.
Agreed. Would it be narrow enough to add /*CONSTCOND*/ to the definition of ALIGNED_POINTER on i386 and amd64? Or would you consider this still too broad? The next alternative would be to mark each call to ALIGNED_POINTER as /*CONSTCOND*/, but that would be additional work in several places. Roland