"Alexei Alexandrov" <[EMAIL PROTECTED]> wrote:
> As far as I understand, this fix will take the problem away only
> because SumCtx is bigger now. But the problem with
> sqlite3_aggregate_context will remain: the pointer returned will not
> be aligned properly if the size of the context is less or equal 32
> bytes. Am I correct?
> 

The context should be 8-byte aligned regardless.  And after
check-in [3084] there are no long doubles stored in the context
so 8-byte alignment is sufficient - provided of course that you
do not implement your own private aggregate functions that
require a 16-byte aligned context.

The Mem structure does not appear on disk or in any API (except
as the opaque structure pointer sqlite3_value*) so it can be 
revised as needed to force 16-byte alignment.  Perhaps 
the following definition of Mem would work better:

  struct Mem {
    u16 flags;   
    u8  type;    
    u8  enc;     
    char *z;     
    int n;       
    i64 i;       
    double r;    
    char zShort[NBFS];
    void (*xDel)(void *);
  };

Assuming the entire structure is 16-byte aligned and pointers
and integers are all 8-bytes and 8-byte aligned, then there
would be 4 bytes of padding between Mem.enc and Mem.z.  This
would result in zShort appearing on a 16-byte boundary, would
it not?

--
D. Richard Hipp   <[EMAIL PROTECTED]>

Reply via email to