如果GCC接受C11原子int强制转换,而clang拒绝它们,那么哪个是正确的?

如果GCC接受C11原子int强制转换,而clang拒绝它们,那么哪个是正确的?,c,gcc,clang,c11,C,Gcc,Clang,C11,假设我有以下C11程序: #包括 int main() { int x=0;//令人惊讶的是,如果'atomic_int x',同样的行为 原子_int y=(原子_int)x; } 如果我用gcc9编译它,我不会得到任何错误。如果我用Appleclang11编译它,我会得到: foo.c:7:17: error: used type 'atomic_int' (aka '_Atomic(int)') where arithmetic or pointer type is requ

假设我有以下C11程序:

#包括
int
main()
{
int x=0;//令人惊讶的是,如果'atomic_int x',同样的行为
原子_int y=(原子_int)x;
}
如果我用
gcc
9编译它,我不会得到任何错误。如果我用Apple
clang
11编译它,我会得到:

foo.c:7:17: error: used type 'atomic_int' (aka '_Atomic(int)') where arithmetic or
      pointer type is required
        atomic_int y = (atomic_int) x;
在不同的平台上使用不同版本的GCC、Clang和其他支持C11的编译器时,类似的问题比比皆是。无论是否设置了
--std=c11
,都会发生这种情况

快速阅读说明(在6.5.4中)“类型名称应指定原子、合格、, 或不合格的标量类型,操作数应具有标量类型',这表明强制转换是合法的-我看不到任何其他说法

所以,我的问题是:
clang
在这里是错误的吗?其他编译器是否错误地接受了此强制转换?这是允许
clang
gcc
不同的地方吗


(顺便提一下,更广泛的背景是,我正在使用一个生成C代码的第三方程序,其中包括从
intmax\t
atomic\u int
的转换。该转换在
gcc
上工作,gcc是该程序唯一受支持的编译器,但在
clang
上失败,因此,macOS的
gcc
,它是
clang
的别名。我正在试图找出错误所在--
clang
拒绝有效代码,生成无效代码的程序,或者macOS假装编译器不是
gcc
的替代品。)

一年前@GiovanniCerretani报告了一个bug,啊,我错过了,抱歉和感谢!我想知道为什么它从未被发现。