~mcf/cproc

ebdae640721cd7be00db01b6e5d0793b46926f3b — Michael Forney 26 days ago 0c2e1bf
decl: Allow _Alignas(0)

C11 6.7.5p6 says "An alignment specification of zero has no effect".
M decl.c => decl.c +3 -2
@@ 379,9 379,10 @@ declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align)
				*align = other->align;
			} else {
				i = intconstexpr(s, false);
				if (!i || i & (i - 1) || i > 16)
				if (i & (i - 1) || i > 16)
					error(&tok.loc, "invalid alignment: %d", i);
				*align = (int)i;
				if (i)
					*align = (int)i;
			}
			expect(TRPAREN, "to close '_Alignas' specifier");
			break;

A test/alignas-0.c => test/alignas-0.c +3 -0
@@ 0,0 1,3 @@
_Alignas(0) int x;
_Alignas(8) _Alignas(0) int y;
_Alignas(0) _Alignas(16) int z;

A test/alignas-0.qbe => test/alignas-0.qbe +3 -0
@@ 0,0 1,3 @@
export data $x = align 4 { z 4 }
export data $y = align 8 { z 4 }
export data $z = align 16 { z 4 }

A test/alignas-type.c => test/alignas-type.c +1 -0
@@ 0,0 1,1 @@
_Alignas(int) char x[4];

A test/alignas-type.qbe => test/alignas-type.qbe +1 -0
@@ 0,0 1,1 @@
export data $x = align 4 { z 4 }

M test/alignas.c => test/alignas.c +1 -1
@@ 1,1 1,1 @@
_Alignas(int) char x[4];
_Alignas(8) int x;

M test/alignas.qbe => test/alignas.qbe +1 -1
@@ 1,1 1,1 @@
export data $x = align 4 { z 4 }
export data $x = align 8 { z 4 }