Re: Gcc-12 and SWIG problem

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

 



This idiom is known as “flexible array member,” and it is standardized since C99. The “bar[0]” syntax you mention is a GCC extension predating C99.

I’m not that familiar with the nuances of SWIG, but it looks like SWIG doesn’t understand this at all, and is treating “bar” as a pointer member and adding a nonsense (char []) cast. “bar” needs to be the target of a memcpy/memmove, not a pointer assignment. Given this, I wonder if it even generates appropriate code for the “bar[0]” version, or if it just emits a zero-length memcpy.

At first glance, and without doing any experiments of my own, I would say that, unless there’s something in SWIG that just needs to be configured differently, it certainly appears to be a SWIG bug. If so, it may be nontrivial to fix.

I wonder if this was always a little bit broken, and GCC 12 just revealed it with better diagnostics.

– Ben

On Mon, Feb 21, 2022, at 1:22 PM, Steve Grubb wrote:
> Hello,
>
> I have a FTBFS package, audit, that has a strange problem that I'd like to 
> run by the devel list. It is a common idiom in the kernel to do something 
> like:
>
> struct foo{
>         unsigned int barlen;
>         char bar[];
> };
>
> There are about 80 instances of this in the kernel headers. When one of these 
> headers is included by SWIG, it makes code like this:
>
>   if (arg2) {
>     arg1->bar = (char [])(char *)memcpy(malloc((size)*sizeof(char)), (const 
> char *)(arg2), sizeof(char)*(size));
>   } else {
>     arg1->bar = 0;
>   }
>
> which results in
>
>     error: cast specifies array type
>
> and
>
>     error: assignment to expression with array type.
>
> Is this intended to be an error by gcc-12?
>
> One fix is to change the struct decalaration to bar[0];  and gcc doesn't error 
> out on that. But that will take some time to get in the upstream kernel. Just 
> curious if this is intended by gcc or a problem of SWIG/kernel?
>
> Thanks,
> -Steve
>
> _______________________________________________
> devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> Fedora Code of Conduct: 
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives: 
> https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
> Do not reply to spam on the list, report it: 
> https://pagure.io/fedora-infrastructure
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux