From 70451004bd9d30257aa0c9d02df27a51d9367e73 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 13 Apr 2023 17:44:32 +0700 Subject: [PATCH] cmd/compile: stop constructing untyped nodes when instrumenting asan The code is using typecheck.ConvNop to convert from untyped int to uintptr. However, that left the literal node untyped. It often does not matter, because typecheck.EvalConst will see the OCONVNOP, and replace the node with a new constant node. This CL changes the code to construct the constant node directly using typecheck.DefaultLit, so the last dependecy of typecheck.EvalConst will go away, next CL can safely remove it from the code base. Change-Id: Ie5a3d1ff6d3b72be7b8c43170eaa4f6cbb3206fc Reviewed-on: https://go-review.googlesource.com/c/go/+/484317 Reviewed-by: Keith Randall Reviewed-by: Keith Randall Run-TryBot: Cuong Manh Le Reviewed-by: Matthew Dempsky TryBot-Result: Gopher Robot --- src/cmd/compile/internal/pkginit/init.go | 2 +- src/cmd/compile/internal/pkginit/initAsanGlobals.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/pkginit/init.go b/src/cmd/compile/internal/pkginit/init.go index 814127c66c..edb0d6a533 100644 --- a/src/cmd/compile/internal/pkginit/init.go +++ b/src/cmd/compile/internal/pkginit/init.go @@ -144,7 +144,7 @@ func Task() *ir.Name { asancall := ir.NewCallExpr(base.Pos, ir.OCALL, asanf, nil) asancall.Args.Append(typecheck.ConvNop(typecheck.NodAddr( ir.NewIndexExpr(base.Pos, globals, ir.NewInt(base.Pos, 0))), types.Types[types.TUNSAFEPTR])) - asancall.Args.Append(typecheck.ConvNop(ir.NewInt(base.Pos, int64(ni)), types.Types[types.TUINTPTR])) + asancall.Args.Append(typecheck.DefaultLit(ir.NewInt(base.Pos, int64(ni)), types.Types[types.TUINTPTR])) fnInit.Body.Append(asancall) typecheck.FinishFuncBody() diff --git a/src/cmd/compile/internal/pkginit/initAsanGlobals.go b/src/cmd/compile/internal/pkginit/initAsanGlobals.go index 4164dee8db..ce26cbf189 100644 --- a/src/cmd/compile/internal/pkginit/initAsanGlobals.go +++ b/src/cmd/compile/internal/pkginit/initAsanGlobals.go @@ -79,12 +79,12 @@ func instrumentGlobals(fn *ir.Func) *ir.Name { // Assign globals[i].size. g := n.(*ir.Name) size := g.Type().Size() - c = tconv(ir.NewInt(base.Pos, size), types.Types[types.TUINTPTR]) + c = typecheck.DefaultLit(ir.NewInt(base.Pos, size), types.Types[types.TUINTPTR]) setField("size", c, i) // Assign globals[i].sizeWithRedzone. rzSize := GetRedzoneSizeForGlobal(size) sizeWithRz := rzSize + size - c = tconv(ir.NewInt(base.Pos, sizeWithRz), types.Types[types.TUINTPTR]) + c = typecheck.DefaultLit(ir.NewInt(base.Pos, sizeWithRz), types.Types[types.TUINTPTR]) setField("sizeWithRedzone", c, i) // The C string type is terminated by a null character "\0", Go should use three-digit // octal "\000" or two-digit hexadecimal "\x00" to create null terminated string. -- 2.48.1