view usr/src/tools/smatch/src/validation/backend/switch.c @ 19241:79022555a4a9

11972 resync smatch Reviewed by: Robert Mustacchi <rm@fingolfin.org> Approved by: Dan McDonald <danmcd@joyent.com>
author John Levon <john.levon@joyent.com>
date Mon, 11 Nov 2019 16:23:50 +0000
parents
children
line wrap: on
line source

int def(void);
int r0(void);
int r1(void);
int r2(void);
int r3(void);
int r4(void);
int r5(void);
int r6(void);
int r7(void);
int r8(void);
int r9(void);

int small(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	}

	return def();
}

int densefull(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	case 3: return r3();
	case 4: return r4();
	case 5: return r5();
	case 6: return r6();
	case 7: return r7();
	case 8: return r8();
	case 9: return r9();
	}

	return def();
}

int densepart(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	case 3: return r3();
	case 4: return r4();

	case 6: return r6();
	case 7: return r7();
	case 8: return r8();
	case 9: return r9();
	}

	return def();
}

int dense_dense_20(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	case 3: return r3();
	case 4: return r4();
	case 5: return r5();
	case 6: return r6();
	case 7: return r7();
	case 8: return r8();
	case 9: return r9();

	case 20: return r0();
	case 21: return r1();
	case 22: return r2();
	case 23: return r3();
	case 24: return r4();
	case 25: return r5();
	case 26: return r6();
	case 27: return r7();
	case 28: return r8();
	case 29: return r9();
	}

	return def();
}

int dense_dense_100(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	case 3: return r3();
	case 4: return r4();
	case 5: return r5();
	case 6: return r6();
	case 7: return r7();
	case 8: return r8();
	case 9: return r9();

	case 100: return r0();
	case 101: return r1();
	case 102: return r2();
	case 103: return r3();
	case 104: return r4();
	case 105: return r5();
	case 106: return r6();
	case 107: return r7();
	case 108: return r8();
	case 109: return r9();
	}

	return def();
}

int dense_dense_1000(int a)
{
	switch (a) {
	case 0: return r0();
	case 1: return r1();
	case 2: return r2();
	case 3: return r3();
	case 4: return r4();
	case 5: return r5();
	case 6: return r6();
	case 7: return r7();
	case 8: return r8();
	case 9: return r9();

	case 1000: return r0();
	case 1001: return r1();
	case 1002: return r2();
	case 1003: return r3();
	case 1004: return r4();
	case 1005: return r5();
	case 1006: return r6();
	case 1007: return r7();
	case 1008: return r8();
	case 1009: return r9();
	}

	return def();
}

int sparse(int a)
{
	switch (a) {
	case 0: return r0();
	case 3: return r1();
	case 12: return r2();
	case 31: return r3();
	case 54: return r4();
	case 75: return r5();
	case 96: return r6();
	case 107: return r7();
	case 189: return r8();
	case 999: return r9();
	}

	return def();
}

int range_simple(int a)
{
	switch (a) {
	case 1 ... 9: return r0();
	}

	return def();
}

int range_complex(int a)
{
	switch (a) {
	case -1: return r0();
	case 1 ... 9: return r0();
	case 10 ... 19: return r1();
	case 200 ... 202: return r2();
	case 300 ... 303: return r3();
	}

	return def();
}

void switch_call(int a)
{
	int r;

	switch (a) {
	case 0: r0(); break;
	case 1: r1(); break;
	case 2: r2(); break;
	case 3: r3(); break;
	case 4: r4(); break;
	case 5: r5(); break;
	case 6: r6(); break;
	case 7: r7(); break;
	case 8: r8(); break;
	case 9: r9(); break;
	}
}

int switch_retcall(int a)
{
	int r = 0;

	switch (a) {
	case 0: r = r0(); break;
	case 1: r = r1(); break;
	case 2: r = r2(); break;
	case 3: r = r3(); break;
	case 4: r = r4(); break;
	case 5: r = r5(); break;
	case 6: r = r6(); break;
	case 7: r = r7(); break;
	case 8: r = r8(); break;
	case 9: r = r9(); break;
	}

	return r;
}

int switch_cmov(int a)
{
	int r;

	switch (a) {
	case 0: r = 3; break;
	case 1: r = 1; break;
	case 2: r = 7; break;
	case 3: r = 2; break;
	case 4: r = 9; break;

	case 6: r = 5; break;
	case 7: r = 8; break;
	case 8: r = 6; break;
	case 9: r = 4; break;
	}

	return r;
}

/*
 * check-name: llvm-switch
 * check-command: sparsec -Wno-decl -c $file -o tmp.o
 */