Before Android NDK r17, there was only one ioctl() function defined.
    int ioctl(int __fd, int __request, ...);

However, since Android NDK r17, another one has been added:
    int ioctl(int __fd, unsigned __request, ...)


When compiling SQLite with SQLITE_ENABLE_BATCH_ATOMIC_WRITE this will produce a build error since clang does not know which ioctl() function to cast, since sqlite2_syscall_ptr is defined as:
    typedef void (*sqlite3_syscall_ptr)(void);


====
[x86_64] Compile        : sqliteX <= sqlite3.c
  error: address of overloaded function 'ioctl' is ambiguous
    { "ioctl",         (sqlite3_syscall_ptr)ioctl,          0 },
                                            ^~~~~
  note: candidate function has different number of parameters (expected 0 but has 2)
  int ioctl(int __fd, unsigned __request, ...) __overloadable __enable_if(1, "") __RENAME(ioctl);
      ^
  note: candidate function has different number of parameters (expected 0 but has 2)
  int ioctl(int __fd, int __request, ...);
      ^
  error: initializer element is not a compile-time constant
    { "ioctl",         (sqlite3_syscall_ptr)ioctl,          0 },
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
  2 errors generated.
  make: *** Error 1
====