forked from golang/go
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/compile: ignore carriage return in magic comments
Update golang#11771. Change-Id: I3bb3262619765d3ca79652817e17e8f260f41907 Reviewed-on: https://go-review.googlesource.com/12379 Reviewed-by: Brad Fitzpatrick <[email protected]>
- Loading branch information
1 parent
aadd84e
commit dabb268
Showing
2 changed files
with
66 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// +build !nacl | ||
// 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. | ||
|
||
// 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", "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) | ||
} | ||
} |