Description
__typeof__(AHardwareBuffer_acquire) is a type-only query.
It does not call the function, does not require code generation, and does not involve linking. Availability checks should not trigger in this context.
Is this intended, or a bug in availability diagnostics?
I understand that __ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__ can be used, but it makes it easy to accidentally call AHardwareBuffer_acquire instead of, for example, pAHardwareBuffer_acquire, which can lead to a segmentation fault due to a null function pointer. If type-only usage were allowed, it would be possible to define simple wrappers or substitutes that could be called uniformly (e.g., pAHardwareBuffer_acquire) without the risk of accidentally invoking the original function.
Minimal repro:
#include <android/hardware_buffer.h>
__typeof__(AHardwareBuffer_acquire)* p = NULL;
Build with something like
~/Android/Sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang ./test.c
Result:
./test.c:3:12: error: 'AHardwareBuffer_acquire' is unavailable: introduced in Android 26 android
3 | __typeof__(AHardwareBuffer_acquire)* p = NULL;
| ^
/home/twaik/Android/Sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/android/hardware_buffer.h:432:6: note: 'AHardwareBuffer_acquire' has been explicitly marked unavailable here
432 | void AHardwareBuffer_acquire(AHardwareBuffer* _Nonnull buffer) __INTRODUCED_IN(26);
| ^
1 error generated.
I am using a supported NDK
Affected versions
r29
Description
__typeof__(AHardwareBuffer_acquire)is a type-only query.It does not call the function, does not require code generation, and does not involve linking. Availability checks should not trigger in this context.
Is this intended, or a bug in availability diagnostics?
I understand that
__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__can be used, but it makes it easy to accidentally callAHardwareBuffer_acquireinstead of, for example,pAHardwareBuffer_acquire, which can lead to a segmentation fault due to a null function pointer. If type-only usage were allowed, it would be possible to define simple wrappers or substitutes that could be called uniformly (e.g.,pAHardwareBuffer_acquire) without the risk of accidentally invoking the original function.Minimal repro:
Build with something like
Result:
I am using a supported NDK
Affected versions
r29