Rémi Bernon (@rbernon) commented about tools/widl/parser.y:
} } + if (!is_attr(iface->attrs, ATTR_LOCAL) && !is_attr(iface->attrs, ATTR_UUID) && !is_attr(iface->attrs, ATTR_VERSION)) + { + statement_list_t* methods = type_iface_get_stmts(iface); + if (methods) + { + int method_count = 0; + STATEMENTS_FOR_EACH_FUNC( stmt, methods ) + { + method_count++; + } + if (method_count) + error_at( &iface->where, "Can't omit both local and uuid keyword" ); + } + }
I believe the check should be: 1) `[object]` interfaces are required to have a `[uuid]`, empty or not. 2) `[local]` interfaces are allowed to not have a `[uuid]`, empty or not. 3) remote (non-`[object]`, non-`[local]`) interfaces must have an `[uuid]`, unless they are empty, but they aren't supposed to be empty and there's a separate warning. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/3149#note_37835