Skip to content

[dragonegg] cannot tie inline asm operands of different widths #3745

@edwintorok

Description

@edwintorok
Bugzilla Link 3373
Resolution FIXED
Resolved on Feb 27, 2011 10:53
Version trunk
OS Linux
CC @sunfishcode

Extended Description

Using yesterday's llvm-gcc (SVN r62706), I fail to build the following:

int foo(unsigned long *addr)
{
int __ret_pu;
unsigned long __pu_val;
return ({asm volatile("call _put_user" "8" : "=a" (__ret_pu) :"0"
(__pu_val), "c"(addr) : "ebx"); __ret_pu;});
}

$ llvm-gcc x.i -O0 -emit-llvm -o x.bc
x.i: In function ‘foo’:
x.i:5: error: unsupported inline asm: input constraint with a matching output constraint of incompatible type!

I thought the frontend was supposed to cast the argument to the proper type to avoid this error message.

LLVM 2.4 accepted this code, and appears to be the kernel people's favourite way to use inline asm (i.e. return type is int, but input is something else).

Can this be fixed for 2.5 please?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions