Will do. Thanks for your time, and sorry about my mistake. -Shane
On Jun 7, 2013, at 5:16 PM, Mark H Weaver <[email protected]> wrote: > Shane Celis <[email protected]> writes: > >> If a goto label is followed by an SCM variable declaration, a >> compilation error will result. I've written up this piece of code >> that demonstrates the behavior and how to work around it, available >> here: >> >> https://gist.github.com/shanecelis/5728982 > > In the future, please send the relevant information as attachments, so > that it's recorded in our bug tracking system. For posterity, here it > is: > > --8<---------------cut here---------------start------------->8--- > /* > This file demonstrates a bug with C goto labels and Guile. > > $ gcc `pkg-config guile-2.0 --cflags --libs` goto_label_bug.c -o > goto_label_bug > goto_label_bug.c: In function 'main': > goto_label_bug.c:10: error: expected expression before 'SCM' > > $ gcc `pkg-config guile-2.0 --cflags --libs` goto_label_bug.c -o > goto_label_bug -D INSERT_NOOP > $ # No problem. > > Shane Celis > > */ > > #include <libguile.h> > > int main(int argc, char *argv[]) { > scm_init_guile(); > goto end; > > end: > #ifdef INSERT_NOOP > ; /* No error with dummy statement. */ > #endif > SCM dummy = SCM_BOOL_T; /* Causes error. */ > > return 0; > } > --8<---------------cut here---------------end--------------->8--- > > This is unrelated to Guile. The same problem happens with GCC 4.7 if > you make the following substitutions: > > libguile.h --> stdio.h > scm_init_guile() --> printf ("Test\n"); > SCM --> int > SCM_BOOL_T --> 0 > > However, in that case the error message is more helpful: > > error: a label can only be part of a statement and a declaration is not a > statement > > Indeed, C99 section 6.8.1 specifies that labels may only precede > statements. > > Regards, > Mark
