runtime: set invalidptr=1 by default, as documented

Also make invalidptr control the recently added GC pointer check,
as documented.

Change-Id: Iccfdf49480219d12be8b33b8f03d8312d8ceabed
Reviewed-on: https://go-review.googlesource.com/12857
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go
index b9b52a7..c439158 100644
--- a/src/runtime/mbitmap.go
+++ b/src/runtime/mbitmap.go
@@ -201,7 +201,7 @@
 		// The following ensures that we are rigorous about what data
 		// structures hold valid pointers.
 		// TODO(rsc): Check if this still happens.
-		if true {
+		if debug.invalidptr != 0 {
 			// Still happens sometimes. We don't know why.
 			printlock()
 			print("runtime:objectstart Span weird: p=", hex(p), " k=", hex(k))
diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go
index db26995..a50e5b6 100644
--- a/src/runtime/runtime1.go
+++ b/src/runtime/runtime1.go
@@ -299,8 +299,6 @@
 	value *int32
 }
 
-// TODO(rsc): Make GC respect debug.invalidptr.
-
 // Holds variables parsed from GODEBUG env var,
 // except for "memprofilerate" since there is an
 // existing int var for that value, which may
@@ -340,6 +338,9 @@
 }
 
 func parsedebugvars() {
+	// defaults
+	debug.invalidptr = 1
+
 	for p := gogetenv("GODEBUG"); p != ""; {
 		field := ""
 		i := index(p, ",")