This is the mail archive of the
gsl-discuss@sources.redhat.com
mailing list for the GSL project.
Re: Problem building vector/reim_source.c
On Sat, Aug 18, 2001 at 09:02:49PM -0500, gsl-discuss@lists.thewrittenword.com wrote:
> On Sat, Aug 18, 2001 at 08:24:23PM -0500, gsl-discuss@lists.thewrittenword.com wrote:
> > I don't think this is legal C89 code (from vector/reim_source.c):
> >
> > QUALIFIED_REAL_VIEW(gsl_vector, view)
> > FUNCTION(gsl_vector, real) (QUALIFIED_TYPE(gsl_vector) * v)
> > {
> > REAL_TYPE(gsl_vector) s = NULL_VECTOR;
> >
> > s.data = v->data;
> > s.size = v->size;
> > s.stride = MULTIPLICITY * v->stride;
> > s.block = 0; /* FIXME: should be v->block, but cannot point to
> > block of different type */
> > s.owner = 0;
> >
> > {
> > QUALIFIED_REAL_VIEW(gsl_vector,view) view = NULL_VECTOR_VIEW;
> > ((REAL_VIEW(gsl_vector,view) *)(&view))->vector = s;
> > return view;
> > }
> > }
> >
> > The Solaris C compiler gives:
> >
> > cc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I.. -mr -Qn -xstrconst -xO2
> > -xtarget=generic -c reim.c -KPIC -DPIC -o reim.o
> > "./reim_source.c", line 35: left operand must be modifiable lvalue: op "="
> > "./reim_source.c", line 53: left operand must be modifiable lvalue: op "="
> > "./reim_source.c", line 35: left operand must be modifiable lvalue: op "="
> > "./reim_source.c", line 53: left operand must be modifiable lvalue: op "="
> > "./reim_source.c", line 35: left operand must be modifiable lvalue: op "="
> > "./reim_source.c", line 53: left operand must be modifiable lvalue: op "="
> > cc: acomp failed for reim.c
> >
> > I don't believe you can cast an lvalue.
>
> Ok, upon further investigation, the following code in vector/reim.c:
>
> #define USE_QUALIFIER
> #define QUALIFIER const
>
> #define BASE_GSL_COMPLEX_LONG
> #include "templates_on.h"
> #include "reim_source.c"
> #include "templates_off.h"
> #undef BASE_GSL_COMPLEX_LONG
>
> causes the chunk above in vector/reim_source.c to cpp to:
>
> gsl_vector_long_double_const_view
> gsl_vector_complex_long_double_const_real (
> const gsl_vector_complex_long_double * v)
> {
> gsl_vector_long_double s = { 0 , 0 , 0 , 0 };
>
> s.data = v->data;
> s.size = v->size;
> s.stride = 2 * v->stride;
> s.block = 0;
> s.owner = 0;
>
> {
> gsl_vector_long_double_const_view view = { { 0 , 0 , 0 , 0 } };
> (( gsl_vector_long_double_view *)(&view))->vector = s;
> return view;
> }
> }
>
> So, the Solaris C compiler isn't allowing you to throw away the
> const'ness of view (seems correct to me). I tried compiling with the
> native compilers on Tru64 UNIX, IRIX, HP, and AIX and they all accept
> the construct above.
Actually, it's complaining about "return view".
--
albert chin (china@thewrittenword.com)