/*
%begin
  %constinteger Ab = 2, Bc = 4, Cd = 2, De = 8
  %constinteger low = 4
  %constinteger high = De-Cd
  %integerarray fred(low:high*Cd)
  %switch labs(1:De+Bc)
  ->labs(Cd*Bc+Ab)

  labs(Bc+Cd):  %stop

%endofprogram
*/

#include <stdio.h>
extern void exit(int i);

int main(int argc, char **argv) {

  enum consts_1 { AB = 2, BC = 4, CD = 2, DE = 8, };
  enum LOW { LOW = 4 };
  enum HIGH { HIGH = DE-CD };

  enum FRED_Bounds { FRED_Low = LOW, FRED_High = HIGH * CD };
  int FRED[FRED_High-FRED_Low+1];

  enum LABS_Bounds { LABS_Low = 1, LABS_High = DE + BC };  int LABS_Sw;
  void *LABS[LABS_High-LABS_Low+1 /* 1:12 */] = {
    &&LABS_1, &&LABS_2, &&LABS_3, &&LABS_4, &&LABS_5, &&LABS_6, &&LABS_7,
    &&LABS_8, &&LABS_9, &&LABS_10, &&LABS_11, &&LABS_12,
  };
  
  LABS_Sw = BC+CD; if (LABS_Sw < LABS_Low || LABS_Sw > LABS_High) goto LABS_default;
  goto *LABS[LABS_Sw];

LABS_10: /* CD*BC+AB */
  exit(0); // %stop

  exit(0);
  /* End of program */
  
LABS_4:  LABS_5:  LABS_6:  LABS_7:  LABS_8:  LABS_9:  LABS_11:  LABS_12:
LABS_default:
  fprintf(stderr, "%%switch label LABS(%d) not set.\n", LABS_Sw);
  exit(1);  
}
