gcc-4.8 and older dislike the use of __builtin_constant_p() within a
constant expression context, and so we must use the magical
__is_constexpr() instead.

For example, with gcc-4.8.5:
../drivers/gpu/drm/i915/i915_reg.h:167:27: error: first argument to 
‘__builtin_choose_expr’ not a constant
../include/linux/build_bug.h:16:45: error: bit-field ‘<anonymous>’ width not an 
integer constant

Reported-by: Randy Dunlap <rdun...@infradead.org>
Fixes: baa09e7d2f42 ("drm/i915: use REG_FIELD_PREP() to define register 
bitfield values")
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Jani Nikula <jani.nik...@intel.com>
Cc: Imre Deak <imre.d...@intel.com>
Cc: Randy Dunlap <rdun...@infradead.org>
---
 drivers/gpu/drm/i915/i915_reg.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 85e8d1a1f70b..50d0b2ae89eb 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -161,10 +161,10 @@
  */
 #define REG_FIELD_PREP(__mask, __val)                                          
\
        ((u32)((((typeof(__mask))(__val) << __bf_shf(__mask)) & (__mask)) +     
\
-              BUILD_BUG_ON_ZERO(!__builtin_constant_p(__mask)) +               
\
+              BUILD_BUG_ON_ZERO(!__is_constexpr(__mask)) +             \
               BUILD_BUG_ON_ZERO((__mask) == 0 || (__mask) > U32_MAX) +         
\
               BUILD_BUG_ON_ZERO(!IS_POWER_OF_2((__mask) + (1ULL << 
__bf_shf(__mask)))) + \
-              
BUILD_BUG_ON_ZERO(__builtin_choose_expr(__builtin_constant_p(__val), 
(~((__mask) >> __bf_shf(__mask)) & (__val)), 0))))
+              BUILD_BUG_ON_ZERO(__builtin_choose_expr(__is_constexpr(__val), 
(~((__mask) >> __bf_shf(__mask)) & (__val)), 0))))
 
 /**
  * REG_FIELD_GET() - Extract a u32 bitfield value
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to