>>> On 10.08.16 at 11:46, <jbeul...@suse.com> wrote:
> Odd. I've tried this simple example:
> 
> typedef int fn_t(void);
> 
> struct s {
>       unsigned n;
>       fn_t**fn;
>       fn_t*const*fnc;
>       const fn_t**cfn;
> };
> 
> int test1(const struct s*ps) {
>       unsigned i;
>       int rc = 0;
> 
>       for(i = 0; !rc && i < ps->n; ++i)
>               rc = ps->fn[i]();
> 
>       return rc;
> }
> 
> int test2(const struct s*ps) {
>       unsigned i;
>       int rc = 0;
> 
>       for(i = 0; !rc && i < ps->n; ++i)
>               rc = ps->fnc[i]();
> 
>       return rc;
> }
> 
> int test3(const struct s*ps) {
>       unsigned i;
>       int rc = 0;
> 
>       for(i = 0; !rc && i < ps->n; ++i)
>               rc = ps->cfn[i]();
> 
>       return rc;
> }
> 
> test1() and test2() get compiled identically. test3(), using the field
> with the misplaced const, oddly enough gets compiled slightly
> differently (and without a warning despite one would seem
> warranted), yet the call doesn't get omitted. If, however, I change
> the return type of fn_t to void, the function body of test3() ends
> up empty, which is a compiler bug afaict, but which also suggests
> that you've tried the variant with the misplaced const.

FTR: This is not a compiler bug, as specifically named undefined
in the C spec.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to