// Copyright 2023 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 ir import ( "cmd/compile/internal/base" "cmd/internal/src" "fmt" "path/filepath" "strings" ) // checkStaticValueResult compares the result from ReassignOracle.StaticValue // with the corresponding result from ir.StaticValue to make sure they agree. // This method is called only when turned on via build tag. func checkStaticValueResult(n Node, newres Node) { oldres := StaticValue(n) if oldres != newres { base.Fatalf("%s: new/old static value disagreement on %v:\nnew=%v\nold=%v", fmtFullPos(n.Pos()), n, newres, oldres) } } // checkReassignedResult compares the result from ReassignOracle.Reassigned // with the corresponding result from ir.Reassigned to make sure they agree. // This method is called only when turned on via build tag. func checkReassignedResult(n *Name, newres bool) { origres := Reassigned(n) if newres != origres { base.Fatalf("%s: new/old reassigned disagreement on %v (class %s) newres=%v oldres=%v", fmtFullPos(n.Pos()), n, n.Class.String(), newres, origres) } } // fmtFullPos returns a verbose dump for pos p, including inlines. func fmtFullPos(p src.XPos) string { var sb strings.Builder sep := "" base.Ctxt.AllPos(p, func(pos src.Pos) { sb.WriteString(sep) sep = "|" file := filepath.Base(pos.Filename()) fmt.Fprintf(&sb, "%s:%d:%d", file, pos.Line(), pos.Col()) }) return sb.String() }