cgo: do not reset tag generator between files

Clean up an error message and error exit too.
Insert blank line after "DO NOT EDIT" comment
to keep it from being a doc comment.

Fixes #1213.
Fixes #1222.

R=r
CC=golang-dev
https://golang.org/cl/3608042
diff --git a/misc/cgo/stdio/Makefile b/misc/cgo/stdio/Makefile
index ba49d94..fc925e6 100644
--- a/misc/cgo/stdio/Makefile
+++ b/misc/cgo/stdio/Makefile
@@ -9,6 +9,7 @@
 	align.go\
 	file.go\
 	test.go\
+	test1.go\
 
 CLEANFILES+=hello fib chain run.out
 
diff --git a/misc/cgo/stdio/test.go b/misc/cgo/stdio/test.go
index 639d77b..8f21603 100644
--- a/misc/cgo/stdio/test.go
+++ b/misc/cgo/stdio/test.go
@@ -15,7 +15,7 @@
 #define SHIFT(x, y)  ((x)<<(y))
 #define KILO SHIFT(1, 10)
 
-enum {
+enum E {
 	Enum1 = 1,
 	Enum2 = 2,
 };
@@ -26,6 +26,28 @@
 	x[0] = 0;
 }
 
+struct S {
+	int x;
+};
+
+extern enum E myConstFunc(struct S* const ctx, int const id, struct S **const filter);
+
+enum E myConstFunc(struct S *const ctx, int const id, struct S **const filter) { return 0; }
+
+// issue 1222
+typedef union {
+	long align;
+} xxpthread_mutex_t;
+
+struct ibv_async_event {
+	union {
+		int x;
+	} element;
+};
+
+struct ibv_context {
+	xxpthread_mutex_t mutex;
+};
 */
 import "C"
 import (
@@ -67,6 +89,10 @@
 	return int(n)
 }
 
+func TestConst() {
+	C.myConstFunc(nil, 0, nil)
+}
+
 func TestEnum() {
 	if C.Enum1 != 1 || C.Enum2 != 2 {
 		println("bad enum", C.Enum1, C.Enum2)
@@ -105,9 +131,14 @@
 	char  C.char
 )
 
+type Context struct {
+	ctx *C.struct_ibv_context
+}
+
 func Test() {
 	TestAlign()
 	TestAtol()
 	TestEnum()
 	TestErrno()
+	TestConst()
 }
diff --git a/misc/cgo/stdio/test1.go b/misc/cgo/stdio/test1.go
new file mode 100644
index 0000000..dce2ef8
--- /dev/null
+++ b/misc/cgo/stdio/test1.go
@@ -0,0 +1,29 @@
+// Copyright 2010 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file contains test cases for cgo.
+
+package stdio
+
+/*
+// issue 1222
+typedef union {
+	long align;
+} xxpthread_mutex_t;
+
+struct ibv_async_event {
+	union {
+		int x;
+	} element;
+};
+
+struct ibv_context {
+	xxpthread_mutex_t mutex;
+};
+*/
+import "C"
+
+type AsyncEvent struct {
+	event C.struct_ibv_async_event
+}