diff --git a/lang/cem/cemcom.ansi/decspecs.c b/lang/cem/cemcom.ansi/decspecs.c index 83f081b95..f7169dda2 100644 --- a/lang/cem/cemcom.ansi/decspecs.c +++ b/lang/cem/cemcom.ansi/decspecs.c @@ -79,6 +79,7 @@ do_decspecs(ds) SIZE_ERROR: error("%s with illegal type",symbol2str(ds->ds_size)); } + ds->ds_notypegiven = 0; } if (ds->ds_unsigned) { register int ds_isunsigned = (ds->ds_unsigned == UNSIGNED); @@ -101,6 +102,7 @@ do_decspecs(ds) error("%s with illegal type" , symbol2str(ds->ds_unsigned)); } + ds->ds_notypegiven = 0; } ds->ds_type = qualifier_type(tp, ds->ds_typequal); } diff --git a/lang/cem/cemcom.ansi/program.g b/lang/cem/cemcom.ansi/program.g index 38333d521..0fc7481ee 100644 --- a/lang/cem/cemcom.ansi/program.g +++ b/lang/cem/cemcom.ansi/program.g @@ -155,14 +155,16 @@ external_definition [ function(&Ds, &Dc) | - { if (! Ds.ds_sc_given && Ds.ds_notypegiven) { + { if (! Ds.ds_sc_given && ! Ds.ds_typequal && + Ds.ds_notypegiven) { strict("declaration specifiers missing"); } } non_function(&Ds, &Dc) ] | - { if (! Ds.ds_sc_given && Ds.ds_notypegiven) { + { if (! Ds.ds_sc_given && ! Ds.ds_typequal && + Ds.ds_notypegiven) { strict("declaration missing"); } }