aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encoding.go
diff options
context:
space:
mode:
Diffstat (limited to 'prog/encoding.go')
-rw-r--r--prog/encoding.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/prog/encoding.go b/prog/encoding.go
index e925e7918..db32484a8 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -547,9 +547,10 @@ func (p *parser) parseArgRes(typ Type, dir Dir) (Arg, error) {
func (p *parser) parseArgAddr(typ Type, dir Dir) (Arg, error) {
var elem Type
elemDir := DirInOut
+ squashableElem := false
switch t1 := typ.(type) {
case *PtrType:
- elem, elemDir = t1.Elem, t1.ElemDir
+ elem, elemDir, squashableElem = t1.Elem, t1.ElemDir, t1.SquashableElem
case *VmaType:
default:
p.eatExcessive(true, "wrong addr arg %T", typ)
@@ -582,8 +583,10 @@ func (p *parser) parseArgAddr(typ Type, dir Dir) (Arg, error) {
p.Parse('N')
p.Parse('Y')
p.Parse('=')
- anyPtr := p.target.getAnyPtrType(typ.Size())
- typ, elem, elemDir = anyPtr, anyPtr.Elem, anyPtr.ElemDir
+ if squashableElem {
+ anyPtr := p.target.getAnyPtrType(typ.Size())
+ typ, elem, elemDir = anyPtr, anyPtr.Elem, anyPtr.ElemDir
+ }
}
var err error
inner, err = p.parseArg(elem, elemDir)