Alexandre Julliard a écrit :
But here you really have two non-inline definitions, one in C and one in assembly. What happens if you remove the C version?
sorry, I redid my week end tests and went too fast the real "bad" case is:
/* case with 2 C declarations */ extern inline int foo(int a); extern inline int foo(int a) {return a + 1;} int tfoo(int b) { return foo(b) * b; } int foo(int a) {return a+1;}
/* case with C & ASM declarations */ extern inline int ffo(int a); extern inline int ffo(int a) {return a + 1;} int tffo(int f) { return ffo(f) * f; } __asm__( ".text\n\t" ".align 4\n\t" ".globl ffo\n\t" ".type ffo,@function\n" "ffo:\n\tret\n" "\n\t.previous" ); [eric@localhost wine-git]$ /opt2/intel/cc/9.1.047/bin/icc -c -O2 ~/icc2.c /home/eric/icc2.c(7): warning #290: function "foo" has already been defined int foo(int a) {return a+1;} ^
IPO: WARNING: File scope asm disables -ipo /home/eric/tmp/iccTSWeMaas_.s: Assembler messages: /home/eric/tmp/iccTSWeMaas_.s:86: Error: symbol `ffo' is already defined
we don't get the error if the inline function is not inlined changing the order of asm def & inline usage doesn't change the output either
A+