This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

warning C180: not every path returns a value

i worked thru the manuals,
the CARM User's Guide Inline Assembly example:

int AddUp (
  int n,
  int *pTab)
{
if (n == 0) return(0);

__asm
  {
  mov   r0, #0       ; clear result
  ldav  r2, r0, pTab  ; R2=start of table
  ldav  r3, r0, n     ; R3=table length
  lsl   r3, r3, #2
lM:
  sub   r3, #4
  ldr   r1, [r2,r3]
  add   r0, r1
  cmp   r3, #0        ; end of table ?
  bgt   lM            ; loop if not eot
  }
// Return Value in R0
}

First i had to replace:

  lsl   r3, r3, #2

by mov r3,r3,lsl #2 Second there's a warning C180 not every path returns a value. The question is how to tell CARM that return value is in R0

Parents
  • Disable W180 around these kind of functions:

    #pragma warning disable=180
    int AddUp (int n, int *pTab)  {
      if (n == 0) return(0);
    
    __asm
      {
      mov   r0, #0       ; clear result
      ldav  r2, r0, pTab  ; R2=start of table
      ldav  r3, r0, n     ; R3=table length
      lsl   r3, r3, #2
    lM:
      sub   r3, #4
      ldr   r1, [r2,r3]
      add   r0, r1
      cmp   r3, #0        ; end of table ?
      bgt   lM            ; loop if not eot
      }
    // Return Value in R0
    }
    
    //--Enable W180 again !
    #pragma warning enable=180
    int vTest (void)  {
      int   z;
    
      z = 1;
    }
    

Reply
  • Disable W180 around these kind of functions:

    #pragma warning disable=180
    int AddUp (int n, int *pTab)  {
      if (n == 0) return(0);
    
    __asm
      {
      mov   r0, #0       ; clear result
      ldav  r2, r0, pTab  ; R2=start of table
      ldav  r3, r0, n     ; R3=table length
      lsl   r3, r3, #2
    lM:
      sub   r3, #4
      ldr   r1, [r2,r3]
      add   r0, r1
      cmp   r3, #0        ; end of table ?
      bgt   lM            ; loop if not eot
      }
    // Return Value in R0
    }
    
    //--Enable W180 again !
    #pragma warning enable=180
    int vTest (void)  {
      int   z;
    
      z = 1;
    }
    

Children