[cfe-dev] clang rejects nested struct-member-access-typeof
Jan Engelhardt
jengelh at medozas.de
Tue Nov 1 17:50:08 PDT 2011
== 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.
More information about the cfe-dev
mailing list