bug: introduce BUILD_BUG_ON_INVALID() macro
Sometimes we want to check some expressions correctness at compile time. "(void)(e);" or "if (e);" can be dangerous if the expression has side-effects, and gcc sometimes generates a lot of code, even if the expression has no effect. This patch introduces macro BUILD_BUG_ON_INVALID() for such checks, it forces a compilation error if expression is invalid without any extra code. [Cast to "long" required because sizeof does not work for bit-fields.] Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Cong Wang <xiyou.wangcong@gmail.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								5febcbe99d
							
						
					
				
			
			
				commit
				
					
						baf05aa927
					
				
			
		
					 1 changed files with 7 additions and 0 deletions
				
			
		|  | @ -30,6 +30,13 @@ struct pt_regs; | |||
| #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) | ||||
| #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) | ||||
| 
 | ||||
| /*
 | ||||
|  * BUILD_BUG_ON_INVALID() permits the compiler to check the validity of the | ||||
|  * expression but avoids the generation of any code, even if that expression | ||||
|  * has side-effects. | ||||
|  */ | ||||
| #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e)))) | ||||
| 
 | ||||
| /**
 | ||||
|  * BUILD_BUG_ON - break compile if a condition is true. | ||||
|  * @condition: the condition which the compiler should know is false. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Konstantin Khlebnikov
				Konstantin Khlebnikov