Index: lib/Lex/Lexer.cpp =================================================================== --- lib/Lex/Lexer.cpp +++ lib/Lex/Lexer.cpp @@ -1528,6 +1528,7 @@ {U'\u2227', '^'}, // LOGICAL AND {U'\u2236', ':'}, // RATIO {U'\u223c', '~'}, // TILDE OPERATOR + {U'\u3164', 0}, // HANGUL FILLER {U'\ua789', ':'}, // MODIFIER LETTER COLON {U'\ufeff', 0}, // ZERO WIDTH NO-BREAK SPACE {U'\uff01', '!'}, // FULLWIDTH EXCLAMATION MARK @@ -1558,6 +1559,7 @@ {U'\uff5c', '|'}, // FULLWIDTH VERTICAL LINE {U'\uff5d', '}'}, // FULLWIDTH RIGHT CURLY BRACKET {U'\uff5e', '~'}, // FULLWIDTH TILDE + {U'\uffa0', 0}, // HALFWIDTH HANGUL FILLER {0, 0} }; auto Homoglyph = Index: test/Lexer/unicode.c =================================================================== --- test/Lexer/unicode.c +++ test/Lexer/unicode.c @@ -39,10 +39,12 @@ // expected-warning@-1 {{treating Unicode character as identifier character rather than as ';' symbol}} int v=[=](auto){return~x;}(); // expected-warning 12{{treating Unicode character}} -int ⁠xx‍; +int ⁠xx‍ㅤᅠ; // expected-warning@-1 {{identifier contains Unicode character that is invisible in some environments}} // expected-warning@-2 {{identifier contains Unicode character that is invisible in some environments}} // expected-warning@-3 {{identifier contains Unicode character that is invisible in some environments}} +// expected-warning@-4 {{identifier contains Unicode character that is invisible in some environments}} +// expected-warning@-5 {{identifier contains Unicode character that is invisible in some environments}} int foo​bar = 0; // expected-warning {{identifier contains Unicode character that is invisible in some environments}} int x = foobar; // expected-error {{undeclared identifier}}