================
@@ -92,3 +92,43 @@ extern __attribute__((address_space(0))) int 
type_attr_test_2;          // expec
 void invalid_param_fn(__attribute__((address_space(1))) int i); // 
expected-error {{parameter may not be qualified with an address space}}
 typeof(invalid_param_fn) invalid_param_1;
 typeof_unqual(invalid_param_fn) invalid_param_2;
+
+// Ensure restrict is stripped
+extern int *restrict p1;
+extern int *p2;
+extern typeof(p1) p1;
+extern typeof_unqual(p1) p2;
+
+// Ensure array qualifications are removed
+extern const int aci[2];
+extern const int acii[2][2];
+extern int ai[2];
+extern int aii[2][2];
+extern typeof(aci) aci;
+extern typeof_unqual(aci) ai;
+extern typeof(acii) acii;
+extern typeof_unqual(acii) aii;
+
+extern int *restrict arpi[2];
+extern int *restrict arpii[2][2];
+extern int *api[2];
+extern int *apii[2][2];
+extern typeof(arpi) arpi;
+extern typeof_unqual(arpi) api;
+extern typeof(arpii) arpii;
+extern typeof_unqual(arpii) apii;
+
+extern int _Atomic aAi[2];
+extern int _Atomic aAii[2][2];
+extern typeof(aAi) aAi;
+extern typeof_unqual(aAi) ai;
+extern typeof(aAii) aAii;
+extern typeof_unqual(aAii) aii;
----------------
AaronBallman wrote:

I think this is a more complicated situation, perhaps. `_Atomic` as a type 
qualifier (as with `_Atomic type`) is excluded in terms of arrays and elements 
being identically qualified (see footnote 42, which says "This does not apply 
to the _Atomic qualifier.") so the array is not atomic to begin with. So 
`typeof_unqual` would strip the non-existent qualifiers from the array in this 
case but leave them alone in the element type. However, `_Atomic` as a type 
specifier (as with `_Atomic(type)`) is an atomic-qualified type and so it would 
be stripped in that case (see footnote 146 which also reminds us that 
`_Atomic(type-name)` is an atomic-qualified type).

So I think the behavior of this case is correct but we need another test for 
`_Atomic(int)`.

https://github.com/llvm/llvm-project/pull/92767
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to