Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Помогите победить internal compiler error  [new]
amsdev
Member

Откуда:
Сообщений: 52
Приветствую !

Пытаюсь тут хотя бы частично собрать mORMot под С++Builder (на данный момент интересует его модули по криптографии а так же враппер sqlite). Практически все что мне нужно удалось скомпилировать и получить .hpp и .obj файлы для билдера после доработки напильником.

А вот как раз с враппером SynSqlite3.pas возникает проблема с F2084 Internal Error: GH8147. Пол дня бился чтобы понять на каком месте он валится и выяснилось вот что:

const

SQLITE_TRANSIENT = pointer(-1);

...
result_blob: procedure(Context: TSQLite3FunctionContext; Value: Pointer;
                                  Value_bytes: Integer=0; DestroyPtr: TSQLDestroyPtr=SQLITE_TRANSIENT); cdecl;


32 битный компилятор валится из-за параметра по умолчанию TSQLDestroyPtr=SQLITE_TRANSIENT на этапе генерации .hpp файла для билдера, а 64 битный компилятор работает нормально.

Он хоть убей не хочет чтобы в качестве параметра по умолчанию был pointer(-1) ну или pointer($ffffffff). Как бы обойти чтобы заработало ? Может кто сталкивался с такой проблемой ?

з.ы. Студия Rio с последним update.
18 фев 21, 03:51    [22282558]     Ответить | Цитировать Сообщить модератору
 Re: Помогите победить internal compiler error  [new]
inbox
Member [заблокирован]

Откуда:
Сообщений: 17
+

https://github.com/sqlite/sqlite/blob/17b74817c09709c0dece04b65a6bfa888a4007b5/src/vdbeapi.c#L398
https://github.com/sqlite/sqlite/blob/4ad1a1c74caeee76124091e6e1771fae4afa1a33/src/vdbemem.c#L1068

void sqlite3_result_blob(
  sqlite3_context *pCtx, 
  const void *z, 
  int n, 
  void (*xDel)(void *)
){
  assert( n>=0 );
  assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
  setResultStrOrError(pCtx, z, n, 0, xDel);
}
void sqlite3_result_blob64(
  sqlite3_context *pCtx, 
  const void *z, 
  sqlite3_uint64 n,
  void (*xDel)(void *)
){
  assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
  assert( xDel!=SQLITE_DYNAMIC );
  if( n>0x7fffffff ){
    (void)invokeValueDestructor(z, xDel, pCtx);
  }else{
    setResultStrOrError(pCtx, z, (int)n, 0, xDel);
  }
}


typedef void (*sqlite3_destructor_type)(void*);
#define SQLITE_STATIC      ((sqlite3_destructor_type)0)
#define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
18 фев 21, 05:42    [22282561]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить