inline constant return from error() function
Commitmainte208f9cintroduced a macro to turn error() calls into: (error(), -1) to make the constant return value more visible to the calling code (and thus let the compiler make better decisions about the code). This works well for code like: return error(...); but the "-1" is superfluous in code that just calls error() without caring about the return value. In older versions of gcc, that was fine, but gcc 4.9 complains with -Wunused-value. We can work around this by encapsulating the constant return value in a static inline function, as gcc specifically avoids complaining about unused function returns unless the function has been specifically marked with the warn_unused_result attribute. We also use the same trick for config_error_nonbool and opterror, which learned the same error technique ina469a10. Reported-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
							parent
							
								
									0bc85abb7a
								
							
						
					
					
						commit
						87fe5df365
					
				
							
								
								
									
										2
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										2
									
								
								cache.h
								
								
								
								
							|  | @ -1184,7 +1184,7 @@ extern int git_env_bool(const char *, int); | |||
| extern int git_config_system(void); | ||||
| extern int config_error_nonbool(const char *); | ||||
| #if defined(__GNUC__) && ! defined(__clang__) | ||||
| #define config_error_nonbool(s) (config_error_nonbool(s), -1) | ||||
| #define config_error_nonbool(s) (config_error_nonbool(s), const_error()) | ||||
| #endif | ||||
| extern const char *get_log_output_encoding(void); | ||||
| extern const char *get_commit_output_encoding(void); | ||||
|  |  | |||
|  | @ -343,7 +343,11 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2))) | |||
|  * using the function as usual. | ||||
|  */ | ||||
| #if defined(__GNUC__) && ! defined(__clang__) | ||||
| #define error(...) (error(__VA_ARGS__), -1) | ||||
| static inline int const_error(void) | ||||
| { | ||||
| 	return -1; | ||||
| } | ||||
| #define error(...) (error(__VA_ARGS__), const_error()) | ||||
| #endif | ||||
|  | ||||
| extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params)); | ||||
|  |  | |||
|  | @ -180,7 +180,7 @@ extern NORETURN void usage_msg_opt(const char *msg, | |||
| extern int optbug(const struct option *opt, const char *reason); | ||||
| extern int opterror(const struct option *opt, const char *reason, int flags); | ||||
| #if defined(__GNUC__) && ! defined(__clang__) | ||||
| #define opterror(o,r,f) (opterror((o),(r),(f)), -1) | ||||
| #define opterror(o,r,f) (opterror((o),(r),(f)), const_error()) | ||||
| #endif | ||||
|  | ||||
| /*----- incremental advanced APIs -----*/ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King