From: Dmytro Prokopchuk1 <dmytro_prokopchuk1@epam.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH 3/4] Eclair: relax "noreturn" function-pointer conversion deviation
Date: Mon, 5 Oct 2026 19:05:16 +0000 [thread overview]
Message-ID: <338151bb-4c3f-48c9-bf98-8acd9ea1bbbd@epam.com> (raw)
In-Reply-To: <e511c588-215e-4e73-9ba4-a0a79cee4478@suse.com>
On 9/14/26 09:27, Jan Beulich wrote:
> On 12.09.2026 18:04, Nicola Vetrini wrote:
>> On 2026-09-03 13:44, Jan Beulich wrote:
>>> Like misra/rules.rst says, function arguments other than "void *" are okay
>>> as well.
>>>
>>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>>> ---
>>> I can't explain why this covers the violation in mce.c:mce_callbacks'es
>>> initializer, but not the one in mce.c:default_handler's.
>>
>> Possibly differing attributes (e.g. cf_check vs section attributes)? Just a guess that would need to be tested, though.
>
> As long as its guesswork, it could end up being many (expensive) tries.
>
>>> As a result of 6852334f8416 ("Arm/GIC: add noreturn in a few more
>>> places"), vgic_v2_lpi_to_pending() and vgic_v2_lpi_get_priority() (both
>>> returning non-void) would also need covering. (As said in a remark there,
>>> non-void together with noreturn is somewhat odd.)
>>
>> Indeed
>>
>>> Really before and after this change there's no checking that parameter and
>>> return types actually match. I have no clue how one would express such
>>> checks.
>
> With this last sentence in mind ...
>
>> The presence of a bitcast indicates that the two types do not match exactly. Typically function attributes are not relevant towards determining a type difference, but different compilers may model non-standard features differently (rightly so), in such a way that some make a difference in the AST, and others do not.
>>
>> To check for compatibility of function pointers I would try activating service STD.funptrcv, which essentially mirrors -Wincompatible-pointer-types:
>>
>> caution for rule STD.funptrcv: (rule) A pointer is used to call a function whose type is not compatible with the pointed-to type. (untagged)
>> p.c:8.8-8.8: Loc #1 [culprit: implicit cast converts from `void(*)(int)' to `__typeof__(@EXPR@)*' (that is `void(*)(void)')]
>> qq = m;
>> ^
>> p.c: In function ‘h’:
>> p.c:8:6: error: assignment to ‘void (*)(void)’ from incompatible pointer type ‘void (*)(int)’ [-Wincompatible-pointer-types]
>> 8 | qq = m;
>> | ^
>> p.c:3:6: note: ‘m’ declared here
>> 3 | void m(int x);
>> | ^
>
> ... - well, fine, but ...
>
>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> @@ -391,11 +391,11 @@ constant expressions are required.\""
>>> }
>>> -doc_end
>>>
>>> --doc_begin="The conversion from 'void noreturn (*)(void *)' to 'void (*)(void *)' is safe
>>> +-doc_begin="The conversion from 'void noreturn (*)(...)' to 'void (*)(...)' is safe
>>> because the semantics of the 'noreturn' attribute do not alter the calling convention or behavior of the resulting code."
>>> -config=MC3A2.R11.1,casts+={safe,
>>> - "kind(bitcast)&&to(type(pointer(inner(return(builtin(void))&&all_param(1, pointer(builtin(void)))))))&&from(expr(skip(!syntactic(),
>>> - ref(property(noreturn)))))"}
>>> + "kind(bitcast)&&to(type(pointer(inner(return(builtin(void))))))&&from(expr(skip(!syntactic(),ref(property(noreturn)))))"
>>> +}
>>> -doc_end
>
> ... how would this be expressed here? Perhaps best if you would make an
> alternative patch?
>
> Jan
Please, take a look:
https://patchew.org/Xen/d68c56607781bfa829766aed36eeb31f06080fbc.1791224638.git.dmytro._5Fprokopchuk1@epam.com/
BR, Dmytro.
next prev parent reply other threads:[~2026-10-05 19:05 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 11:42 [PATCH 0/4] address most remaining rule 11.1 violations Jan Beulich
2026-09-03 11:43 ` [PATCH 1/4] x86/domain: address Misra rule 11.1 violation in reset_stack_and_call_ind() Jan Beulich
2026-09-12 15:09 ` Nicola Vetrini
2026-09-14 6:21 ` Jan Beulich
2026-09-03 11:43 ` [PATCH 2/4] Eclair: relax long <-> function-pointer conversion deviation Jan Beulich
2026-09-12 15:19 ` Nicola Vetrini
2026-09-14 6:23 ` Jan Beulich
2026-09-14 10:51 ` Nicola Vetrini
2026-09-03 11:44 ` [PATCH 3/4] Eclair: relax "noreturn" " Jan Beulich
2026-09-12 16:04 ` Nicola Vetrini
2026-09-14 6:27 ` Jan Beulich
2026-10-05 19:05 ` Dmytro Prokopchuk1 [this message]
2026-09-03 11:44 ` [PATCH 4/4] x86/kexec: address Misra rule 11.1 violation in machine_kexec_load() Jan Beulich
2026-09-12 16:06 ` Nicola Vetrini
2026-10-05 20:05 ` Dmytro Prokopchuk1
2026-09-03 11:45 ` [PATCH 0/4] address most remaining rule 11.1 violations Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=338151bb-4c3f-48c9-bf98-8acd9ea1bbbd@epam.com \
--to=dmytro_prokopchuk1@epam.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.