zmodem wrote: We're seeing new -Wunguarded-availability warnings after this. A reduced example:
``` $ cat /tmp/x.cc template<class T> struct remove_cv { typedef T type; }; struct __attribute__((__availability__(android, introduced = 29))) AAudioStreamWrapper { }; template <typename T> struct Foo { T *p; }; template <typename T> struct Bar { typename remove_cv<T>::type *p; }; struct __attribute__((__availability__(android, introduced = 29))) User { AAudioStreamWrapper a; // okay Foo<AAudioStreamWrapper> b; // okay Bar<AAudioStreamWrapper> c; // not okay? }; $ build/bin/clang -c -target aarch64-linux-android26 -Wunguarded-availability /tmp/x.cc /tmp/x.cc:10:26: warning: 'AAudioStreamWrapper' is only available on Android 29 or newer [-Wunguarded-availability] 10 | typename remove_cv<T>::type *p; | ^ /tmp/x.cc:18:28: note: in instantiation of template class 'Bar<AAudioStreamWrapper>' requested here 18 | Bar<AAudioStreamWrapper> c; // not okay? | ^ /tmp/x.cc:3:68: note: 'AAudioStreamWrapper' has been marked as being introduced in Android 29 here, but the deployment target is Android 26 3 | struct __attribute__((__availability__(android, introduced = 29))) AAudioStreamWrapper { }; | ^ /tmp/x.cc:9:30: note: annotate 'Bar<AAudioStreamWrapper>' with an availability attribute to silence this warning 9 | template <typename T> struct Bar { | ^ 1 warning generated. ``` I believe the new warning is not correct, since `c` (like the other members) is in fact guarded by the availability attribute. I'll revert to green for now until this can be investigated. https://github.com/llvm/llvm-project/pull/129681 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits