shithub: scc

Download patch

ref: 6f9ef1f63042cefbb131583f8ade090962d48956
parent: 916d231a2f99346dd4d1e0f0c768f6ffadccb8cd
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Wed Jan 20 11:00:56 EST 2016

Add tests for initializers

--- /dev/null
+++ b/cc1/tests/test045.c
@@ -1,0 +1,33 @@
+/*
+name: TEST045
+description: Basic test of initializers
+error:
+
+output:
+G1	I	x
+(
+	#I5
+)
+F2	I	E
+G3	F2	main
+{
+\
+	j	L4	G1	#I5	=I
+	r	#I1
+L4
+	r	#I0
+}
+
+*/
+
+
+
+int x = 5;
+
+int
+main()
+{
+	if(x != 5) 
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test046.c
@@ -1,0 +1,44 @@
+/*
+name: TEST046
+description: Basic test for initializators
+error:
+
+output:
+V1	I	#3
+G2	V1	x
+(
+	#I1
+	#I2
+	#I3
+)
+F3	I	E
+G4	F3	main
+{
+\
+	j	L5	G2	#I1	=I
+	r	#I1
+L5
+	j	L7	G2	'P	#P2	+P	@I	#I2	=I
+	r	#I2
+L7
+	j	L8	G2	'P	#P4	+P	@I	#I3	=I
+	r	#I3
+L8
+	r	#I0
+}
+
+*/
+
+int x[3] = {1, 2, 3};
+
+int
+main()
+{
+	if(x[0] != 1) 
+		return 1;
+	if(x[1] != 2) 
+		return 2;
+	if(x[2] != 3) 
+		return 3;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test047.c
@@ -1,0 +1,55 @@
+/*
+name: TEST047
+description: Basic test for initializer
+error:
+
+output:
+S2	S
+M3	I	a
+M4	I	b
+M5	I	c
+G6	S2	x
+(
+	#I1
+	#I2
+	#I3
+)
+F7	I	E
+G8	F7	main
+{
+\
+	j	L9	G6	M3	.I	#I1	=I
+	r	#I1
+L9
+	j	L10	G6	M4	.I	#I2	=I
+	r	#I2
+L10
+	j	L11	G6	M5	.I	#I3	=I
+	r	#I3
+L11
+	r	#I0
+}
+
+*/
+
+
+
+struct S {
+	int a;
+	int b;
+	int c;
+};
+
+struct S x = {1, 2, 3};
+
+int
+main()
+{
+	if(x.a != 1) 
+		return 1;
+	if(x.b != 2) 
+		return 2;
+	if(x.c != 3) 
+		return 3;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test048.c
@@ -1,0 +1,46 @@
+/*
+name: TEST048
+description: Basic test for initializer
+error:
+
+output:
+S2	S
+M3	I	a
+M4	I	b
+V5	S2	#1
+G6	V5	x
+(
+	#I1
+	#I2
+)
+F7	I	E
+G8	F7	main
+{
+\
+	j	L9	G6	M3	.I	#I1	=I
+	r	#I1
+L9
+	j	L11	G6	M4	.I	#I2	=I
+	r	#I2
+L11
+	r	#I0
+}
+
+*/
+
+struct S {
+	int a;
+	int b;
+};
+
+struct S x[1] = {{1, 2}};
+
+int
+main()
+{
+	if(x[0].a != 1) 
+		return 1;
+	if(x[0].b != 2) 
+		return 2;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test049.c
@@ -1,0 +1,36 @@
+/*
+name: TEST049
+description: Basic test for initializer
+error:
+
+output:
+G1	I	x
+(
+	#I5
+)
+G3	P	p
+(
+	G1	'P
+)
+F4	I	E
+G5	F4	main
+{
+\
+	j	L6	G3	@I	#I5	=I
+	r	#I1
+L6
+	r	#I0
+}
+
+*/
+
+int x = 5;
+int *p = &x;
+
+int
+main()
+{
+	if(*p != 5)
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test050.c
@@ -1,0 +1,21 @@
+/*
+name: TEST050
+description: Basic test for initializer
+error:
+TODO
+output:
+
+*/
+
+struct S { int a; int b; };
+struct S s = (struct S){1, 2};
+
+int
+main()
+{
+	if(s.a != 1)
+		return 1;
+	if(s.b != 2)
+		return 2;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test051.c
@@ -1,0 +1,44 @@
+/*
+name: TEST051
+description: Basic test for initializer
+error:
+
+output:
+V1	I	#3
+G2	V1	arr
+(
+	#I0
+	#I1
+	#I2
+)
+F3	I	E
+G4	F3	main
+{
+\
+	j	L5	G2	#I0	=I
+	r	#I1
+L5
+	j	L7	G2	'P	#P2	+P	@I	#I1	=I
+	r	#I2
+L7
+	j	L8	G2	'P	#P4	+P	@I	#I2	=I
+	r	#I3
+L8
+	r	#I0
+}
+
+*/
+
+int arr[3] = {[2] = 2, [0] = 0, [1] = 1};
+
+int
+main()
+{
+	if(arr[0] != 0)
+		return 1;
+	if(arr[1] != 1)
+		return 2;
+	if(arr[2] != 2)
+		return 3;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test052.c
@@ -1,0 +1,54 @@
+/*
+name: TEST052
+description: Basic test for initializer
+error:
+
+output:
+S2	S
+M3	I	a
+M4	I	b
+V5	S2	#2
+G6	V5	arr
+(
+	#I1
+	#I2
+	#I3
+	#I4
+)
+F7	I	E
+G8	F7	main
+{
+\
+	j	L9	G6	M3	.I	#I1	=I
+	r	#I1
+L9
+	j	L11	G6	M4	.I	#I2	=I
+	r	#I2
+L11
+	j	L12	G6	M3	.I	#I3	=I
+	r	#I3
+L12
+	j	L13	G6	M4	.I	#I4	=I
+	r	#I4
+L13
+	r	#I0
+}
+
+*/
+
+struct S {int a; int b;};
+struct S arr[2] = {[1] = {3, 4}, [0] = {1, 2}};
+
+int
+main()
+{
+	if(arr[0].a != 1)
+		return 1;
+	if(arr[0].b != 2)
+		return 2;
+	if(arr[1].a != 3)
+		return 3;
+	if(arr[1].b != 4)
+		return 4;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test053.c
@@ -1,0 +1,41 @@
+/*
+name: TEST053
+description: Basic test for initializer
+error:
+
+output:
+S2	S
+M3	I	a
+M4	I	b
+G5	S2	s
+(
+	#I1
+	#I2
+)
+F6	I	E
+G7	F6	main
+{
+\
+	j	L8	G5	M3	.I	#I1	=I
+	r	#I1
+L8
+	j	L9	G5	M4	.I	#I2	=I
+	r	#I2
+L9
+	r	#I0
+}
+
+*/
+
+struct S {int a; int b;};
+struct S s = { .b = 2, .a = 1};
+
+int
+main()
+{
+	if(s.a != 1)
+		return 1;
+	if(s.b != 2)
+		return 2;
+	return 0;
+}
--- /dev/null
+++ b/cc1/tests/test054.c
@@ -1,0 +1,22 @@
+/*
+name: TEST054
+description: Basic test for initializer
+error:
+TODO
+output:
+
+*/
+
+struct S { int a; int b; };
+struct S *s = &(struct S) { 1, 2 };
+
+int
+main()
+{
+	if(s->a != 1)
+		return 1;
+	if(s->b != 2)
+		return 2;
+	return 0;
+}
+
--- /dev/null
+++ b/cc1/tests/test055.c
@@ -1,0 +1,43 @@
+/*
+name: TEST055
+description: Basic test for initializer
+error:
+TODO
+output:
+
+*/
+
+struct S1 { 
+	int a;
+	int b;
+};
+struct S2 {
+	struct S1 s1;
+	struct S1 *ps1;
+	int arr[2];
+};
+struct S1 gs1 = (struct S1) {.a = 1, 2};
+struct S2 *s = &(struct S2) {
+	{.b = 2, .a = 1},
+	&gs1,
+	{[0] = 1,  1+1}
+};
+
+int
+main()
+{
+	if(s->s1.a != 1)
+		return 1;
+	if(s->s1.b != 2)
+		return 2;
+	if(s->ps1->a != 1)
+		return 3;
+	if(s->ps1->b != 2)
+		return 4;
+	if(s->arr[0] != 1)
+		return 5;
+	if(s->arr[1] != 2)
+		return 6;
+	return 0;
+}
+
--- /dev/null
+++ b/cc1/tests/test056.c
@@ -1,0 +1,53 @@
+/*
+name: TEST056
+desciption: Test of overlaying designators
+error:
+
+output:
+V6	K	#3
+S2	S
+M3	I	a
+M4	I	b
+M5	I	c
+M7	V6	d
+M8	I	e
+G9	S2	s
+(
+	#I1
+	#I2
+	#I0
+	#K4
+	#K6
+	#K0
+	#I0
+)
+F10	I
+G11	F10	main
+{
+\
+V12	K	#0
+A13	V12	m
+	A13	:V12
+	r	G9	M7	.V6	'P	#P2	+P	@K	gI	gN	#N0	!I
+}
+
+*/
+
+struct S {
+	int a, b, c;
+	char d[3];
+	int e;
+} s = {
+	.a = 1,
+	.b = 2,
+	.d = {[0] = 3, [2] = 5},
+	.d = {[0] = 4, [1] = 6}
+};
+
+int
+main(void)
+{
+	char m[] = {};
+
+	return sizeof(m) == s.d[2];
+}
--- /dev/null
+++ b/cc1/tests/test057.c
@@ -1,0 +1,51 @@
+
+/*
+name: TEST057
+description: test of initialization of incomplete arrays
+error:
+
+output:
+V1	I	#3
+V2	V1	#2
+G3	V2	arr1
+(
+	#I2
+	#I7
+	#I5
+	#I5
+	#I1
+	#I2
+)
+G4	V2	arr2
+(
+	#I2
+	#I7
+	#I5
+	#I5
+	#I1
+	#I2
+)
+F5	I
+G6	F5	main
+{
+\
+	r	G3	'P	#P6	+P	#P4	+P	@I	G4	'P	#P6	+P	#P6	+P	@I	!I
+}
+
+*/
+
+int arr1[][3] = {
+                 { 2, 7, 5, },
+                 { 5, 1, 2, },
+};
+
+int arr2[2][3] = {
+	2, 7, 5,
+	5, 1, 2
+};
+
+int
+main(void)
+{
+	return !(arr1[1][2] == arr2[1][3]);
+}
--- /dev/null
+++ b/cc1/tests/test058.c
@@ -1,0 +1,68 @@
+/*
+name: TEST058
+description: Test of initialization mixing dsignators and sequence
+error:
+
+output:
+V1	I	#5
+V2	V1	#3
+V3	V2	#2
+G4	V3	arr
+(
+	#I0
+	#I0
+	#I3
+	#I5
+	#I0
+	#I1
+	#I0
+	#I0
+	#I6
+	#I7
+	#I0
+	#I0
+	#I0
+	#I0
+	#I0
+	#I1
+	#I2
+	#I0
+	#I0
+	#I0
+	#I0
+	#I0
+	#I0
+	#I0
+	#I7
+	#I0
+	#I0
+	#I0
+	#I0
+	#I0
+)
+F5	I
+G6	F5	main
+{
+\
+	r	G4	'P	#PA	+P	#P8	+P	@I	G4	'P	#P1E	+P	#PA	+P	#P8	+P	@I	!I
+}
+
+*/
+
+int arr[][3][5] = {
+	{
+		{ 0, 0, 3, 5 },
+		{ 1, [3] = 6, 7 },
+	},
+	{
+		{ 1, 2 },
+		{ [4] = 7, },
+	},
+};
+
+
+int
+main(void)
+{
+	return !(arr[0][1][4] == arr[1][1][4]);
+}
--- /dev/null
+++ b/cc1/tests/test059.c
@@ -1,0 +1,35 @@
+/*
+name: TEST059
+description: Test of initalizers for strings
+error:
+test059.c:33: warning: initializer-string for array of chars is too long
+test059.c:35: error: array of inappropriate type initialized from string constant
+
+output:
+V1	K	#4
+G2	V1	s0
+(
+	"666F6F00
+)
+V4	K	#7
+G5	V4	s1
+(
+	"666F6F00000000
+)
+V6	K	#2
+G7	V6	s2
+(
+	"666F
+)
+G9	P	p
+(
+	"666F6F00	'P
+)
+
+*/
+
+char s0[] = "foo";
+char s1[7] = "foo";
+char s2[2] = "foo";
+char *p = "foo";
+int m[] = "foo";