Emitted code for zero-arg functions


Is this expected behaviour that clang emits a bitcast from
a function with no arguments to a vararg function in the
'call' instruction considering the following C program:

     void foo();
     void foo() { }
     int main(void) { foo(); return 0; }

Clang emits the following 'call' instruction:

     call void (...)* bitcast (void ()* @foo to void (...)*)()

In contrast llvm-gcc emits simply:

     call void @foo() nounwind

If we _explicitly_ declare that 'foo' is a function with no arguments
as follows, no bitcast is emitted with clang nor llvm-gcc.

     void foo(void);

The behaviour affects, for example, the usage of

The C code was compiled with -O0 for both compilers. My clang is
compiled from revision 72717. My llvm-gcc is an old build, but
that's not the point here.

gcc has a bunch of folding optimizations at -O0 which clang doesn't
match. That said, this particular case is a bug because it messes up
the always_inline attribute implementation; I just filed
http://llvm.org/bugs/show_bug.cgi?id=4372 .