| /* Test to exercise attribute "nonstring" syntax. |
| { dg-do compile } |
| { dg-options "-Wattributes" } */ |
| |
| #define ATTR(list) __attribute__ (list) |
| #define NONSTR ATTR ((nonstring)) |
| |
| /* Verify it's accepted on char arrays. */ |
| extern NONSTR char nsx_1[]; |
| extern char NONSTR nsx_2[]; |
| extern char nsx_3[] NONSTR; |
| |
| extern NONSTR char ns1[1]; |
| extern char NONSTR ns3[3]; |
| extern char ns5[5] NONSTR; |
| |
| /* Verify it's accepted on char pointers. */ |
| extern NONSTR char* pns_1; |
| extern char NONSTR* pns_2; |
| extern char* NONSTR pns_3; |
| |
| struct S |
| { |
| /* Verify it's accepted on char member pointers. */ |
| NONSTR char* mpns_1; |
| char NONSTR* mpns_2; |
| char* NONSTR mpns_3; |
| |
| /* Verify it's accepted on char member arrays. */ |
| NONSTR char mns1[1]; |
| char NONSTR mns3[3]; |
| char mns5[5] NONSTR; |
| |
| /* Verify it's accepted on char flexible array members. */ |
| char mnsx[] NONSTR; |
| }; |
| |
| /* Verify it's rejected on non-array and non-pointer objects. */ |
| extern NONSTR char c1; /* { dg-warning ".nonstring. attribute ignored on objects of type .char." } */ |
| |
| extern NONSTR int i1; /* { dg-warning ".nonstring. attribute ignored on objects of type .int." } */ |
| |
| extern NONSTR int ia1[]; /* { dg-warning ".nonstring. attribute ignored on objects of type .int *\\\[\\\]." } */ |
| |
| extern NONSTR int* pi1; /* { dg-warning ".nonstring. attribute ignored on objects of type .int *\\*." } */ |
| |
| extern NONSTR |
| void f (void); /* { dg-warning ".nonstring. attribute does not apply to functions" } */ |
| |
| struct NONSTR |
| NonStrType { int i; }; /* { dg-warning ".nonstring. attribute does not apply to types" } */ |
| |
| typedef char NONSTR nschar_t; /* { dg-warning ".nonstring. attribute does not apply to types" } */ |
| |
| void func (NONSTR char *pns1, char NONSTR *pns2, char* NONSTR pns3) |
| { |
| (void)pns1; |
| (void)pns2; |
| (void)pns3; |
| } |