r331244 - Implement P0482R2, support for char8_t type.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 2 15:16:07 PDT 2018


On Mon, 24 Sep 2018 at 16:42, Shoaib Meenai via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Sorry to revive an old thread, but just to confirm, was it intentional for
> the fundamental typeinfo for char8_t to be always emitted, even when not
> building with -fchar8_t?
>

Yes; the ABI library should generally provide type_info objects for all
fundamental types, including those that are not available in the current
compilation, because it can be used with code built in other
configurations. We do the same for (eg) long long, __float128, and
__float16, even though they are not necessarily enabled in all compilation
modes.

*From: *cfe-commits <cfe-commits-bounces at lists.llvm.org> on behalf of
> Richard Smith via cfe-commits <cfe-commits at lists.llvm.org>
> *Reply-To: *Richard Smith <richard-llvm at metafoo.co.uk>
> *Date: *Monday, April 30, 2018 at 10:06 PM
> *To: *"cfe-commits at lists.llvm.org" <cfe-commits at lists.llvm.org>
> *Subject: *r331244 - Implement P0482R2, support for char8_t type.
>
>
>
> Author: rsmith
>
> Date: Mon Apr 30 22:02:45 2018
>
> New Revision: 331244
>
>
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D331244-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=7fyjnMpg8tSWIPmJ46q5iSAomEeeXb5iAHykEvjG-Bs&e=
>
> Log:
>
> Implement P0482R2, support for char8_t type.
>
>
>
> This is not yet part of any C++ working draft, and so is controlled by the
> flag
>
> -fchar8_t rather than a -std= flag. (The GCC implementation is controlled
> by a
>
> flag with the same name.)
>
>
>
> This implementation is experimental, and will be removed or revised
>
> substantially to match the proposal as it makes its way through the C++
>
> committee.
>
>
>
> Added:
>
>     cfe/trunk/test/CodeGenCXX/char8_t.cpp
>
>     cfe/trunk/test/Lexer/char8_t.cpp
>
>     cfe/trunk/test/SemaCXX/char8_t.cpp
>
> Modified:
>
>     cfe/trunk/include/clang/AST/ASTContext.h
>
>     cfe/trunk/include/clang/AST/BuiltinTypes.def
>
>     cfe/trunk/include/clang/AST/Type.h
>
>     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>
>     cfe/trunk/include/clang/Basic/LangOptions.def
>
>     cfe/trunk/include/clang/Basic/Specifiers.h
>
>     cfe/trunk/include/clang/Basic/TokenKinds.def
>
>     cfe/trunk/include/clang/Driver/Options.td
>
>     cfe/trunk/include/clang/Sema/DeclSpec.h
>
>     cfe/trunk/include/clang/Sema/Initialization.h
>
>     cfe/trunk/include/clang/Serialization/ASTBitCodes.h
>
>     cfe/trunk/lib/AST/ASTContext.cpp
>
>     cfe/trunk/lib/AST/ExprConstant.cpp
>
>     cfe/trunk/lib/AST/ItaniumMangle.cpp
>
>     cfe/trunk/lib/AST/MicrosoftMangle.cpp
>
>     cfe/trunk/lib/AST/NSAPI.cpp
>
>     cfe/trunk/lib/AST/Type.cpp
>
>     cfe/trunk/lib/AST/TypeLoc.cpp
>
>     cfe/trunk/lib/Analysis/PrintfFormatString.cpp
>
>     cfe/trunk/lib/Basic/IdentifierTable.cpp
>
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>
>     cfe/trunk/lib/CodeGen/CodeGenTypes.cpp
>
>     cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
>
>     cfe/trunk/lib/Driver/ToolChains/Clang.cpp
>
>     cfe/trunk/lib/Format/FormatToken.cpp
>
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
>     cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>
>     cfe/trunk/lib/Index/USRGeneration.cpp
>
>     cfe/trunk/lib/Lex/PPExpressions.cpp
>
>     cfe/trunk/lib/Parse/ParseDecl.cpp
>
>     cfe/trunk/lib/Parse/ParseExpr.cpp
>
>     cfe/trunk/lib/Parse/ParseExprCXX.cpp
>
>     cfe/trunk/lib/Parse/ParseTentative.cpp
>
>     cfe/trunk/lib/Sema/DeclSpec.cpp
>
>     cfe/trunk/lib/Sema/SemaDecl.cpp
>
>     cfe/trunk/lib/Sema/SemaDeclCXX.cpp
>
>     cfe/trunk/lib/Sema/SemaExpr.cpp
>
>     cfe/trunk/lib/Sema/SemaInit.cpp
>
>     cfe/trunk/lib/Sema/SemaOverload.cpp
>
>     cfe/trunk/lib/Sema/SemaTemplate.cpp
>
>     cfe/trunk/lib/Sema/SemaTemplateVariadic.cpp
>
>     cfe/trunk/lib/Sema/SemaType.cpp
>
>     cfe/trunk/lib/Serialization/ASTCommon.cpp
>
>     cfe/trunk/lib/Serialization/ASTReader.cpp
>
>     cfe/trunk/test/Lexer/cxx-features.cpp
>
>
>
> Modified: cfe/trunk/include/clang/AST/ASTContext.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_AST_ASTContext.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=9xFtO5gx5AjdOJolymIqhtKCHN79DrOyjXIADk5NNOA&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/AST/ASTContext.h (original)
>
> +++ cfe/trunk/include/clang/AST/ASTContext.h Mon Apr 30 22:02:45 2018
>
> @@ -999,6 +999,7 @@ public:
>
>    CanQualType WCharTy;  // [C++ 3.9.1p5].
>
>    CanQualType WideCharTy; // Same as WCharTy in C++, integer type in C99.
>
>    CanQualType WIntTy;   // [C99 7.24.1], integer type unchanged by
> default promotions.
>
> +  CanQualType Char8Ty;  // [C++20 proposal]
>
>    CanQualType Char16Ty; // [C++0x 3.9.1p5], integer type in C99.
>
>    CanQualType Char32Ty; // [C++0x 3.9.1p5], integer type in C99.
>
>    CanQualType SignedCharTy, ShortTy, IntTy, LongTy, LongLongTy, Int128Ty;
>
>
>
> Modified: cfe/trunk/include/clang/AST/BuiltinTypes.def
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_AST_BuiltinTypes.def-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=nVLJ5LpyHD_3I5wUoW4iW0yLjw4tuOCRr9ho0zcUwSQ&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/AST/BuiltinTypes.def (original)
>
> +++ cfe/trunk/include/clang/AST/BuiltinTypes.def Mon Apr 30 22:02:45 2018
>
> @@ -72,6 +72,9 @@ UNSIGNED_TYPE(UChar, UnsignedCharTy)
>
> // 'wchar_t' for targets where it's unsigned
>
> SHARED_SINGLETON_TYPE(UNSIGNED_TYPE(WChar_U, WCharTy))
>
> +// 'char8_t' in C++20 (proposed)
>
> +UNSIGNED_TYPE(Char8, Char8Ty)
>
> +
>
> // 'char16_t' in C++
>
> UNSIGNED_TYPE(Char16, Char16Ty)
>
>
>
> Modified: cfe/trunk/include/clang/AST/Type.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_AST_Type.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=2uiDKJ1TYftSa5kjrUkp-8_xvI3vNA4fdrpDVMCx8wc&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/AST/Type.h (original)
>
> +++ cfe/trunk/include/clang/AST/Type.h Mon Apr 30 22:02:45 2018
>
> @@ -1777,6 +1777,7 @@ public:
>
>    bool isBooleanType() const;
>
>    bool isCharType() const;
>
>    bool isWideCharType() const;
>
> +  bool isChar8Type() const;
>
>    bool isChar16Type() const;
>
>    bool isChar32Type() const;
>
>    bool isAnyCharacterType() const;
>
>
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_DiagnosticSemaKinds.td-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=71MfUp9muqJq_fGX1RDWoXGMia1DMIn_VMmdEvZ0RlE&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Apr 30
> 22:02:45 2018
>
> @@ -2421,6 +2421,9 @@ def err_template_different_associated_co
>
> def warn_cxx98_compat_unicode_type : Warning<
>
>    "'%0' type specifier is incompatible with C++98">,
>
>    InGroup<CXX98Compat>, DefaultIgnore;
>
> +def warn_cxx17_compat_unicode_type : Warning<
>
> +  "'char8_t' type specifier is incompatible with C++ standards before
> C++20">,
>
> +  InGroup<CXXPre2aCompat>, DefaultIgnore;
>
> // __make_integer_seq
>
> def err_integer_sequence_negative_length : Error<
>
> @@ -5822,6 +5825,13 @@ def err_array_init_wide_string_into_char
>
>    "initializing char array with wide string literal">;
>
> def err_array_init_incompat_wide_string_into_wchar : Error<
>
>    "initializing wide char array with incompatible wide string literal">;
>
> +def err_array_init_plain_string_into_char8_t : Error<
>
> +  "initializing 'char8_t' array with plain string literal">;
>
> +def note_array_init_plain_string_into_char8_t : Note<
>
> +  "add 'u8' prefix to form a 'char8_t' string literal">;
>
> +def err_array_init_utf8_string_into_char : Error<
>
> +  "initialization of char array with UTF-8 string literal is not
> permitted "
>
> +  "by '-fchar8_t'">;
>
> def err_array_init_different_type : Error<
>
>    "cannot initialize array %diff{of type $ with array of type $|"
>
>    "with different type of array}0,1">;
>
>
>
> Modified: cfe/trunk/include/clang/Basic/LangOptions.def
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_LangOptions.def-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=runF5kQwpvGO2zD2V0tQQ-OkczIU0zO5yo6YFYHzysk&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Basic/LangOptions.def (original)
>
> +++ cfe/trunk/include/clang/Basic/LangOptions.def Mon Apr 30 22:02:45 2018
>
> @@ -106,6 +106,7 @@ LANGOPT(LineComment       , 1, 0, "'//'
>
> LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")
>
> LANGOPT(Half              , 1, 0, "half keyword")
>
> LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")
>
> +LANGOPT(Char8             , 1, 0, "char8_t keyword")
>
> LANGOPT(DeclSpecKeyword   , 1, 0, "__declspec keyword")
>
> BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")
>
> BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
>
>
>
> Modified: cfe/trunk/include/clang/Basic/Specifiers.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_Specifiers.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=im9MYO4ZJYhTyZGB43sN1QSMaDtQH80G3YjmDvMfZTE&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Basic/Specifiers.h (original)
>
> +++ cfe/trunk/include/clang/Basic/Specifiers.h Mon Apr 30 22:02:45 2018
>
> @@ -47,6 +47,7 @@ namespace clang {
>
>      TST_void,
>
>      TST_char,
>
>      TST_wchar,        // C++ wchar_t
>
> +    TST_char8,        // C++20 char8_t (proposed)
>
>      TST_char16,       // C++11 char16_t
>
>      TST_char32,       // C++11 char32_t
>
>      TST_int,
>
>
>
> Modified: cfe/trunk/include/clang/Basic/TokenKinds.def
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_TokenKinds.def-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=WKP42u-fM1k_elNke1VNZiQl3FEMVH9eL4-KY5LAiFQ&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Basic/TokenKinds.def (original)
>
> +++ cfe/trunk/include/clang/Basic/TokenKinds.def Mon Apr 30 22:02:45 2018
>
> @@ -260,6 +260,7 @@ PUNCTUATOR(caretcaret,            "^^")
>
> //   BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
>
> //   HALFSUPPORT - This is a keyword if 'half' is a built-in type
>
> //   WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
>
> +//   CHAR8SUPPORT - This is a keyword if 'char8_t' is a built-in type
>
> //
>
> KEYWORD(auto                        , KEYALL)
>
> KEYWORD(break                       , KEYALL)
>
> @@ -380,6 +381,9 @@ KEYWORD(co_yield                    , KE
>
> MODULES_KEYWORD(module)
>
> MODULES_KEYWORD(import)
>
> +// C++ char8_t proposal
>
> +KEYWORD(char8_t                     , CHAR8SUPPORT)
>
> +
>
> // C11 Extension
>
> KEYWORD(_Float16                    , KEYALL)
>
>
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Driver_Options.td-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=H9sO5F67IvVzUZ2PVjcjdf6-RmvvMLIdADPwTqsmppE&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Driver/Options.td (original)
>
> +++ cfe/trunk/include/clang/Driver/Options.td Mon Apr 30 22:02:45 2018
>
> @@ -1525,6 +1525,10 @@ def frtti : Flag<["-"], "frtti">, Group<
>
> def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>;
>
> def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>,
> Flags<[CC1Option]>,
>
>    HelpText<"Allocate to an enum type only as many bytes as it needs for
> the declared range of possible values">;
>
> +def fchar8__t : Flag<["-"], "fchar8_t">, Group<f_Group>,
> Flags<[CC1Option]>,
>
> +  HelpText<"Enable C++ builtin type char8_t">;
>
> +def fno_char8__t : Flag<["-"], "fno-char8_t">, Group<f_Group>,
>
> +  HelpText<"Disable C++ builtin type char8_t">;
>
> def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>,
>
>    HelpText<"Force wchar_t to be a short unsigned int">;
>
> def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>,
>
>
>
> Modified: cfe/trunk/include/clang/Sema/DeclSpec.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Sema_DeclSpec.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=u5pfyoU8ST3absjsbc9CFlX5-EggS_makjnJBk69D-w&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Sema/DeclSpec.h (original)
>
> +++ cfe/trunk/include/clang/Sema/DeclSpec.h Mon Apr 30 22:02:45 2018
>
> @@ -273,6 +273,7 @@ public:
>
>    static const TST TST_void = clang::TST_void;
>
>    static const TST TST_char = clang::TST_char;
>
>    static const TST TST_wchar = clang::TST_wchar;
>
> +  static const TST TST_char8 = clang::TST_char8;
>
>    static const TST TST_char16 = clang::TST_char16;
>
>    static const TST TST_char32 = clang::TST_char32;
>
>    static const TST TST_int = clang::TST_int;
>
>
>
> Modified: cfe/trunk/include/clang/Sema/Initialization.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Sema_Initialization.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=wTYWJmCLg0Q-0gQ_mxBXbnAgcxX6IT9bzm9u6DFVm80&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Sema/Initialization.h (original)
>
> +++ cfe/trunk/include/clang/Sema/Initialization.h Mon Apr 30 22:02:45 2018
>
> @@ -952,6 +952,12 @@ public:
>
>      /// literal.
>
>      FK_IncompatWideStringIntoWideChar,
>
> +    /// \brief Initializing char8_t array with plain string literal.
>
> +    FK_PlainStringIntoUTF8Char,
>
> +
>
> +    /// \brief Initializing char array with UTF-8 string literal.
>
> +    FK_UTF8StringIntoPlainChar,
>
> +
>
>      /// \brief Array type mismatch.
>
>      FK_ArrayTypeMismatch,
>
>
>
> Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Serialization_ASTBitCodes.h-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=C8nZZiGcPF9OUoIDB9mUwWmY6VGNKkWhpS_KDCy-MZY&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)
>
> +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Mon Apr 30
> 22:02:45 2018
>
> @@ -936,6 +936,9 @@ namespace serialization {
>
>        /// \brief The '_Float16' type
>
>        PREDEF_TYPE_FLOAT16_ID = 44,
>
> +      /// \brief The C++ 'char8_t' type.
>
> +      PREDEF_TYPE_CHAR8_ID = 45,
>
> +
>
>        /// \brief OpenCL image types with auto numeration
>
> #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
>
>        PREDEF_TYPE_##Id##_ID,
>
>
>
> Modified: cfe/trunk/lib/AST/ASTContext.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_ASTContext.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=cOs6KUZnMwaVJUQGRo6uR7eweOZPXmmluCQuOWNhrPU&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
>
> +++ cfe/trunk/lib/AST/ASTContext.cpp Mon Apr 30 22:02:45 2018
>
> @@ -1151,6 +1151,9 @@ void ASTContext::InitBuiltinTypes(const
>
>    WIntTy = getFromTargetType(Target.getWIntType());
>
> +  // C++20 (proposed)
>
> +  InitBuiltinType(Char8Ty,              BuiltinType::Char8);
>
> +
>
>    if (LangOpts.CPlusPlus) // C++0x 3.9.1p5, extension for C++
>
>      InitBuiltinType(Char16Ty,           BuiltinType::Char16);
>
>    else // C99
>
> @@ -1739,6 +1742,7 @@ TypeInfo ASTContext::getTypeInfoImpl(con
>
>      case BuiltinType::Char_U:
>
>      case BuiltinType::UChar:
>
>      case BuiltinType::SChar:
>
> +    case BuiltinType::Char8:
>
>        Width = Target->getCharWidth();
>
>        Align = Target->getCharAlign();
>
>        break;
>
> @@ -5456,6 +5460,7 @@ QualType ASTContext::getPromotedIntegerT
>
>      // FIXME: Is there some better way to compute this?
>
>      if (BT->getKind() == BuiltinType::WChar_S ||
>
>          BT->getKind() == BuiltinType::WChar_U ||
>
> +        BT->getKind() == BuiltinType::Char8 ||
>
>          BT->getKind() == BuiltinType::Char16 ||
>
>          BT->getKind() == BuiltinType::Char32) {
>
>        bool FromIsSigned = BT->getKind() == BuiltinType::WChar_S;
>
> @@ -6202,6 +6207,7 @@ static char getObjCEncodingForPrimitiveK
>
>      switch (kind) {
>
>      case BuiltinType::Void:       return 'v';
>
>      case BuiltinType::Bool:       return 'B';
>
> +    case BuiltinType::Char8:
>
>      case BuiltinType::Char_U:
>
>      case BuiltinType::UChar:      return 'C';
>
>      case BuiltinType::Char16:
>
>
>
> Modified: cfe/trunk/lib/AST/ExprConstant.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_ExprConstant.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=H9oTx0hxRV2YiaqRaAT62rPqwLaeI6qSx1Jnr4eq33k&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/ExprConstant.cpp (original)
>
> +++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Apr 30 22:02:45 2018
>
> @@ -7326,6 +7326,7 @@ static int EvaluateBuiltinClassifyType(c
>
>        return pointer_type_class;
>
>      case BuiltinType::WChar_U:
>
> +    case BuiltinType::Char8:
>
>      case BuiltinType::Char16:
>
>      case BuiltinType::Char32:
>
>      case BuiltinType::ObjCId:
>
>
>
> Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_ItaniumMangle.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=8sy6OE5pi8Ry9q6y17BaUw30pa7hvsxmLVOkx_e3JOI&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/ItaniumMangle.cpp (original)
>
> +++ cfe/trunk/lib/AST/ItaniumMangle.cpp Mon Apr 30 22:02:45 2018
>
> @@ -2525,6 +2525,9 @@ void CXXNameMangler::mangleType(const Bu
>
>    case BuiltinType::WChar_U:
>
>      Out << 'w';
>
>      break;
>
> +  case BuiltinType::Char8:
>
> +    Out << "Du";
>
> +    break;
>
>    case BuiltinType::Char16:
>
>      Out << "Ds";
>
>      break;
>
>
>
> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_MicrosoftMangle.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=Oe755zBOlULArIedwdkG4ESB44N3II4b8ks8mqhWBXg&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
>
> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Mon Apr 30 22:02:45 2018
>
> @@ -1918,6 +1918,7 @@ void MicrosoftCXXNameMangler::mangleType
>
>      Out << "$$T";
>
>      break;
>
> +  case BuiltinType::Char8:
>
>    case BuiltinType::Float16:
>
>      mangleArtificalTagType(TTK_Struct, "_Float16", {"__clang"});
>
>      break;
>
>
>
> Modified: cfe/trunk/lib/AST/NSAPI.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_NSAPI.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=LszgOQ0OAtQi2smrBjINDfOOO0JW2QALu8AnaRQYETw&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/NSAPI.cpp (original)
>
> +++ cfe/trunk/lib/AST/NSAPI.cpp Mon Apr 30 22:02:45 2018
>
> @@ -436,6 +436,7 @@ NSAPI::getNSNumberFactoryMethodKind(Qual
>
>    case BuiltinType::Void:
>
>    case BuiltinType::WChar_U:
>
>    case BuiltinType::WChar_S:
>
> +  case BuiltinType::Char8:
>
>    case BuiltinType::Char16:
>
>    case BuiltinType::Char32:
>
>    case BuiltinType::Int128:
>
>
>
> Modified: cfe/trunk/lib/AST/Type.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_Type.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=orhBoXrhRRVshKrjW77pTveqJpEGpXW8tXyGtGjSeW4&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/Type.cpp (original)
>
> +++ cfe/trunk/lib/AST/Type.cpp Mon Apr 30 22:02:45 2018
>
> @@ -1763,6 +1763,12 @@ bool Type::isWideCharType() const {
>
>    return false;
>
> }
>
> +bool Type::isChar8Type() const {
>
> +  if (const BuiltinType *BT = dyn_cast<BuiltinType>(CanonicalType))
>
> +    return BT->getKind() == BuiltinType::Char8;
>
> +  return false;
>
> +}
>
> +
>
> bool Type::isChar16Type() const {
>
>    if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType))
>
>      return BT->getKind() == BuiltinType::Char16;
>
> @@ -1785,6 +1791,7 @@ bool Type::isAnyCharacterType() const {
>
>    case BuiltinType::Char_U:
>
>    case BuiltinType::UChar:
>
>    case BuiltinType::WChar_U:
>
> +  case BuiltinType::Char8:
>
>    case BuiltinType::Char16:
>
>    case BuiltinType::Char32:
>
>    case BuiltinType::Char_S:
>
> @@ -2419,6 +2426,7 @@ bool Type::isPromotableIntegerType() con
>
>      case BuiltinType::UShort:
>
>      case BuiltinType::WChar_S:
>
>      case BuiltinType::WChar_U:
>
> +    case BuiltinType::Char8:
>
>      case BuiltinType::Char16:
>
>      case BuiltinType::Char32:
>
>        return true;
>
> @@ -2655,6 +2663,8 @@ StringRef BuiltinType::getName(const Pri
>
>    case WChar_S:
>
>    case WChar_U:
>
>      return Policy.MSWChar ? "__wchar_t" : "wchar_t";
>
> +  case Char8:
>
> +    return "char8_t";
>
>    case Char16:
>
>      return "char16_t";
>
>    case Char32:
>
>
>
> Modified: cfe/trunk/lib/AST/TypeLoc.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_TypeLoc.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=czE7uVgwmaS0tL19k_4O_a107woTNWonZBuYRyuuFCE&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/AST/TypeLoc.cpp (original)
>
> +++ cfe/trunk/lib/AST/TypeLoc.cpp Mon Apr 30 22:02:45 2018
>
> @@ -317,6 +317,8 @@ TypeSpecifierType BuiltinTypeLoc::getWri
>
>    case BuiltinType::Char_U:
>
>    case BuiltinType::Char_S:
>
>      return TST_char;
>
> +  case BuiltinType::Char8:
>
> +    return TST_char8;
>
>    case BuiltinType::Char16:
>
>      return TST_char16;
>
>    case BuiltinType::Char32:
>
>
>
> Modified: cfe/trunk/lib/Analysis/PrintfFormatString.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Analysis_PrintfFormatString.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=SMqf7-kzif3FR52t2zKRcorAotHjhJwTrs_EM_cSzmg&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Analysis/PrintfFormatString.cpp (original)
>
> +++ cfe/trunk/lib/Analysis/PrintfFormatString.cpp Mon Apr 30 22:02:45 2018
>
> @@ -647,6 +647,7 @@ bool PrintfSpecifier::fixType(QualType Q
>
>    case BuiltinType::Bool:
>
>    case BuiltinType::WChar_U:
>
>    case BuiltinType::WChar_S:
>
> +  case BuiltinType::Char8: // FIXME: Treat like 'char'?
>
>    case BuiltinType::Char16:
>
>    case BuiltinType::Char32:
>
>    case BuiltinType::UInt128:
>
>
>
> Modified: cfe/trunk/lib/Basic/IdentifierTable.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Basic_IdentifierTable.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=vs1ezrBwj1inarHICFoMMpHzh-isKMrQ_oIWI4tDT68&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Basic/IdentifierTable.cpp (original)
>
> +++ cfe/trunk/lib/Basic/IdentifierTable.cpp Mon Apr 30 22:02:45 2018
>
> @@ -115,14 +115,15 @@ namespace {
>
>      KEYNOOPENCL = 0x02000,
>
>      WCHARSUPPORT = 0x04000,
>
>      HALFSUPPORT = 0x08000,
>
> -    KEYCONCEPTS = 0x10000,
>
> -    KEYOBJC2    = 0x20000,
>
> -    KEYZVECTOR  = 0x40000,
>
> -    KEYCOROUTINES = 0x80000,
>
> -    KEYMODULES = 0x100000,
>
> -    KEYCXX2A = 0x200000,
>
> +    CHAR8SUPPORT = 0x10000,
>
> +    KEYCONCEPTS = 0x20000,
>
> +    KEYOBJC2    = 0x40000,
>
> +    KEYZVECTOR  = 0x80000,
>
> +    KEYCOROUTINES = 0x100000,
>
> +    KEYMODULES = 0x200000,
>
> +    KEYCXX2A = 0x400000,
>
>      KEYALLCXX = KEYCXX | KEYCXX11 | KEYCXX2A,
>
> -    KEYALL = (0x3fffff & ~KEYNOMS18 &
>
> +    KEYALL = (0x7fffff & ~KEYNOMS18 &
>
>                ~KEYNOOPENCL) // KEYNOMS18 and KEYNOOPENCL are used to
> exclude.
>
>    };
>
> @@ -151,6 +152,7 @@ static KeywordStatus getKeywordStatus(co
>
>    if (LangOpts.Bool && (Flags & BOOLSUPPORT)) return KS_Enabled;
>
>    if (LangOpts.Half && (Flags & HALFSUPPORT)) return KS_Enabled;
>
>    if (LangOpts.WChar && (Flags & WCHARSUPPORT)) return KS_Enabled;
>
> +  if (LangOpts.Char8 && (Flags & CHAR8SUPPORT)) return KS_Enabled;
>
>    if (LangOpts.AltiVec && (Flags & KEYALTIVEC)) return KS_Enabled;
>
>    if (LangOpts.OpenCL && (Flags & KEYOPENCL)) return KS_Enabled;
>
>    if (!LangOpts.CPlusPlus && (Flags & KEYNOCXX)) return KS_Enabled;
>
>
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CGDebugInfo.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=ZLy817Da-x4STf9aqJo412qutq_dVtNvTJTDN6SMGa8&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Apr 30 22:02:45 2018
>
> @@ -665,6 +665,7 @@ llvm::DIType *CGDebugInfo::CreateType(co
>
>    case BuiltinType::SChar:
>
>      Encoding = llvm::dwarf::DW_ATE_signed_char;
>
>      break;
>
> +  case BuiltinType::Char8:
>
>    case BuiltinType::Char16:
>
>    case BuiltinType::Char32:
>
>      Encoding = llvm::dwarf::DW_ATE_UTF;
>
>
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenTypes.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CodeGenTypes.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=OsF-jtYC21lQFNgvkQz4Mtp8zxviWAfMSwftzmhvVk4&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/CodeGen/CodeGenTypes.cpp (original)
>
> +++ cfe/trunk/lib/CodeGen/CodeGenTypes.cpp Mon Apr 30 22:02:45 2018
>
> @@ -437,6 +437,7 @@ llvm::Type *CodeGenTypes::ConvertType(Qu
>
>      case BuiltinType::ULongLong:
>
>      case BuiltinType::WChar_S:
>
>      case BuiltinType::WChar_U:
>
> +    case BuiltinType::Char8:
>
>      case BuiltinType::Char16:
>
>      case BuiltinType::Char32:
>
>        ResultType = llvm::IntegerType::get(getLLVMContext(),
>
>
>
> Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_ItaniumCXXABI.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=w7v8KExQASD3UZXlqrj_pT-FocBs0XOblzHJE0C1nQ8&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
>
> +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Mon Apr 30 22:02:45 2018
>
> @@ -2706,6 +2706,7 @@ static bool TypeInfoIsInStandardLibrary(
>
>      case BuiltinType::LongDouble:
>
>      case BuiltinType::Float16:
>
>      case BuiltinType::Float128:
>
> +    case BuiltinType::Char8:
>
>      case BuiltinType::Char16:
>
>      case BuiltinType::Char32:
>
>      case BuiltinType::Int128:
>
> @@ -3567,7 +3568,8 @@ void ItaniumCXXABI::EmitFundamentalRTTID
>
>        getContext().UnsignedInt128Ty,   getContext().HalfTy,
>
>        getContext().FloatTy,            getContext().DoubleTy,
>
>        getContext().LongDoubleTy,       getContext().Float128Ty,
>
> -      getContext().Char16Ty,           getContext().Char32Ty
>
> +      getContext().Char8Ty,            getContext().Char16Ty,
>
> +      getContext().Char32Ty
>
>    };
>
>    for (const QualType &FundamentalType : FundamentalTypes)
>
>      EmitFundamentalRTTIDescriptor(FundamentalType, DLLExport);
>
>
>
> Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Driver_ToolChains_Clang.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=l3k9g0qkBeeGNJH0MzNw2aLvT4MjrQaWH0LPy60rACk&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
>
> +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Mon Apr 30 22:02:45 2018
>
> @@ -2687,6 +2687,9 @@ static void RenderCharacterOptions(const
>
>      CmdArgs.push_back("-fno-signed-char");
>
>    }
>
> +  if (Args.hasFlag(options::OPT_fchar8__t, options::OPT_fno_char8__t,
> false))
>
> +    CmdArgs.push_back("-fchar8_t");
>
> +
>
>    if (const Arg *A = Args.getLastArg(options::OPT_fshort_wchar,
>
>                                       options::OPT_fno_short_wchar)) {
>
>      if (A->getOption().matches(options::OPT_fshort_wchar)) {
>
>
>
> Modified: cfe/trunk/lib/Format/FormatToken.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Format_FormatToken.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=HunWUFE1inKqgXgyZVZw51ADzS6j-VrgTcnDwcyCBjE&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Format/FormatToken.cpp (original)
>
> +++ cfe/trunk/lib/Format/FormatToken.cpp Mon Apr 30 22:02:45 2018
>
> @@ -57,6 +57,7 @@ bool FormatToken::isSimpleTypeSpecifier(
>
>    case tok::kw_bool:
>
>    case tok::kw___underlying_type:
>
>    case tok::annot_typename:
>
> +  case tok::kw_char8_t:
>
>    case tok::kw_char16_t:
>
>    case tok::kw_char32_t:
>
>    case tok::kw_typeof:
>
>
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Frontend_CompilerInvocation.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=7znGHdt6Gx2p7G7J6VutLbCsv3KOG4dsrbo-JCCQnEg&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
>
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Apr 30 22:02:45 2018
>
> @@ -2362,6 +2362,7 @@ static void ParseLangArgs(LangOptions &O
>
>    Opts.ImplicitModules = !Args.hasArg(OPT_fno_implicit_modules);
>
>    Opts.CharIsSigned = Opts.OpenCL || !Args.hasArg(OPT_fno_signed_char);
>
>    Opts.WChar = Opts.CPlusPlus && !Args.hasArg(OPT_fno_wchar);
>
> +  Opts.Char8 = Args.hasArg(OPT_fchar8__t);
>
>    if (const Arg *A = Args.getLastArg(OPT_fwchar_type_EQ)) {
>
>      Opts.WCharSize = llvm::StringSwitch<unsigned>(A->getValue())
>
>                           .Case("char", 1)
>
>
>
> Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Frontend_InitPreprocessor.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=7_7ZBPRO2eOpiTYqmJZnpn225YJ9GnSXs6EY6Zqid7k&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)
>
> +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Mon Apr 30 22:02:45 2018
>
> @@ -559,6 +559,10 @@ static void InitializeCPlusPlusFeatureTe
>
>      Builder.defineMacro("__cpp_experimental_concepts", "1");
>
>    if (LangOpts.CoroutinesTS)
>
>      Builder.defineMacro("__cpp_coroutines", "201703L");
>
> +
>
> +  // Potential future breaking changes.
>
> +  if (LangOpts.Char8)
>
> +    Builder.defineMacro("__cpp_char8_t", "201803");
>
> }
>
> static void InitializePredefinedMacros(const TargetInfo &TI,
>
> @@ -939,6 +943,8 @@ static void InitializePredefinedMacros(c
>
>                                         InlineWidthBits));
>
>      DEFINE_LOCK_FREE_MACRO(BOOL, Bool);
>
>      DEFINE_LOCK_FREE_MACRO(CHAR, Char);
>
> +    if (LangOpts.Char8)
>
> +      DEFINE_LOCK_FREE_MACRO(CHAR8_T, Char); // Treat char8_t like char.
>
>      DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16);
>
>      DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32);
>
>      DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar);
>
>
>
> Modified: cfe/trunk/lib/Index/USRGeneration.cpp
>
> URL:
> https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Index_USRGeneration.cpp-3Frev-3D331244-26r1-3D331243-26r2-3D331244-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=1yVxc98c1AfALi19DC1J845Xm76O2Y-TVidL7ln97Ng&s=iaA8AE4rUs7fxePml91TsFyZuYPIQiiPkq9jg6p_OWA&e=
>
>
> ==============================================================================
>
> --- cfe/trunk/lib/Index/USRGeneration.cpp (original)
>
> +++ cfe/trunk/lib/Index/USRGeneration.cpp Mon Apr 30 22:02:45 2018
>
> @@ -650,6 +650,8 @@ void USRGenerator::VisitType(QualType T)
>
>            c = 'b'; break;
>
>          case BuiltinType::UChar:
>
>            c = 'c'; break;
>
> +        case BuiltinType::Char8:
>
> +          c = 'u'; break; // FIXME: Check this doesn't collide
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181002/9fda3977/attachment-0001.html>


More information about the cfe-commits mailing list