LLVM ERROR: expected relocatable expression

This example generates the following error:
.Ltmp3:
.Ltmp5:
.Ltmp13:
  .word (.Ltmp5-.Ltmp3)-.Ltmp13

./llvm-mc ex.s -filetype=obj
LLVM ERROR: expected relocatable expression when using:

Umm, isn't this equivalent to the following? What do you expect LLVM to do
with it?

.Ltmp13:
    .word -.Ltmp13

-Eli

    This example generates the following error:
    .Ltmp3:
    .Ltmp5:
    .Ltmp13:
             .word (.Ltmp5-.Ltmp3)-.Ltmp13

    ./llvm-mc ex.s -filetype=obj
    LLVM ERROR: expected relocatable expression when using:

Umm, isn't this equivalent to the following? What do you expect LLVM to
do with it?

.Ltmp13:
     .word -.Ltmp13

I removed the target specific assembly to produce a simple generic example. It was derived from eh_frame code the compiler was emitting.

(.Ltmp5-.Ltmp3)+.Ltmp13 does not generate the error.

Then you must have reduced it too much; your example is simply invalid
(although the compiler's error message isn't great).

-Eli

Hi Eli,

Slightly changed the example :-

.section somedata
.Ltmpa:
.word 100
.Ltmpb:
.word 60
.Ltmpc:
.word 40
.Ltmpd:
.word (.Ltmpa-.Ltmpb)-.Ltmpc

The GNU assembler properly handles the above.

$as -c x.s -o x.o
$readelf -x 4 x.o

Hex dump of section ‘somedata’:
NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x00000000 64003c00 28000000 d.<.(…
^^^^ (Calculated properly too!)
With clang/llvm-mc

$ llvm-mc -filetype=obj x.s -o x.o
LLVM ERROR: expected relocatable expression

Looks like llvm-mc is more restrictive ?

Thanks

Shankar Easwaran

Emitting the relocation in question requires *negating* the address of a
variable. I could be wrong, but I'm pretty sure there isn't any way to
represent that in ELF.

-Eli

Sorry for not setting context here. These variables are all local variables, is there a need to create a relocation ? Thanks Shankar Easwaran