[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#14572: Goto Label Bug
From: |
Shane Celis |
Subject: |
bug#14572: Goto Label Bug |
Date: |
Mon, 10 Jun 2013 12:06:01 -0400 |
Will do. Thanks for your time, and sorry about my mistake.
-Shane
On Jun 7, 2013, at 5:16 PM, Mark H Weaver <address@hidden> wrote:
> Shane Celis <address@hidden> 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