// run

// Copyright 2015 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 error message when EOF is encountered in the
// middle of a BOM.
//
// Since the error requires an EOF, we cannot use the
// errorcheckoutput mechanism.

package main

import (
	"io/ioutil"
	"log"
	"os"
	"os/exec"
	"runtime"
	"strings"
)

func main() {
	// cannot use temp file on nacl via child process
	if runtime.GOOS == "nacl" {
		return
	}

	// create source
	f, err := ioutil.TempFile("", "issue13268-")
	if err != nil {
		log.Fatalf("could not create source file: %v", err)
	}
	f.Write([]byte("package p\n\nfunc \xef\xef")) // if this fails, we will die later
	f.Close()
	defer os.Remove(f.Name())

	// compile and test output
	cmd := exec.Command("go", "tool", "compile", f.Name())
	out, err := cmd.CombinedOutput()
	if err == nil {
		log.Fatalf("expected cmd/compile to fail")
	}
	if strings.HasPrefix(string(out), "illegal UTF-8 sequence") {
		log.Fatalf("error %q not found", out)
	}
}
