Skip to content

clang rejects nested struct-member-access-typeof #11671

@efriedma-quic

Description

@efriedma-quic
Bugzilla Link 11299
Version unspecified
OS All

Extended Description

(This is a copy-paste of a message from Jan Engelhardt to cfe-dev.)

== Compiler info (clang -v) ==

[openSUSE 12.1 RC]
SUSE Linux clang version 3.0 (trunk 140782) (based on LLVM 3.0)
Target: x86_64-unknown-linux-gnu
Thread model: posix

== Source ==

int main(void)
{
void *p = 0;
typeof((struct { typeof((struct { void *m; }){p}.m) n; }){0}.n) q = 0;
return 0;
}

== Description ==

I was giving clang a spin on libHX [http://libhx.sf.net/] when it errored out
on libHX's "type-checking casts" macros. The above source snippet is the
distilled minimal test case.

../../src/format.c:34:29: error: initializer element is not a compile-time
constant
return const_cast1(void *, static_cast(const void *, t));
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...]

== Observed output ==

$ clang test.c
t.c:4:47: error: initializer element is not a compile-time constant
typeof((struct { typeof((struct { void *m; }){p}.m) n; }){0}.n) q = 0;
^~~
t.c:4:63: error: member reference base type 'void' is not a structure or union
typeof((struct { typeof((struct { void *m; }){p}.m) n; }){0}.n) q = 0;
~~~ ^
2 errors generated.

== Expected output ==

That no errors be output. GCC 4.5/4.6/4.x compiles the very same file
fine, because it sees that we are really only doing type inspection.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillaclang:frontendLanguage frontend issues, e.g. anything involving "Sema"rejects-valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions