diff options
Diffstat (limited to 'src/cmd/compile/internal/gc/lex.go')
| -rw-r--r-- | src/cmd/compile/internal/gc/lex.go | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go index d05ef2738c..bb8bfdf80f 100644 --- a/src/cmd/compile/internal/gc/lex.go +++ b/src/cmd/compile/internal/gc/lex.go @@ -7,6 +7,7 @@ package gc import ( + "cmd/compile/internal/ssa" "cmd/internal/obj" "flag" "fmt" @@ -286,6 +287,23 @@ func Main() { } } } + // special case for ssa for now + if strings.HasPrefix(name, "ssa/") { + // expect form ssa/phase/flag + // e.g. -d=ssa/generic_cse/time + // _ in phase name also matches space + phase := name[4:] + flag := "debug" // default flag is debug + if i := strings.Index(phase, "/"); i >= 0 { + flag = phase[i+1:] + phase = phase[:i] + } + err := ssa.PhaseOption(phase, flag, val) + if err != "" { + log.Fatalf(err) + } + continue Split + } log.Fatalf("unknown debug key -d %s\n", name) } } @@ -844,7 +862,7 @@ func plan9quote(s string) string { return s } -type Pragma uint8 +type Pragma uint16 const ( Nointerface Pragma = 1 << iota @@ -855,6 +873,7 @@ const ( Systemstack // func must run on system stack Nowritebarrier // emit compiler error instead of write barrier Nowritebarrierrec // error on write barrier in this or recursive callees + CgoUnsafeArgs // treat a pointer to one arg as a pointer to them all ) type lexer struct { @@ -1677,6 +1696,8 @@ func (l *lexer) getlinepragma() rune { Yyerror("//go:nowritebarrierrec only allowed in runtime") } l.pragma |= Nowritebarrierrec | Nowritebarrier // implies Nowritebarrier + case "go:cgo_unsafe_args": + l.pragma |= CgoUnsafeArgs } return c } |
