~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/rust/kernel/build_assert.rs

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /rust/kernel/build_assert.rs (Version linux-6.12-rc7) and /rust/kernel/build_assert.rs (Version linux-4.4.302)


  1 // SPDX-License-Identifier: GPL-2.0               
  2                                                   
  3 //! Build-time assert.                            
  4                                                   
  5 /// Fails the build if the code path calling `    
  6 ///                                               
  7 /// If the macro is executed in const context,    
  8 /// If the compiler or optimizer cannot guaran    
  9 /// be called, a build error will be triggered    
 10 ///                                               
 11 /// # Examples                                    
 12 ///                                               
 13 /// ```                                           
 14 /// # use kernel::build_error;                    
 15 /// #[inline]                                     
 16 /// fn foo(a: usize) -> usize {                   
 17 ///     a.checked_add(1).unwrap_or_else(|| bui    
 18 /// }                                             
 19 ///                                               
 20 /// assert_eq!(foo(usize::MAX - 1), usize::MAX    
 21 /// // foo(usize::MAX); // Fails to compile.      
 22 /// ```                                           
 23 #[macro_export]                                   
 24 macro_rules! build_error {                        
 25     () => {{                                      
 26         $crate::build_error("")                   
 27     }};                                           
 28     ($msg:expr) => {{                             
 29         $crate::build_error($msg)                 
 30     }};                                           
 31 }                                                 
 32                                                   
 33 /// Asserts that a boolean expression is `true    
 34 ///                                               
 35 /// If the condition is evaluated to `false` i    
 36 /// will panic. If the compiler or optimizer c    
 37 /// be evaluated to `true`, a build error will    
 38 ///                                               
 39 /// [`static_assert!`] should be preferred to     
 40 ///                                               
 41 /// # Examples                                    
 42 ///                                               
 43 /// These examples show that different types o    
 44 /// at different stage of compilation. It is p    
 45 /// possible, so [`static_assert!`] should be     
 46 /// ```ignore                                     
 47 /// fn foo() {                                    
 48 ///     static_assert!(1 > 1); // Compile-time    
 49 ///     build_assert!(1 > 1); // Build-time er    
 50 ///     assert!(1 > 1); // Run-time error         
 51 /// }                                             
 52 /// ```                                           
 53 ///                                               
 54 /// When the condition refers to generic param    
 55 /// [`static_assert!`] cannot be used. Use `bu    
 56 /// ```                                           
 57 /// fn foo<const N: usize>() {                    
 58 ///     // `static_assert!(N > 1);` is not all    
 59 ///     build_assert!(N > 1); // Build-time ch    
 60 ///     assert!(N > 1); // Run-time check         
 61 /// }                                             
 62 ///                                               
 63 /// #[inline]                                     
 64 /// fn bar(n: usize) {                            
 65 ///     // `static_assert!(n > 1);` is not all    
 66 ///     build_assert!(n > 1); // Build-time ch    
 67 ///     assert!(n > 1); // Run-time check         
 68 /// }                                             
 69 /// ```                                           
 70 ///                                               
 71 /// [`static_assert!`]: crate::static_assert!     
 72 #[macro_export]                                   
 73 macro_rules! build_assert {                       
 74     ($cond:expr $(,)?) => {{                      
 75         if !$cond {                               
 76             $crate::build_error(concat!("asser    
 77         }                                         
 78     }};                                           
 79     ($cond:expr, $msg:expr) => {{                 
 80         if !$cond {                               
 81             $crate::build_error($msg);            
 82         }                                         
 83     }};                                           
 84 }                                                 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php