blob: 85461f64d1d3b8d0bcd74eee2012af665a6b9c5e [file] [log] [blame]
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
*/