diff test/scope.c @ 363:f3f2b7906d50

label extension
author kono
date Tue, 06 Jul 2004 17:04:31 +0900
parents
children 0c256ea2a97e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/scope.c	Tue Jul 06 17:04:31 2004 +0900
@@ -0,0 +1,50 @@
+/* 
+
+    gcc -g -std=gnu99 test/scope.c
+
+ */
+
+#include <stdio.h>
+
+void
+f(int *i,void *label)
+{
+    static int k = 3;
+    {
+	static int k = 3;
+	*i =  k++;
+    }
+    k--;
+    printf("f %d\n",k);
+} 
+
+int
+main()
+{
+    int i,k;
+    void *exit = &&exit0;
+    i = 3;k=10;
+    for(int k=0;k<10;k++) { 
+	int i;
+	i = 4;
+	if (({
+	    __label__ exit0; 
+	    int i; 
+		f(&i,&&exit0); 
+		if (i==5) 
+		    goto exit0;
+		printf("2nd inner %d %d %0x\n",i,k,&&exit1==exit);
+	    exit0:
+	    i;
+	    })!=7) {
+	    goto exit1;
+	} else
+	    goto *exit;
+exit1:
+	printf("inner %d %d %0x\n",i,k,&&exit1==exit);
+    }
+    k++;
+exit0:
+    printf("outer %d %d %0x\n",i,k,&&exit0==exit);
+    return 0;
+}