Skip to content

cmd/gc: methods not available on unnamed structs #3143

@zombiezen

Description

@zombiezen
What steps will reproduce the problem?
Run this program:

package main

import (
    "fmt"
    "os"
    "text/template"
)

type Foo struct {
}

func (foo Foo) Greeting() string {
    return "Hello"
}

type Bar struct {
    Foo
}

func main() {
    t := template.Must(template.New("").Parse("{{.Greeting}}\n{{.Foo.Greeting}}\n"))

    var bar Bar
    var unnamed struct{
        Foo
    }
    
    if err := t.Execute(os.Stdout, bar); err != nil {
        fmt.Println(err)
    }
    fmt.Println("===========")
    fmt.Println(bar.Greeting())
    fmt.Println(unnamed.Greeting())
    fmt.Println("===========")
    if err := t.Execute(os.Stdout, unnamed); err != nil {
        fmt.Println(err)
    }
}

What is the expected output?

Hello
Hello
===========
Hello
Hello
===========
Hello
Hello

What do you see instead?

Hello
Hello
===========
Hello
Hello
===========
template: :1: can't evaluate field Greeting in type struct { main.Foo }

Which compiler are you using (5g, 6g, 8g, gccgo)?
6g

Which operating system are you using?
Linux

Which revision are you using?  (hg identify)
96bd78e7d35e weekly/weekly.2012-02-22

Please provide any additional information below.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions