https://bugs.gentoo.org/890587 https://github.com/curl/curl/issues/10148 https://github.com/curl/curl/commit/e2aed004302e51cfa5b6ce8c8ab65ef92aa83196 From e2aed004302e51cfa5b6ce8c8ab65ef92aa83196 Mon Sep 17 00:00:00 2001 From: Patrick Monnerat Date: Fri, 23 Dec 2022 15:35:27 +0100 Subject: [PATCH] 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 --- 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 *)) \