Pelles C forum

Pelles C => Bug reports => Topic started by: Vortex on May 02, 2025, 01:32:26 PM

Title: "error: Invalid use of" reported by macro
Post by: Vortex on May 02, 2025, 01:32:26 PM
Hello,

The macro @loc reports the following error messages :

Test.asm(33): error: Invalid use of '@loc'.
Test.asm(33): error: Invalid use of '('.
Test.asm(34): error: Invalid use of '@loc'.
Test.asm(34): error: Invalid use of '('.
Test.asm(35): error: Invalid use of '@loc'.
Test.asm(35): error: Invalid use of '('.

Test code :

.386
.model flat,stdcall
option casemap:none

ExitProcess PROTO :DWORD

RECT STRUCT
  left    dd      ?
  top     dd      ?
  right   dd      ?
  bottom  dd      ?
RECT ENDS

VarSize=0

@loc MACRO _type

    VarSize=VarSize + SIZEOF(_type)

    EXITM <_type>

ENDM

.code

start:

    call    main
    invoke  ExitProcess,0

main PROC

LOCAL rc:@loc(RECT)
LOCAL x:@loc(DWORD)
LOCAL y:@loc(DWORD)
 
    mov  eax,VarSize
    ret

main ENDP

END start

Tested with Poasm Version 13.00.49
Title: Re: "error: Invalid use of" reported by macro
Post by: Vortex on May 03, 2025, 12:10:34 PM
I have a practical solution :

.386
.model flat,stdcall
option casemap:none

ExitProcess PROTO :DWORD

RECT STRUCT
  left    dd      ?
  top     dd      ?
  right   dd      ?
  bottom  dd      ?
RECT ENDS

VarSize=0

LOCV MACRO var,_type

    VarSize=VarSize + SIZEOF(_type)

    LOCAL var : _type

ENDM

.code

start:

    call    main
    invoke  ExitProcess,0

main PROC

LOCV rc,RECT
LOCV x,DWORD
LOCV y,DWORD
 
    mov  eax,VarSize
    ret

main ENDP

END start