| // errorcheck -0 -d=ssa/mem2reg/debug=4 |
| |
| // Copyright 2025 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. |
| |
| // Test for variables accessed through pointers that can |
| // be promoted to register by the mem2reg pass. |
| |
| package main |
| |
| // The following functions are ported from src/cmd/compile/internal/ssa/mem2reg_test.go. |
| |
| // Single-block mem2reg test |
| |
| func justReturn0() int { |
| var x, y, z int // ERROR "promoted x in single block case" "promoted y in single block case" "promoted z in single block case" |
| xp := &x |
| yp := &y |
| zp := &z |
| *xp = 0 |
| *yp = 1 |
| *zp = 2 |
| *yp = 3 |
| *zp = 4 |
| *yp = 5 |
| valX1 := *xp |
| *zp = valX1 - 1 |
| *xp = 1 |
| *yp = 2 |
| *xp = 3 |
| *yp = 4 |
| *xp = 5 |
| valZ1 := *zp |
| *yp = valZ1 + 1 |
| *zp = 1 |
| *xp = 2 |
| *zp = 3 |
| *xp = 4 |
| *zp = 5 |
| valY1 := *yp |
| return valY1 |
| } |