A literal in the literal pool should never be modified and the assembler is
enforcing that rule where possible. The problem is that multiple =C'WOMBAT' in
your program would only generate a single entry in the literal pool. Can
each occurrence handle this modification of the value? The assembler is just
stopping a bad coding practice and potential problems where possible.

Jon.



________________________________
From: Paul Gilmartin <paulgboul...@aim.com>
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Sent: Sat, May 26, 2012 9:04:28 PM
Subject: Re: MVC with 2nd operand length

On May 26, 2012, at 18:28, John Ehrman wrote:

>> So, HLASM is apparently very good at inferring the length of
>> the first argument to CLC at Pass 2, when it's needed, even in
>> the challenging case of a previously unreferenced literal.
>
> By pass 2, the literal is well established, so it's not a challenge by
> then.
>
Now, I'm truly mystified.  The very simplest construct works for CLC:


ssembler Option Summary                   (PTF UK71661)   Page    1
                                       HLASM R6.0  2012/05/26 21.49
  Loc  Object Code    Addr1 Addr2  Stmt   Source Statement
                                      1          MACRO
                                      2 &L       CLC2  &A1,&A2
                                      3 &L       CLC   &A1.(L'&A2),&A2
                                      4          MEND
                                      5 *
                                      6          MACRO
                                      7 &L       MVC2  &A1,&A2
                                      8 &L       MVC   &A1.(L'&A2),&A2
                                      9          MEND
                                     10 *
                                     11          PRINT GEN
000000                00000 00019    12 FUNCS    CSECT
                 R:C  00000          13          USING FUNCS,12
                                     14 MACCLC   CLC2  =C'WOMBAT',=C'FOO'
000000 D502 C010 C016 00010 00016    15+MACCLC   CLC   =C'WOMBAT'(L'=C'FOO'),=C'
                                     16 * ---------------
                                     17 MACMVC   MVC2  =C'WOMBAT',=C'FOO'
000006 0000 0000 0000 00000 00000    18+MACMVC   MVC   =C'WOMBAT'(L'=C'FOO'),=C'
** ASMA030E Invalid literal usage - =C'WOMBAT'(L'=C'FOO')
** ASMA435I Record 8 in SPPG.FUNCS3.JOB03131.D0000101.? on volume:
                                     19          END
000010 E6D6D4C2C1E3                  20                =C'WOMBAT'
000016 C6D6D6                        21                =C'FOO'

... but fails for MVC!  Why should there be any difference?  Isn't
an SS instruction an SS instruction, or are some SS instructions
more equal than others?

-- gil

Reply via email to