| // run | 
 |  | 
 | // Copyright 2017 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. | 
 |  | 
 | package main | 
 |  | 
 | import ( | 
 | 	"fmt" | 
 | ) | 
 |  | 
 | type PI struct { | 
 | 	Enabled bool | 
 | } | 
 |  | 
 | type SI struct { | 
 | 	M map[string]*PI | 
 | } | 
 |  | 
 | //go:noinline | 
 | func (s *SI) test(name string) (*int, error) { | 
 | 	n := new(int) | 
 | 	*n = 99 | 
 | 	if err := addUpdate(n, s.M[name].Enabled, "enabled"); err != nil { // this was miscompiled | 
 | 		return nil, fmt.Errorf(" error adding update for enable flag %t : %s", | 
 | 			s.M[name].Enabled, err) | 
 | 	} | 
 | 	return n, nil | 
 | } | 
 |  | 
 | //go:noinline | 
 | func addUpdate(n *int, in interface{}, s ...string) error { | 
 | 	if *n != 99 { | 
 | 		println("FAIL, *n should be 99, not", *n) | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func main1() { | 
 | 	s := &SI{make(map[string]*PI)} | 
 | 	s.M["dog"] = &PI{} | 
 | 	s.test("dog") | 
 | } | 
 |  | 
 | //go:noinline | 
 | func g(b *byte, i interface{}) error { | 
 | 	if *b != 17 { | 
 | 		println("FAIL, *b should be 17, not", *b) | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f(x *byte, m map[string]*bool) { | 
 | 	if err := g(x, *m["hello"]); err != nil { // this was miscompiled | 
 | 		return | 
 | 	} | 
 | } | 
 |  | 
 | func main2() { | 
 | 	m := make(map[string]*bool) | 
 | 	x := false | 
 | 	m["hello"] = &x | 
 | 	b := byte(17) | 
 | 	f(&b, m) | 
 | } | 
 |  | 
 | func main() { | 
 | 	main2() | 
 | 	main1() | 
 | } |