[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] misra: allow 'noreturn' as safe for function pointer conversions


  • To: Jan Beulich <jbeulich@xxxxxxxx>, Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
  • From: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>
  • Date: Tue, 29 Jul 2025 16:48:07 +0000
  • Accept-language: en-US, uk-UA, ru-RU
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kBsER9Q5T5NMEVL9EeMOEobvremNesBVIudib6wVxL4=; b=QfUbzpYYyyqrC4ut2AH8MTPxm2dR+QhIoW0Nn7rpLQ6jQidatadMck1XCP2L86/IXmLQLZCEIyTjvtl+zpkMbJ5RsbGIZ8lshb03ya7lWgM38GHS4N7mTqugWHce52ApqVEz2HnPxyDn6UoYAyVrPKwWHox//2yekqNxYgYY898aWEDnAcjFrU3ip8DPmnqgNxvHHZzxHaCrJWj0s3US83YhlHx+yXpAlPsHNJRoJp72reFVG9l72vjJGcwsq4jLDnaWwiqgvbt3nSr2qNyry8U3xU+lJMJMlgZBQMh0MpbW5SF6Oe62ByvXi+cO8gWep3iIIXGLmFseDztK3nEhzQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RoYCMUVRjL8bnA9tVozrjCElAMpT9SHtvdzJnH/ssHR/yLSgfnvHT4Jy8TryFYCX6tx8273AR3mYItawSZbfz1FH0PzNj7mctJsukLvuvWdp6LTCRh5qIEy75eq6H64WegD1KKunnesCN2VtIBEHVju95jcOWEbAY2/uU4swMcnAsd0nvPiTy/5YChfFhw04gsgxlpkHZ8c+KoXsq3fhlFAbOhuqm7ffx/LZ8wGfoVLkl2TiQmSkM1F99yKHhk8kk64eMi87+ijkq0Pa5ATQOilerwulc28H/i2i5AFluuNrsnsJYp+rDkxpuyiwd8ObN/EGYfycdm4YJAGq2YZMmQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Doug Goldstein <cardoe@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 29 Jul 2025 16:48:19 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcAINAh5kgMNbMpUuhxpfVzSXJUrRJCpcAgAAGhoCAAAHoAIAAAdyAgAAC+QCAADg9gA==
  • Thread-topic: [PATCH v2] misra: allow 'noreturn' as safe for function pointer conversions


On 7/29/25 16:26, Jan Beulich wrote:
> On 29.07.2025 15:16, Nicola Vetrini wrote:
>> On 2025-07-29 15:09, Jan Beulich wrote:
>>> On 29.07.2025 15:02, Nicola Vetrini wrote:
>>>> On 2025-07-29 14:39, Jan Beulich wrote:
>>>>> On 29.07.2025 14:21, Dmytro Prokopchuk1 wrote:
>>>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> @@ -367,6 +367,13 @@ constant expressions are required.\""
>>>>>>   }
>>>>>>   -doc_end
>>>>>>
>>>>>> +-doc_begin="The conversion from 'void noreturn (*)(void *)' to
>>>>>> 'void
>>>>>> (*)(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)))))"}
>>>>>> +-doc_end
>>>>>
>>>>> As I understand it, this is about any function, not just void (void
>>>>> *)
>>>>> ones.
>>>>> Hence throughout anything textual in this patch, may I ask that this
>>>>> be
>>>>> made
>>>>> explicit by inserting e.g. "e.g." everywhere?
>>>>
>>>> Technically yes, in practice other implicit function pointer
>>>> conversions
>>>> would be caught by -Wincompatible-pointer-types and similar flags so
>>>> they don't even come into play. However I agree that adding that is
>>>> clearer.
>>>
>>> Perhaps a misunderstanding: With "any" I meant any which has a noreturn
>>> attribute, when converted to one with otherwise the same signature. But
>>> irrespective of the particular return type or parameter types (i.e.
>>> specifically not just void (void *) ones).
>>
>> Ah, sorry, I misunderstood. We check the destination type of the
>> conversion with
>> "to(type(pointer(inner(return(builtin(void))&&all_param(1,
>> pointer(builtin(void)))))))". In principle it could be avoided but I
>> think that at the moment it's ok as it is, then if it needs to be
>> extended when more cases emerge I can do that.
> 
> Oh, then my comment to Dmytro (still in context above) was wrong. But
> why would we limit things as much? For noreturn functions a return type
> of other than void is surely not to be expected, so that part is fine.
> Yet any kinds of parameters would want to be permitted.
> 
> Jan
As the Eclair tries to check the exact function prototype, deviation 
wording is acceptable, per my understanding.

Regarding the patch subject, I may to change it to this:
"misra: allow discarding 'noreturn' during function pointer conversions".

Dmytro

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.