On 1/11/22 2:37 PM, Martin Liška wrote: > Hello. > > I do support the patch, but I would ... Thanks, Martin,  that makes the patch simpler and easier to maintain. Would the attached version do? Thanks Tomas > > On 1/7/22 19:33, Tomas Kalibera wrote: >> +          if (is_attribute_p ("format", get_attribute_name (aa)) && >> +              fndecl && fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)) >> +            { >> +              switch (DECL_FUNCTION_CODE (fndecl)) >> +            { >> +            case BUILT_IN_FSCANF: >> +            case BUILT_IN_PRINTF: >> +            case BUILT_IN_SCANF: >> +            case BUILT_IN_SNPRINTF: >> +            case BUILT_IN_SSCANF: >> +            case BUILT_IN_VFSCANF: >> +            case BUILT_IN_VPRINTF: >> +            case BUILT_IN_VSCANF: >> +            case BUILT_IN_VSNPRINTF: >> +            case BUILT_IN_VSSCANF: >> +            case BUILT_IN_DCGETTEXT: >> +            case BUILT_IN_DGETTEXT: >> +            case BUILT_IN_GETTEXT: >> +            case BUILT_IN_STRFMON: >> +            case BUILT_IN_STRFTIME: >> +            case BUILT_IN_SNPRINTF_CHK: >> +            case BUILT_IN_VSNPRINTF_CHK: >> +            case BUILT_IN_PRINTF_CHK: >> +            case BUILT_IN_VPRINTF_CHK: >> +              skipped_default_format = 1; >> +              break; >> +            default: >> +              break; >> +            } >> +            } > > ... skip this as the listed functions are only these that have defined > ATTR_FORMAT_*: > > $ grep ATTR_FORMAT gcc/builtins.def > DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", > BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3) > DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", > BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2) > DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", > BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2) > DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", > BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_3_4) > DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", > BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_NOTHROW_2_3) > DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", > BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0) > DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", > BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0) > DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", > BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0) > DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", > BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, > ATTR_FORMAT_PRINTF_NOTHROW_3_0) > DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", > BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, > ATTR_FORMAT_SCANF_NOTHROW_2_0) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", > BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", > BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", > BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON, "strfmon", > BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, > ATTR_FORMAT_STRFMON_NOTHROW_3_4) > DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", > BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_TM_PTR, > ATTR_FORMAT_STRFTIME_NOTHROW_3_0) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_SNPRINTF_CHK, "__snprintf_chk", > BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR, > ATTR_FORMAT_PRINTF_NOTHROW_5_6) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSNPRINTF_CHK, "__vsnprintf_chk", > BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG, > ATTR_FORMAT_PRINTF_NOTHROW_5_0) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_CHK, "__printf_chk", > BT_FN_INT_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3) > DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", > BT_FN_INT_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0) > > Martin