This is the mail archive of the gsl-discuss@sources.redhat.com mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]