Skip to content

go/build: MultiplePackageError values swapped. #9409

@dmitshur

Description

@dmitshur

This issue is present in the latest commit on master branch, f34964e.

MultiplePackageError is defined in src/go/build/build.go#L420-L426 with Dir, then Packages, and finally Files:

// MultiplePackageError describes a directory containing
// multiple buildable Go source files for multiple packages.
type MultiplePackageError struct {
    Dir      string   // directory containing files
    Packages []string // package names found
    Files    []string // corresponding files: Files[i] declares package Packages[i]
}

It is used in the following incorrect way in src/go/build/build.go#L690-L692:

} else if pkg != p.Name {
    return p, &MultiplePackageError{p.Dir, []string{firstFile, name}, []string{p.Name, pkg}}
}

If one rewrites that composite literal to use keyed fields, the mistake becomes obvious:

return p, &MultiplePackageError{
    Dir:      p.Dir,
    Packages: []string{firstFile, name}, // Packages being set to filenames.
    Files:    []string{p.Name, pkg},     // Files being set to package names.
}

Notably, the last 2 parameter values should be swapped.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions