From e2aed004302e51cfa5b6ce8c8ab65ef92aa83196 Mon Sep 17 00:00:00 2001 From: Patrick Monnerat Date: Fri, 23 Dec 2022 15:35:27 +0100 Subject: typecheck: accept expressions for option/info parameters As expressions can have side effects, evaluate only once. To enable deprecation reporting only once, get rid of the __typeof__ use to define the local temporary variable and use the target type (CURLoption/CURLINFO). This also avoids multiple reports on type conflicts (if some) by the curlcheck_* macros. Note that CURLOPT_* and CURLINFO_* symbols may be deprecated, but not their values: a curl_easy_setopt call with an integer constant as option will never report a deprecation. Reported-by: Thomas Klausner Fixes #10148 Closes #10149 --- include/curl/typecheck-gcc.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h index bf655bb632..85aa8b7b49 100644 --- a/include/curl/typecheck-gcc.h +++ b/include/curl/typecheck-gcc.h @@ -42,9 +42,8 @@ */ #define curl_easy_setopt(handle, option, value) \ __extension__({ \ - CURL_IGNORE_DEPRECATION(__typeof__(option) _curl_opt = option;) \ + CURLoption _curl_opt = (option); \ if(__builtin_constant_p(_curl_opt)) { \ - (void) option; \ CURL_IGNORE_DEPRECATION( \ if(curlcheck_long_option(_curl_opt)) \ if(!curlcheck_long(value)) \ @@ -120,9 +119,8 @@ /* wraps curl_easy_getinfo() with typechecking */ #define curl_easy_getinfo(handle, info, arg) \ __extension__({ \ - CURL_IGNORE_DEPRECATION(__typeof__(info) _curl_info = info;) \ + CURLINFO _curl_info = (info); \ if(__builtin_constant_p(_curl_info)) { \ - (void) info; \ CURL_IGNORE_DEPRECATION( \ if(curlcheck_string_info(_curl_info)) \ if(!curlcheck_arr((arg), char *)) \ -- cgit v1.2.3-53-g9071