[Bug fortran/68649] [6/7/8 Regression] note: code may be misoptimized unless -fno-strict-aliasing is used
tkoenig at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Feb 4 10:49:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68649
Thomas Koenig <tkoenig at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pault at gcc dot gnu.org
--- Comment #22 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
What we _could_ do with our array descriptors is to cast them to
a pointer containing a flexible array member, i.e.
struct type_descr {
type *base_addr;
size_t offset;
dtype_type dtype;
index_type span;
descriptor_dimension dim[];
}
which would make all our function calls equal.
I have lightly tested the concept with a C program, i.e.
foo.c:
struct Xflex { int n; int a[]; };
int foo (struct Xflex *f)
{
int i;
int s;
s = 0;
for (i=0; i<f->n; i++)
s += f->a[i];
return s;
}
bar.c:
#include <stdio.h>
struct Xflex { int n; int a[]; };
struct X2 { int n; int a[2]; };
struct X2 x;
int foo (struct Xflex *f);
int main(void)
{
x.n = 2;
x.a[0] = 1;
x.a[1] = 3;
printf("%d\n", foo((struct Xflex *) &x));
}
which seems to work.
More information about the Gcc-bugs
mailing list