Skip to content

c11: _Atomic not removed from rvalue in controlling expression of _Generic. #39595

@yeah-boi

Description

@yeah-boi
mannequin
Bugzilla Link 40248
Version trunk
OS All
CC @hfinkel,@zygoloid

Extended Description

Test case (prog.c):

_Atomic int f();

int main()
{
_Generic(f(), int: 0);
}

Compilation command line:

clang prog.c -Wall -Wextra -std=c11 -pedantic-errors

Observed behaviour:

The following error message was outputed:

 error: controlling expression type '_Atomic(int)' not compatible with any
        generic association type

Expected behaviour:

No error message.

The program is well-formed.

See 6.5.1.1/2:

"The type of the controlling expression is the type of the expression as if it
had undergone an lvalue conversion, array to pointer conversion, or function
to pointer conversion"

and 6.3.2/2:

"If the lvalue has qualified type, the value has the unqualified version
of the type of the lvalue; additionally, if the lvalue has atomic type, the
value has the non-atomic version of the type of the lvalue; otherwise, the
value has the type of the lvalue."

Note:

GCC accepts the program without outputing any error message.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillaclang:diagnosticsNew/improved warning or error message in Clang, but not in clang-tidy or static analyzerclang:frontendLanguage frontend issues, e.g. anything involving "Sema"confirmedVerified by a second partyduplicateResolved as duplicate

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions