gc: add GOEXPERIMENT=os.Error

This won't last long, I promise.

R=ken2
CC=golang-dev
https://golang.org/cl/5330066
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 7d6ac08..cff01a1 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -852,6 +852,7 @@
 EXTERN	int	compiling_runtime;
 
 EXTERN	int	rune32;
+EXTERN	int	oserror;
 
 /*
  *	y.tab.c
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index 86492a5..1dc00d7 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -38,6 +38,7 @@
 	int *val;
 } exper[] = {
 	{"rune32", &rune32},
+	{"os.Error", &oserror},
 };
 
 static void
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index dc1d314..1d5c1aa 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -2967,6 +2967,17 @@
 	p->prefix = pathtoprefix(path->s);
 	p->link = phash[h];
 	phash[h] = p;
+	
+	// If the compiler was built with
+	//	GOEXPERIMENT=os.Error
+	// define os.Error as an alias for error.
+	// Terrible and won't last long, but useful for transitions.
+	if(oserror && strcmp(path->s, "os") == 0) {
+		Sym *s;
+		s = pkglookup("Error", p);
+		s->def = typenod(errortype);
+	}
+
 	return p;
 }