For convenience with some Windows editors, the other Go compiler was modified to permit a byte-order-mark (0xfeff) at the start of a .go file. This byte-order-mark is meaningless when using UTF-8, but apparently some editors introduce it anyhow. This patch changes the gccgo frontend to also ignore the mark at the start of a file. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Will commit to 4.7 branch when it is open for commits.
Ian
diff -r 858f39eca5c5 go/lex.cc --- a/go/lex.cc Tue Sep 18 22:24:35 2012 -0700 +++ b/go/lex.cc Wed Sep 19 08:45:16 2012 -0700 @@ -722,7 +722,16 @@ unsigned int ci; bool issued_error; this->lineoff_ = p - this->linebuf_; - this->advance_one_utf8_char(p, &ci, &issued_error); + const char *pnext = this->advance_one_utf8_char(p, &ci, + &issued_error); + + // Ignore byte order mark at start of file. + if (ci == 0xfeff && this->lineno_ == 1 && this->lineoff_ == 0) + { + p = pnext; + break; + } + if (Lex::is_unicode_letter(ci)) return this->gather_identifier();