void f00(int _Atomic dst); void f01(int _Atomic *dst); void f02(int _Atomic *dst); void f03(int _Atomic *dst); int _Atomic qo; int uo; void f00(int dst) { } /* check-should-fail */ void f01(typeof(&qo) dst) { } /* check-should-pass */ void f02(int *dst) { } /* check-should-fail */ void f03(typeof(&uo) dst) { } /* check-should-fail */ void foo(void) { qo = uo; /* check-should-pass */ uo = qo; /* check-should-pass */ } void ref(void) { const int qo; int uo; const int *pqo; int *puo; pqo = &qo; /* check-should-pass */ pqo = &uo; /* check-should-pass */ pqo = puo; /* check-should-pass */ puo = &uo; /* check-should-pass */ puo = &qo; /* check-should-fail */ puo = pqo; /* check-should-fail */ } void bar(void) { int _Atomic *pqo; int *puo; pqo = &qo; /* check-should-pass */ pqo = &uo; /* check-should-fail */ pqo = puo; /* check-should-fail */ puo = &uo; /* check-should-pass */ puo = &qo; /* check-should-fail */ puo = pqo; /* check-should-fail */ } void baz(void) { typeof(&qo) pqo; typeof(&uo) puo; pqo = &qo; /* check-should-pass */ pqo = &uo; /* check-should-fail*/ pqo = puo; /* check-should-fail */ puo = &uo; /* check-should-pass */ puo = &qo; /* check-should-fail */ puo = pqo; /* check-should-fail */ } /* * check-name: C11 _Atomic type qualifier * check-command: sparse -Wno-decl $file * * check-error-start c11-atomic.c:9:6: error: symbol 'f00' redeclared with different type (incompatible argument 1 (different modifiers)): c11-atomic.c:9:6: void extern [addressable] [toplevel] f00( ... ) c11-atomic.c:1:6: note: previously declared as: c11-atomic.c:1:6: void extern [addressable] [toplevel] f00( ... ) c11-atomic.c:11:6: error: symbol 'f02' redeclared with different type (incompatible argument 1 (different modifiers)): c11-atomic.c:11:6: void extern [addressable] [toplevel] f02( ... ) c11-atomic.c:3:6: note: previously declared as: c11-atomic.c:3:6: void extern [addressable] [toplevel] f02( ... ) c11-atomic.c:12:6: error: symbol 'f03' redeclared with different type (incompatible argument 1 (different modifiers)): c11-atomic.c:12:6: void extern [addressable] [toplevel] f03( ... ) c11-atomic.c:4:6: note: previously declared as: c11-atomic.c:4:6: void extern [addressable] [toplevel] f03( ... ) c11-atomic.c:33:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:33:13: expected int *[assigned] puo c11-atomic.c:33:13: got int const * c11-atomic.c:34:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:34:13: expected int *[assigned] puo c11-atomic.c:34:13: got int const *[assigned] pqo c11-atomic.c:43:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:43:13: expected int [atomic] *[assigned] pqo c11-atomic.c:43:13: got int * c11-atomic.c:44:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:44:13: expected int [atomic] *[assigned] pqo c11-atomic.c:44:13: got int *puo c11-atomic.c:48:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:48:13: expected int *[assigned] puo c11-atomic.c:48:13: got int [atomic] * c11-atomic.c:49:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:49:13: expected int *[assigned] puo c11-atomic.c:49:13: got int [atomic] *[assigned] pqo c11-atomic.c:58:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:58:13: expected int [atomic] *[assigned] pqo c11-atomic.c:58:13: got int * c11-atomic.c:59:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:59:13: expected int [atomic] *[assigned] pqo c11-atomic.c:59:13: got int *puo c11-atomic.c:63:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:63:13: expected int *[assigned] puo c11-atomic.c:63:13: got int [atomic] * c11-atomic.c:64:13: warning: incorrect type in assignment (different modifiers) c11-atomic.c:64:13: expected int *[assigned] puo c11-atomic.c:64:13: got int [atomic] *[assigned] pqo * check-error-end */