]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: stop constructing untyped nodes when instrumenting asan
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Thu, 13 Apr 2023 10:44:32 +0000 (17:44 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Fri, 14 Apr 2023 17:58:12 +0000 (17:58 +0000)
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 <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/pkginit/init.go
src/cmd/compile/internal/pkginit/initAsanGlobals.go

index 814127c66cab18e0f4e2c02c9eaafcb11ff471d7..edb0d6a5330fdd4eaa9b24ca06692bdcc4dc67a5 100644 (file)
@@ -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()
index 4164dee8dbdacf5ac0911b1138f8b643720fa8d8..ce26cbf1899152d2b08399c51ce55916f11de190 100644 (file)
@@ -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.