================
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -triple arm64-apple-ios -fsyntax-only -verify
-fptrauth-intrinsics -std=c++11 %s
+// RUN: %clang_cc1 -triple aarch64-linux-gnu -fsyntax-only -verify
-fptrauth-intrinsics -std=c++11 %s
+
+template <typename T> struct G {
+ T __ptrauth(0,0,1234) test;
+ // expected-error@-1 2 {{type '__ptrauth(0,0,1234) T' is already
__ptrauth-qualified}}
+};
+
+template <typename T> struct Indirect {
+ G<T> layers;
+ // expected-note@-1{{in instantiation of template class 'G<void
*__ptrauth(0,0,1235)>' requested here}}
+ // expected-note@-2{{in instantiation of template class 'G<void
*__ptrauth(0,0,1234)>' requested here}}
+};
+
+void f3() {
+ Indirect<void* __ptrauth(0,0,1234)> one;
+ // expected-note@-1{{in instantiation of template class 'Indirect<void
*__ptrauth(0,0,1234)>' requested here}}
+ Indirect<void* __ptrauth(0,0,1235)> two;
+ // expected-note@-1{{in instantiation of template class 'Indirect<void
*__ptrauth(0,0,1235)>' requested here}}
+ Indirect<void*> three;
+}
----------------
ojhunt wrote:
@AaronBallman
__ptrauth qualified pointers can be template parameters, and can be deduced,
however the qualifier itself cannot be dependent, e.g.
```cpp
template <class T> struct Foo {
T v;
T *__ptrauth(1,1,1000) ptr;
};
```
Is valid, and can be instantiated as you would expect with `Foo<int>`, `Foo<int
*>`, or `Foo<int *__ptrauth(1,1,1)>`.
However you can't use template parameters in the qualifier itself, e.g.
```cpp
template <unsigned u> struct Foo {
void * __ptrauth(1,1,u) ptr;
}
```
is not valid, but that's just because supporting such has never been high
enough on the priority list.
Because functions can't take __ptrauth qualified parameters something like
```
template <class T> void f(T);
...
void *__ptrauth (1,1,1) ptr;
f(ptr)
```
results in the type decaying during deduction so the deduced parameter type is
just `void*`.
https://github.com/llvm/llvm-project/pull/100830
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits