// run

//go:build !nacl && !js && !wasip1 && gc

// 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.

// Issue 11771: Magic comments should ignore carriage returns.

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
)

func main() {
	if runtime.Compiler != "gc" {
		return
	}

	dir, err := ioutil.TempDir("", "go-issue11771")
	if err != nil {
		log.Fatalf("creating temp dir: %v\n", err)
	}
	defer os.RemoveAll(dir)

	// The go:nowritebarrier magic comment is only permitted in
	// the runtime package.  So we confirm that the compilation
	// fails.

	var buf bytes.Buffer
	fmt.Fprintln(&buf, `
package main

func main() {
}
`)
	fmt.Fprintln(&buf, "//go:nowritebarrier\r")
	fmt.Fprintln(&buf, `
func x() {
}
`)

	if err := ioutil.WriteFile(filepath.Join(dir, "x.go"), buf.Bytes(), 0666); err != nil {
		log.Fatal(err)
	}

	cmd := exec.Command("go", "tool", "compile", "-p=p", "x.go")
	cmd.Dir = dir
	output, err := cmd.CombinedOutput()
	if err == nil {
		log.Fatal("compile succeeded unexpectedly")
	}
	if !bytes.Contains(output, []byte("only allowed in runtime")) {
		log.Fatalf("wrong error message from compiler; got:\n%s\n", output)
	}
}
