Sorry. I did not notice this. I will be sure to add the title from the phabricator review as the first line next time. On Mon, Jun 4, 2018 at 9:44 AM Roman Lebedev <lebedev...@gmail.com> wrote: > > Did you use `arc patch` to get the commit description? > Please make sure that the first line of the commit is reasonable. > In this case it is not reasonable. > > On Mon, Jun 4, 2018 at 7:07 PM, Leonard Chan via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: leonardchan > > Date: Mon Jun 4 09:07:52 2018 > > New Revision: 333923 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=333923&view=rev > > Log: > > This diff includes changes for supporting the following types. > > > > // Primary fixed point types > > signed short _Accum s_short_accum; > > signed _Accum s_accum; > > signed long _Accum s_long_accum; > > unsigned short _Accum u_short_accum; > > unsigned _Accum u_accum; > > unsigned long _Accum u_long_accum; > > > > // Aliased fixed point types > > short _Accum short_accum; > > _Accum accum; > > long _Accum long_accum; > > This diff only allows for declaration of the fixed point types. Assignment > > and other operations done on fixed point types according to > > http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1169.pdf will be added in > > future patches. The saturated versions of these types and the equivalent > > _Fract types will also be added in future patches. > > > > The tests included are for asserting that we can declare these types. > > > > Fixed the test that was failing by not checking for dso_local on some > > targets. > > > > Differential Revision: https://reviews.llvm.org/D46084 > > > > Added: > > cfe/trunk/test/Frontend/fixed_point.c > > cfe/trunk/test/Frontend/fixed_point_bit_widths.c > > cfe/trunk/test/Frontend/fixed_point_errors.c > > cfe/trunk/test/Frontend/fixed_point_errors.cpp > > cfe/trunk/test/Frontend/fixed_point_not_enabled.c > > Modified: > > cfe/trunk/include/clang-c/Index.h > > cfe/trunk/include/clang/AST/ASTContext.h > > cfe/trunk/include/clang/AST/BuiltinTypes.def > > cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td > > cfe/trunk/include/clang/Basic/LangOptions.def > > cfe/trunk/include/clang/Basic/Specifiers.h > > cfe/trunk/include/clang/Basic/TargetInfo.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/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/TargetInfo.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/Frontend/CompilerInvocation.cpp > > cfe/trunk/lib/Index/USRGeneration.cpp > > cfe/trunk/lib/Parse/ParseDecl.cpp > > cfe/trunk/lib/Sema/DeclSpec.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/tools/libclang/CXType.cpp > > > > Modified: cfe/trunk/include/clang-c/Index.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang-c/Index.h (original) > > +++ cfe/trunk/include/clang-c/Index.h Mon Jun 4 09:07:52 2018 > > @@ -3182,8 +3182,14 @@ enum CXTypeKind { > > CXType_Float128 = 30, > > CXType_Half = 31, > > CXType_Float16 = 32, > > + CXType_ShortAccum = 33, > > + CXType_Accum = 34, > > + CXType_LongAccum = 35, > > + CXType_UShortAccum = 36, > > + CXType_UAccum = 37, > > + CXType_ULongAccum = 38, > > CXType_FirstBuiltin = CXType_Void, > > - CXType_LastBuiltin = CXType_Float16, > > + CXType_LastBuiltin = CXType_ULongAccum, > > > > CXType_Complex = 100, > > CXType_Pointer = 101, > > > > Modified: cfe/trunk/include/clang/AST/ASTContext.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/AST/ASTContext.h (original) > > +++ cfe/trunk/include/clang/AST/ASTContext.h Mon Jun 4 09:07:52 2018 > > @@ -1007,6 +1007,9 @@ public: > > CanQualType UnsignedCharTy, UnsignedShortTy, UnsignedIntTy, > > UnsignedLongTy; > > CanQualType UnsignedLongLongTy, UnsignedInt128Ty; > > CanQualType FloatTy, DoubleTy, LongDoubleTy, Float128Ty; > > + CanQualType ShortAccumTy, AccumTy, > > + LongAccumTy; // ISO/IEC JTC1 SC22 WG14 N1169 Extension > > + CanQualType UnsignedShortAccumTy, UnsignedAccumTy, UnsignedLongAccumTy; > > CanQualType HalfTy; // [OpenCL 6.1.1.1], ARM NEON > > CanQualType Float16Ty; // C11 extension ISO/IEC TS 18661-3 > > CanQualType FloatComplexTy, DoubleComplexTy, LongDoubleComplexTy; > > > > Modified: cfe/trunk/include/clang/AST/BuiltinTypes.def > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/BuiltinTypes.def?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/AST/BuiltinTypes.def (original) > > +++ cfe/trunk/include/clang/AST/BuiltinTypes.def Mon Jun 4 09:07:52 2018 > > @@ -122,6 +122,26 @@ SIGNED_TYPE(LongLong, LongLongTy) > > // '__int128_t' > > SIGNED_TYPE(Int128, Int128Ty) > > > > +//===- Fixed point types > > --------------------------------------------------===// > > + > > +// 'short _Accum' > > +SIGNED_TYPE(ShortAccum, ShortAccumTy) > > + > > +// '_Accum' > > +SIGNED_TYPE(Accum, AccumTy) > > + > > +// 'long _Accum' > > +SIGNED_TYPE(LongAccum, LongAccumTy) > > + > > +// 'unsigned short _Accum' > > +UNSIGNED_TYPE(UShortAccum, UnsignedShortAccumTy) > > + > > +// 'unsigned _Accum' > > +UNSIGNED_TYPE(UAccum, UnsignedAccumTy) > > + > > +// 'unsigned long _Accum' > > +UNSIGNED_TYPE(ULongAccum, UnsignedLongAccumTy) > > + > > //===- Floating point types > > -----------------------------------------------===// > > > > // 'half' in OpenCL, '__fp16' in ARM NEON. > > > > Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original) > > +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Mon Jun 4 > > 09:07:52 2018 > > @@ -168,6 +168,8 @@ def ext_clang_enable_if : Extension<"'en > > InGroup<GccCompat>; > > def ext_clang_diagnose_if : Extension<"'diagnose_if' is a clang > > extension">, > > InGroup<GccCompat>; > > +def err_fixed_point_not_enabled : Error<"compile with " > > + "'-ffixed-point' to enable fixed point types">; > > > > // SEH > > def err_seh_expected_handler : Error< > > > > Modified: cfe/trunk/include/clang/Basic/LangOptions.def > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Basic/LangOptions.def (original) > > +++ cfe/trunk/include/clang/Basic/LangOptions.def Mon Jun 4 09:07:52 2018 > > @@ -302,6 +302,8 @@ ENUM_LANGOPT(ClangABICompat, ClangABI, 4 > > > > COMPATIBLE_VALUE_LANGOPT(FunctionAlignment, 5, 0, "Default alignment for > > functions") > > > > +LANGOPT(FixedPoint, 1, 0, "fixed point types") > > + > > #undef LANGOPT > > #undef COMPATIBLE_LANGOPT > > #undef BENIGN_LANGOPT > > > > Modified: cfe/trunk/include/clang/Basic/Specifiers.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Specifiers.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Basic/Specifiers.h (original) > > +++ cfe/trunk/include/clang/Basic/Specifiers.h Mon Jun 4 09:07:52 2018 > > @@ -54,6 +54,7 @@ namespace clang { > > TST_int128, > > TST_half, // OpenCL half, ARM NEON __fp16 > > TST_Float16, // C11 extension ISO/IEC TS 18661-3 > > + TST_Accum, // ISO/IEC JTC1 SC22 WG14 N1169 Extension > > TST_float, > > TST_double, > > TST_float128, > > > > Modified: cfe/trunk/include/clang/Basic/TargetInfo.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) > > +++ cfe/trunk/include/clang/Basic/TargetInfo.h Mon Jun 4 09:07:52 2018 > > @@ -74,6 +74,9 @@ protected: > > unsigned char LargeArrayMinWidth, LargeArrayAlign; > > unsigned char LongWidth, LongAlign; > > unsigned char LongLongWidth, LongLongAlign; > > + unsigned char ShortAccumWidth, ShortAccumAlign; > > + unsigned char AccumWidth, AccumAlign; > > + unsigned char LongAccumWidth, LongAccumAlign; > > unsigned char SuitableAlign; > > unsigned char DefaultAlignForAttributeAligned; > > unsigned char MinGlobalAlign; > > @@ -358,6 +361,21 @@ public: > > unsigned getLongLongWidth() const { return LongLongWidth; } > > unsigned getLongLongAlign() const { return LongLongAlign; } > > > > + /// getShortAccumWidth/Align - Return the size of 'signed short _Accum' > > and > > + /// 'unsigned short _Accum' for this target, in bits. > > + unsigned getShortAccumWidth() const { return ShortAccumWidth; } > > + unsigned getShortAccumAlign() const { return ShortAccumAlign; } > > + > > + /// getAccumWidth/Align - Return the size of 'signed _Accum' and > > + /// 'unsigned _Accum' for this target, in bits. > > + unsigned getAccumWidth() const { return AccumWidth; } > > + unsigned getAccumAlign() const { return AccumAlign; } > > + > > + /// getLongAccumWidth/Align - Return the size of 'signed long _Accum' and > > + /// 'unsigned long _Accum' for this target, in bits. > > + unsigned getLongAccumWidth() const { return LongAccumWidth; } > > + unsigned getLongAccumAlign() const { return LongAccumAlign; } > > + > > /// Determine whether the __int128 type is supported on this target. > > virtual bool hasInt128Type() const { > > return (getPointerWidth(0) >= 64) || getTargetOpts().ForceEnableInt128; > > > > Modified: cfe/trunk/include/clang/Basic/TokenKinds.def > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Basic/TokenKinds.def (original) > > +++ cfe/trunk/include/clang/Basic/TokenKinds.def Mon Jun 4 09:07:52 2018 > > @@ -389,6 +389,9 @@ KEYWORD(char8_t , CH > > // C11 Extension > > KEYWORD(_Float16 , KEYALL) > > > > +// ISO/IEC JTC1 SC22 WG14 N1169 Extension > > +KEYWORD(_Accum , KEYNOCXX) > > + > > // GNU Extensions (in impl-reserved namespace) > > KEYWORD(_Decimal32 , KEYALL) > > KEYWORD(_Decimal64 , KEYALL) > > > > Modified: cfe/trunk/include/clang/Driver/Options.td > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Driver/Options.td (original) > > +++ cfe/trunk/include/clang/Driver/Options.td Mon Jun 4 09:07:52 2018 > > @@ -887,6 +887,11 @@ def fno_force_enable_int128 : Flag<["-"] > > Group<f_Group>, Flags<[CC1Option]>, > > HelpText<"Disable support for int128_t type">; > > > > +def ffixed_point : Flag<["-"], "ffixed-point">, Group<f_Group>, > > + Flags<[CC1Option]>, HelpText<"Enable fixed point > > types">; > > +def fno_fixed_point : Flag<["-"], "fno-fixed-point">, Group<f_Group>, > > + HelpText<"Disable fixed point types">; > > + > > // Begin sanitizer flags. These should all be core options exposed in all > > driver > > // modes. > > let Flags = [CC1Option, CoreOption] in { > > > > Modified: cfe/trunk/include/clang/Sema/DeclSpec.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DeclSpec.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Sema/DeclSpec.h (original) > > +++ cfe/trunk/include/clang/Sema/DeclSpec.h Mon Jun 4 09:07:52 2018 > > @@ -282,6 +282,7 @@ public: > > static const TST TST_float = clang::TST_float; > > static const TST TST_double = clang::TST_double; > > static const TST TST_float16 = clang::TST_Float16; > > + static const TST TST_accum = clang::TST_Accum; > > static const TST TST_float128 = clang::TST_float128; > > static const TST TST_bool = clang::TST_bool; > > static const TST TST_decimal32 = clang::TST_decimal32; > > > > Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original) > > +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Mon Jun 4 09:07:52 > > 2018 > > @@ -939,6 +939,24 @@ namespace serialization { > > /// The C++ 'char8_t' type. > > PREDEF_TYPE_CHAR8_ID = 45, > > > > + /// \brief The 'short _Accum' type > > + PREDEF_TYPE_SHORT_ACCUM_ID = 46, > > + > > + /// \brief The '_Accum' type > > + PREDEF_TYPE_ACCUM_ID = 47, > > + > > + /// \brief The 'long _Accum' type > > + PREDEF_TYPE_LONG_ACCUM_ID = 48, > > + > > + /// \brief The 'unsigned short _Accum' type > > + PREDEF_TYPE_USHORT_ACCUM_ID = 49, > > + > > + /// \brief The 'unsigned _Accum' type > > + PREDEF_TYPE_UACCUM_ID = 50, > > + > > + /// \brief The 'unsigned long _Accum' type > > + PREDEF_TYPE_ULONG_ACCUM_ID = 51, > > + > > /// 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: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/ASTContext.cpp (original) > > +++ cfe/trunk/lib/AST/ASTContext.cpp Mon Jun 4 09:07:52 2018 > > @@ -1134,6 +1134,14 @@ void ASTContext::InitBuiltinTypes(const > > // C11 extension ISO/IEC TS 18661-3 > > InitBuiltinType(Float16Ty, BuiltinType::Float16); > > > > + // ISO/IEC JTC1 SC22 WG14 N1169 Extension > > + InitBuiltinType(ShortAccumTy, BuiltinType::ShortAccum); > > + InitBuiltinType(AccumTy, BuiltinType::Accum); > > + InitBuiltinType(LongAccumTy, BuiltinType::LongAccum); > > + InitBuiltinType(UnsignedShortAccumTy, BuiltinType::UShortAccum); > > + InitBuiltinType(UnsignedAccumTy, BuiltinType::UAccum); > > + InitBuiltinType(UnsignedLongAccumTy, BuiltinType::ULongAccum); > > + > > // GNU extension, 128-bit integers. > > InitBuiltinType(Int128Ty, BuiltinType::Int128); > > InitBuiltinType(UnsignedInt128Ty, BuiltinType::UInt128); > > @@ -1785,6 +1793,21 @@ TypeInfo ASTContext::getTypeInfoImpl(con > > Width = 128; > > Align = 128; // int128_t is 128-bit aligned on all targets. > > break; > > + case BuiltinType::ShortAccum: > > + case BuiltinType::UShortAccum: > > + Width = Target->getShortAccumWidth(); > > + Align = Target->getShortAccumAlign(); > > + break; > > + case BuiltinType::Accum: > > + case BuiltinType::UAccum: > > + Width = Target->getAccumWidth(); > > + Align = Target->getAccumAlign(); > > + break; > > + case BuiltinType::LongAccum: > > + case BuiltinType::ULongAccum: > > + Width = Target->getLongAccumWidth(); > > + Align = Target->getLongAccumAlign(); > > + break; > > case BuiltinType::Float16: > > case BuiltinType::Half: > > Width = Target->getHalfWidth(); > > @@ -6222,6 +6245,12 @@ static char getObjCEncodingForPrimitiveK > > case BuiltinType::Float16: > > case BuiltinType::Float128: > > case BuiltinType::Half: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > // FIXME: potentially need @encodes for these! > > return ' '; > > > > > > Modified: cfe/trunk/lib/AST/ExprConstant.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/ExprConstant.cpp (original) > > +++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Jun 4 09:07:52 2018 > > @@ -7355,6 +7355,11 @@ EvaluateBuiltinClassifyType(QualType T, > > case BuiltinType::UInt128: > > return GCCTypeClass::Integer; > > > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > + return GCCTypeClass::None; > > + > > case BuiltinType::NullPtr: > > > > case BuiltinType::ObjCId: > > > > Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ItaniumMangle.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/ItaniumMangle.cpp (original) > > +++ cfe/trunk/lib/AST/ItaniumMangle.cpp Mon Jun 4 09:07:52 2018 > > @@ -2552,6 +2552,13 @@ void CXXNameMangler::mangleType(const Bu > > case BuiltinType::Float16: > > Out << "DF16_"; > > break; > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > + llvm_unreachable("Fixed point types are disabled for c++"); > > case BuiltinType::Half: > > Out << "Dh"; > > break; > > > > Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) > > +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Mon Jun 4 09:07:52 2018 > > @@ -1926,6 +1926,12 @@ void MicrosoftCXXNameMangler::mangleType > > mangleArtificalTagType(TTK_Struct, "_Half", {"__clang"}); > > break; > > > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > case BuiltinType::Char8: > > case BuiltinType::Float128: { > > DiagnosticsEngine &Diags = Context.getDiags(); > > > > Modified: cfe/trunk/lib/AST/NSAPI.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/NSAPI.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/NSAPI.cpp (original) > > +++ cfe/trunk/lib/AST/NSAPI.cpp Mon Jun 4 09:07:52 2018 > > @@ -441,6 +441,12 @@ NSAPI::getNSNumberFactoryMethodKind(Qual > > case BuiltinType::Char32: > > case BuiltinType::Int128: > > case BuiltinType::LongDouble: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > case BuiltinType::UInt128: > > case BuiltinType::Float16: > > case BuiltinType::Float128: > > > > Modified: cfe/trunk/lib/AST/Type.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/Type.cpp (original) > > +++ cfe/trunk/lib/AST/Type.cpp Mon Jun 4 09:07:52 2018 > > @@ -2656,6 +2656,18 @@ StringRef BuiltinType::getName(const Pri > > return "double"; > > case LongDouble: > > return "long double"; > > + case ShortAccum: > > + return "short _Accum"; > > + case Accum: > > + return "_Accum"; > > + case LongAccum: > > + return "long _Accum"; > > + case UShortAccum: > > + return "unsigned short _Accum"; > > + case UAccum: > > + return "unsigned _Accum"; > > + case ULongAccum: > > + return "unsigned long _Accum"; > > case Float16: > > return "_Float16"; > > case Float128: > > > > Modified: cfe/trunk/lib/AST/TypeLoc.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TypeLoc.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/AST/TypeLoc.cpp (original) > > +++ cfe/trunk/lib/AST/TypeLoc.cpp Mon Jun 4 09:07:52 2018 > > @@ -344,6 +344,12 @@ TypeSpecifierType BuiltinTypeLoc::getWri > > case BuiltinType::LongDouble: > > case BuiltinType::Float16: > > case BuiltinType::Float128: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > llvm_unreachable("Builtin type needs extra local data!"); > > // Fall through, if the impossible happens. > > > > > > Modified: cfe/trunk/lib/Analysis/PrintfFormatString.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/PrintfFormatString.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Analysis/PrintfFormatString.cpp (original) > > +++ cfe/trunk/lib/Analysis/PrintfFormatString.cpp Mon Jun 4 09:07:52 2018 > > @@ -655,6 +655,12 @@ bool PrintfSpecifier::fixType(QualType Q > > case BuiltinType::Half: > > case BuiltinType::Float16: > > case BuiltinType::Float128: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > // Various types which are non-trivial to correct. > > return false; > > > > > > Modified: cfe/trunk/lib/Basic/TargetInfo.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/TargetInfo.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Basic/TargetInfo.cpp (original) > > +++ cfe/trunk/lib/Basic/TargetInfo.cpp Mon Jun 4 09:07:52 2018 > > @@ -40,6 +40,9 @@ TargetInfo::TargetInfo(const llvm::Tripl > > IntWidth = IntAlign = 32; > > LongWidth = LongAlign = 32; > > LongLongWidth = LongLongAlign = 64; > > + ShortAccumWidth = ShortAccumAlign = 16; > > + AccumWidth = AccumAlign = 32; > > + LongAccumWidth = LongAccumAlign = 64; > > SuitableAlign = 64; > > DefaultAlignForAttributeAligned = 128; > > MinGlobalAlign = 0; > > > > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Jun 4 09:07:52 2018 > > @@ -702,6 +702,16 @@ llvm::DIType *CGDebugInfo::CreateType(co > > // floating point types of the same size. > > Encoding = llvm::dwarf::DW_ATE_float; > > break; > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + Encoding = llvm::dwarf::DW_ATE_signed_fixed; > > + break; > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > + Encoding = llvm::dwarf::DW_ATE_unsigned_fixed; > > + break; > > } > > > > switch (BT->getKind()) { > > > > Modified: cfe/trunk/lib/CodeGen/CodeGenTypes.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenTypes.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CodeGenTypes.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenTypes.cpp Mon Jun 4 09:07:52 2018 > > @@ -440,6 +440,12 @@ llvm::Type *CodeGenTypes::ConvertType(Qu > > case BuiltinType::Char8: > > case BuiltinType::Char16: > > case BuiltinType::Char32: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > ResultType = llvm::IntegerType::get(getLLVMContext(), > > > > static_cast<unsigned>(Context.getTypeSize(T))); > > break; > > > > Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original) > > +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Mon Jun 4 09:07:52 2018 > > @@ -2724,6 +2724,12 @@ static bool TypeInfoIsInStandardLibrary( > > case BuiltinType::OCLClkEvent: > > case BuiltinType::OCLQueue: > > case BuiltinType::OCLReserveID: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > return false; > > > > case BuiltinType::Dependent: > > > > Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) > > +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Mon Jun 4 09:07:52 2018 > > @@ -3756,6 +3756,11 @@ void Clang::ConstructJob(Compilation &C, > > Args.AddLastArg(CmdArgs, options::OPT_pedantic_errors); > > Args.AddLastArg(CmdArgs, options::OPT_w); > > > > + // Fixed point flags > > + if (Args.hasFlag(options::OPT_ffixed_point, options::OPT_fno_fixed_point, > > + /*Default=*/false)) > > + Args.AddLastArg(CmdArgs, options::OPT_ffixed_point); > > + > > // Handle -{std, ansi, trigraphs} -- take the last of -{std, ansi} > > // (-ansi is equivalent to -std=c89 or -std=c++98). > > // > > > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) > > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Jun 4 09:07:52 2018 > > @@ -2333,6 +2333,11 @@ static void ParseLangArgs(LangOptions &O > > Opts.ObjCExceptions = Args.hasArg(OPT_fobjc_exceptions); > > Opts.CXXExceptions = Args.hasArg(OPT_fcxx_exceptions); > > > > + // -ffixed-point > > + Opts.FixedPoint = > > + Args.hasFlag(OPT_ffixed_point, OPT_fno_fixed_point, > > /*Default=*/false) && > > + !Opts.CPlusPlus; > > + > > // Handle exception personalities > > Arg *A = Args.getLastArg(options::OPT_fsjlj_exceptions, > > options::OPT_fseh_exceptions, > > > > Modified: cfe/trunk/lib/Index/USRGeneration.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/USRGeneration.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Index/USRGeneration.cpp (original) > > +++ cfe/trunk/lib/Index/USRGeneration.cpp Mon Jun 4 09:07:52 2018 > > @@ -709,6 +709,12 @@ void USRGenerator::VisitType(QualType T) > > case BuiltinType::OCLQueue: > > case BuiltinType::OCLReserveID: > > case BuiltinType::OCLSampler: > > + case BuiltinType::ShortAccum: > > + case BuiltinType::Accum: > > + case BuiltinType::LongAccum: > > + case BuiltinType::UShortAccum: > > + case BuiltinType::UAccum: > > + case BuiltinType::ULongAccum: > > IgnoreResults = true; > > return; > > case BuiltinType::ObjCId: > > > > Modified: cfe/trunk/lib/Parse/ParseDecl.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) > > +++ cfe/trunk/lib/Parse/ParseDecl.cpp Mon Jun 4 09:07:52 2018 > > @@ -3580,6 +3580,16 @@ void Parser::ParseDeclarationSpecifiers( > > isInvalid = DS.SetTypeSpecType(DeclSpec::TST_float16, Loc, PrevSpec, > > DiagID, Policy); > > break; > > + case tok::kw__Accum: > > + if (!getLangOpts().FixedPoint) { > > + DiagID = diag::err_fixed_point_not_enabled; > > + PrevSpec = ""; // Not used by diagnostic > > + isInvalid = true; > > + } else { > > + isInvalid = DS.SetTypeSpecType(DeclSpec::TST_accum, Loc, PrevSpec, > > + DiagID, Policy); > > + } > > + break; > > case tok::kw___float128: > > isInvalid = DS.SetTypeSpecType(DeclSpec::TST_float128, Loc, PrevSpec, > > DiagID, Policy); > > @@ -4606,6 +4616,7 @@ bool Parser::isKnownToBeTypeSpecifier(co > > case tok::kw_half: > > case tok::kw_float: > > case tok::kw_double: > > + case tok::kw__Accum: > > case tok::kw__Float16: > > case tok::kw___float128: > > case tok::kw_bool: > > @@ -4683,6 +4694,7 @@ bool Parser::isTypeSpecifierQualifier() > > case tok::kw_half: > > case tok::kw_float: > > case tok::kw_double: > > + case tok::kw__Accum: > > case tok::kw__Float16: > > case tok::kw___float128: > > case tok::kw_bool: > > @@ -4841,6 +4853,7 @@ bool Parser::isDeclarationSpecifier(bool > > case tok::kw_half: > > case tok::kw_float: > > case tok::kw_double: > > + case tok::kw__Accum: > > case tok::kw__Float16: > > case tok::kw___float128: > > case tok::kw_bool: > > > > Modified: cfe/trunk/lib/Sema/DeclSpec.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Sema/DeclSpec.cpp (original) > > +++ cfe/trunk/lib/Sema/DeclSpec.cpp Mon Jun 4 09:07:52 2018 > > @@ -339,6 +339,7 @@ bool Declarator::isDeclarationOfFunction > > case TST_decimal32: > > case TST_decimal64: > > case TST_double: > > + case TST_Accum: > > case TST_Float16: > > case TST_float128: > > case TST_enum: > > @@ -510,6 +511,7 @@ const char *DeclSpec::getSpecifierName(D > > case DeclSpec::TST_half: return "half"; > > case DeclSpec::TST_float: return "float"; > > case DeclSpec::TST_double: return "double"; > > + case DeclSpec::TST_accum: return "_Accum"; > > case DeclSpec::TST_float16: return "_Float16"; > > case DeclSpec::TST_float128: return "__float128"; > > case DeclSpec::TST_bool: return Policy.Bool ? "bool" : "_Bool"; > > @@ -1100,12 +1102,13 @@ void DeclSpec::Finish(Sema &S, const Pri > > } > > } > > > > - // signed/unsigned are only valid with int/char/wchar_t. > > + // signed/unsigned are only valid with int/char/wchar_t/_Accum. > > if (TypeSpecSign != TSS_unspecified) { > > if (TypeSpecType == TST_unspecified) > > TypeSpecType = TST_int; // unsigned -> unsigned int, signed -> > > signed int. > > - else if (TypeSpecType != TST_int && TypeSpecType != TST_int128 && > > - TypeSpecType != TST_char && TypeSpecType != TST_wchar) { > > + else if (TypeSpecType != TST_int && TypeSpecType != TST_int128 && > > + TypeSpecType != TST_char && TypeSpecType != TST_wchar && > > + TypeSpecType != TST_accum) { > > S.Diag(TSSLoc, diag::err_invalid_sign_spec) > > << getSpecifierName((TST)TypeSpecType, Policy); > > // signed double -> double. > > @@ -1120,7 +1123,8 @@ void DeclSpec::Finish(Sema &S, const Pri > > case TSW_longlong: // long long int > > if (TypeSpecType == TST_unspecified) > > TypeSpecType = TST_int; // short -> short int, long long -> long > > long int. > > - else if (TypeSpecType != TST_int) { > > + else if (!(TypeSpecType == TST_int || > > + (TypeSpecType == TST_accum && TypeSpecWidth != > > TSW_longlong))) { > > S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) > > << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, > > Policy); > > TypeSpecType = TST_int; > > @@ -1130,7 +1134,8 @@ void DeclSpec::Finish(Sema &S, const Pri > > case TSW_long: // long double, long int > > if (TypeSpecType == TST_unspecified) > > TypeSpecType = TST_int; // long -> long int. > > - else if (TypeSpecType != TST_int && TypeSpecType != TST_double) { > > + else if (TypeSpecType != TST_int && TypeSpecType != TST_double && > > + TypeSpecType != TST_accum) { > > S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) > > << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, > > Policy); > > TypeSpecType = TST_int; > > > > Modified: cfe/trunk/lib/Sema/SemaTemplateVariadic.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateVariadic.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Sema/SemaTemplateVariadic.cpp (original) > > +++ cfe/trunk/lib/Sema/SemaTemplateVariadic.cpp Mon Jun 4 09:07:52 2018 > > @@ -830,6 +830,7 @@ bool Sema::containsUnexpandedParameterPa > > case TST_half: > > case TST_float: > > case TST_double: > > + case TST_Accum: > > case TST_Float16: > > case TST_float128: > > case TST_bool: > > > > Modified: cfe/trunk/lib/Sema/SemaType.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Sema/SemaType.cpp (original) > > +++ cfe/trunk/lib/Sema/SemaType.cpp Mon Jun 4 09:07:52 2018 > > @@ -1391,6 +1391,39 @@ static QualType ConvertDeclSpecToType(Ty > > } > > break; > > } > > + case DeclSpec::TST_accum: { > > + if (DS.getTypeSpecSign() != DeclSpec::TSS_unsigned) { > > + switch (DS.getTypeSpecWidth()) { > > + case DeclSpec::TSW_short: > > + Result = Context.ShortAccumTy; > > + break; > > + case DeclSpec::TSW_unspecified: > > + Result = Context.AccumTy; > > + break; > > + case DeclSpec::TSW_long: > > + Result = Context.LongAccumTy; > > + break; > > + case DeclSpec::TSW_longlong: > > + // Unreachable b/c this is caught in final analysis of the > > DeclSpec. > > + llvm_unreachable("Unable to specify long long as _Accum width"); > > + } > > + } else { > > + switch (DS.getTypeSpecWidth()) { > > + case DeclSpec::TSW_short: > > + Result = Context.UnsignedShortAccumTy; > > + break; > > + case DeclSpec::TSW_unspecified: > > + Result = Context.UnsignedAccumTy; > > + break; > > + case DeclSpec::TSW_long: > > + Result = Context.UnsignedLongAccumTy; > > + break; > > + case DeclSpec::TSW_longlong: > > + llvm_unreachable("Unable to specify long long as _Accum width"); > > + } > > + } > > + break; > > + } > > case DeclSpec::TST_int128: > > if (!S.Context.getTargetInfo().hasInt128Type()) > > S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) > > > > Modified: cfe/trunk/lib/Serialization/ASTCommon.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTCommon.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Serialization/ASTCommon.cpp (original) > > +++ cfe/trunk/lib/Serialization/ASTCommon.cpp Mon Jun 4 09:07:52 2018 > > @@ -91,6 +91,24 @@ serialization::TypeIdxFromBuiltin(const > > case BuiltinType::LongDouble: > > ID = PREDEF_TYPE_LONGDOUBLE_ID; > > break; > > + case BuiltinType::ShortAccum: > > + ID = PREDEF_TYPE_SHORT_ACCUM_ID; > > + break; > > + case BuiltinType::Accum: > > + ID = PREDEF_TYPE_ACCUM_ID; > > + break; > > + case BuiltinType::LongAccum: > > + ID = PREDEF_TYPE_LONG_ACCUM_ID; > > + break; > > + case BuiltinType::UShortAccum: > > + ID = PREDEF_TYPE_USHORT_ACCUM_ID; > > + break; > > + case BuiltinType::UAccum: > > + ID = PREDEF_TYPE_UACCUM_ID; > > + break; > > + case BuiltinType::ULongAccum: > > + ID = PREDEF_TYPE_ULONG_ACCUM_ID; > > + break; > > case BuiltinType::Float16: > > ID = PREDEF_TYPE_FLOAT16_ID; > > break; > > > > Modified: cfe/trunk/lib/Serialization/ASTReader.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) > > +++ cfe/trunk/lib/Serialization/ASTReader.cpp Mon Jun 4 09:07:52 2018 > > @@ -6819,6 +6819,24 @@ QualType ASTReader::GetType(TypeID ID) { > > case PREDEF_TYPE_LONGDOUBLE_ID: > > T = Context.LongDoubleTy; > > break; > > + case PREDEF_TYPE_SHORT_ACCUM_ID: > > + T = Context.ShortAccumTy; > > + break; > > + case PREDEF_TYPE_ACCUM_ID: > > + T = Context.AccumTy; > > + break; > > + case PREDEF_TYPE_LONG_ACCUM_ID: > > + T = Context.LongAccumTy; > > + break; > > + case PREDEF_TYPE_USHORT_ACCUM_ID: > > + T = Context.UnsignedShortAccumTy; > > + break; > > + case PREDEF_TYPE_UACCUM_ID: > > + T = Context.UnsignedAccumTy; > > + break; > > + case PREDEF_TYPE_ULONG_ACCUM_ID: > > + T = Context.UnsignedLongAccumTy; > > + break; > > case PREDEF_TYPE_FLOAT16_ID: > > T = Context.Float16Ty; > > break; > > > > Added: cfe/trunk/test/Frontend/fixed_point.c > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/fixed_point.c?rev=333923&view=auto > > ============================================================================== > > --- cfe/trunk/test/Frontend/fixed_point.c (added) > > +++ cfe/trunk/test/Frontend/fixed_point.c Mon Jun 4 09:07:52 2018 > > @@ -0,0 +1,57 @@ > > +// RUN: %clang_cc1 -x c -ffixed-point -ast-dump %s | FileCheck %s > > --strict-whitespace > > + > > +/* Various contexts where type _Accum can appear. */ > > + > > +// Primary fixed point types > > +signed short _Accum s_short_accum; > > +signed _Accum s_accum; > > +signed long _Accum s_long_accum; > > +unsigned short _Accum u_short_accum; > > +unsigned _Accum u_accum; > > +unsigned long _Accum u_long_accum; > > + > > +// Aliased fixed point types > > +short _Accum short_accum; > > +_Accum accum; > > +long _Accum long_accum; > > + > > +// CHECK: |-VarDecl {{.*}} s_short_accum 'short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} s_accum '_Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} s_long_accum 'long _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} u_short_accum 'unsigned short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} u_accum 'unsigned _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} u_long_accum 'unsigned long _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} short_accum 'short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} accum '_Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} long_accum 'long _Accum' > > + > > +#define MIX_TYPE_SPEC(SPEC, SIGN, SIZE, ID) \ > > + SPEC SIGN SIZE _Accum ID; \ > > + SIGN SPEC SIZE _Accum ID ## 2; \ > > + SIGN SIZE SPEC _Accum ID ## 3; \ > > + SIGN SIZE _Accum SPEC ID ## 4; > > + > > +/* Mixing fixed point types with other type specifiers */ > > + > > +#define MIX_VOLATILE(SIGN, SIZE, ID) MIX_TYPE_SPEC(volatile, SIGN, SIZE, > > ID) > > +#define MIX_ATOMIC(SIGN, SIZE, ID) MIX_TYPE_SPEC(_Atomic, SIGN, SIZE, ID) > > +#define MIX_CONST(SIGN, SIZE, ID) MIX_TYPE_SPEC(const, SIGN, SIZE, ID) > > + > > +MIX_VOLATILE(signed, short, vol_s_short_accum) > > +MIX_ATOMIC(signed, short, atm_s_short_accum) > > +MIX_CONST(signed, short, const_s_short_accum) > > + > > +// CHECK-NEXT: |-VarDecl {{.*}} vol_s_short_accum 'volatile short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} vol_s_short_accum2 'volatile short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} vol_s_short_accum3 'volatile short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} vol_s_short_accum4 'volatile short _Accum' > > + > > +// CHECK-NEXT: |-VarDecl {{.*}} atm_s_short_accum '_Atomic(short _Accum)' > > +// CHECK-NEXT: |-VarDecl {{.*}} atm_s_short_accum2 '_Atomic(short _Accum)' > > +// CHECK-NEXT: |-VarDecl {{.*}} atm_s_short_accum3 '_Atomic(short _Accum)' > > +// CHECK-NEXT: |-VarDecl {{.*}} atm_s_short_accum4 '_Atomic(short _Accum)' > > + > > +// CHECK-NEXT: |-VarDecl {{.*}} const_s_short_accum 'const short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} const_s_short_accum2 'const short _Accum' > > +// CHECK-NEXT: |-VarDecl {{.*}} const_s_short_accum3 'const short _Accum' > > +// CHECK-NEXT: `-VarDecl {{.*}} const_s_short_accum4 'const short _Accum' > > > > Added: cfe/trunk/test/Frontend/fixed_point_bit_widths.c > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/fixed_point_bit_widths.c?rev=333923&view=auto > > ============================================================================== > > --- cfe/trunk/test/Frontend/fixed_point_bit_widths.c (added) > > +++ cfe/trunk/test/Frontend/fixed_point_bit_widths.c Mon Jun 4 09:07:52 > > 2018 > > @@ -0,0 +1,46 @@ > > +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - %s | FileCheck %s > > +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - > > --target=x86_64-scei-ps4-ubuntu-fast %s | FileCheck %s > > +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=ppc64 %s | > > FileCheck %s > > +// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - > > --target=x86_64-scei-ps4-windows10pro-fast %s | FileCheck %s > > + > > +int size_SsA = sizeof(signed short _Accum); > > +int size_SA = sizeof(signed _Accum); > > +int size_SlA = sizeof(signed long _Accum); > > +int align_SsA = __alignof(signed short _Accum); > > +int align_SA = __alignof(signed _Accum); > > +int align_SlA = __alignof(signed long _Accum); > > + > > +int size_UsA = sizeof(unsigned short _Accum); > > +int size_UA = sizeof(unsigned _Accum); > > +int size_UlA = sizeof(unsigned long _Accum); > > +int align_UsA = __alignof(unsigned short _Accum); > > +int align_UA = __alignof(unsigned _Accum); > > +int align_UlA = __alignof(unsigned long _Accum); > > + > > +int size_sA = sizeof(short _Accum); > > +int size_A = sizeof(_Accum); > > +int size_lA = sizeof(long _Accum); > > +int align_sA = __alignof(short _Accum); > > +int align_A = __alignof(_Accum); > > +int align_lA = __alignof(long _Accum); > > + > > +// CHECK: @size_SsA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @size_SA = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @size_SlA = {{.*}}global i{{[0-9]+}} 8 > > +// CHECK-NEXT: @align_SsA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @align_SA = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @align_SlA = {{.*}}global i{{[0-9]+}} 8 > > + > > +// CHECK-NEXT: @size_UsA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @size_UA = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @size_UlA = {{.*}}global i{{[0-9]+}} 8 > > +// CHECK-NEXT: @align_UsA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @align_UA = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @align_UlA = {{.*}}global i{{[0-9]+}} 8 > > + > > +// CHECK-NEXT: @size_sA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @size_A = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @size_lA = {{.*}}global i{{[0-9]+}} 8 > > +// CHECK-NEXT: @align_sA = {{.*}}global i{{[0-9]+}} 2 > > +// CHECK-NEXT: @align_A = {{.*}}global i{{[0-9]+}} 4 > > +// CHECK-NEXT: @align_lA = {{.*}}global i{{[0-9]+}} 8 > > > > Added: cfe/trunk/test/Frontend/fixed_point_errors.c > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/fixed_point_errors.c?rev=333923&view=auto > > ============================================================================== > > --- cfe/trunk/test/Frontend/fixed_point_errors.c (added) > > +++ cfe/trunk/test/Frontend/fixed_point_errors.c Mon Jun 4 09:07:52 2018 > > @@ -0,0 +1,27 @@ > > +// RUN: %clang_cc1 -verify -ffixed-point %s > > + > > +/* We do not yet support long long. No recommended bit widths are given > > for this > > + * size. */ > > + > > +long long _Accum longlong_accum; // expected-error{{'long > > long _Accum' is invalid}} > > +unsigned long long _Accum u_longlong_accum; // expected-error{{'long > > long _Accum' is invalid}} > > + > > +/* Although _Complex types work with floating point numbers, the extension > > + * provides no info for complex fixed point types. */ > > + > > +_Complex signed short _Accum cmplx_s_short_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex signed _Accum cmplx_s_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex signed long _Accum cmplx_s_long_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex unsigned short _Accum cmplx_u_short_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex unsigned _Accum cmplx_u_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex unsigned long _Accum cmplx_u_long_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex short _Accum cmplx_s_short_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex _Accum cmplx_s_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > +_Complex long _Accum cmplx_s_long_accum; // > > expected-error{{'_Complex _Accum' is invalid}} > > + > > +/* Bad combinations */ > > +float _Accum f_accum; // expected-error{{cannot combine with previous > > 'float' declaration specifier}} > > +double _Accum d_accum; // expected-error{{cannot combine with previous > > 'double' declaration specifier}} > > +_Bool _Accum b_accum; // expected-error{{cannot combine with previous > > '_Bool' declaration specifier}} > > +char _Accum c_accum; // expected-error{{cannot combine with previous > > 'char' declaration specifier}} > > +int _Accum i_accum; // expected-error{{cannot combine with previous > > 'int' declaration specifier}} > > > > Added: cfe/trunk/test/Frontend/fixed_point_errors.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/fixed_point_errors.cpp?rev=333923&view=auto > > ============================================================================== > > --- cfe/trunk/test/Frontend/fixed_point_errors.cpp (added) > > +++ cfe/trunk/test/Frontend/fixed_point_errors.cpp Mon Jun 4 09:07:52 2018 > > @@ -0,0 +1,5 @@ > > +// RUN: %clang_cc1 -x c++ -ffixed-point %s -verify > > + > > +// Name namgling is not provided for fixed point types in c++ > > + > > +_Accum accum; // expected-error{{unknown type > > name '_Accum'}} > > > > Added: cfe/trunk/test/Frontend/fixed_point_not_enabled.c > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/fixed_point_not_enabled.c?rev=333923&view=auto > > ============================================================================== > > --- cfe/trunk/test/Frontend/fixed_point_not_enabled.c (added) > > +++ cfe/trunk/test/Frontend/fixed_point_not_enabled.c Mon Jun 4 09:07:52 > > 2018 > > @@ -0,0 +1,15 @@ > > +// RUN: %clang_cc1 -x c -verify %s > > + > > +// Primary fixed point types > > +signed short _Accum s_short_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +signed _Accum s_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +signed long _Accum s_long_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +unsigned short _Accum u_short_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +unsigned _Accum u_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +unsigned long _Accum u_long_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > + > > +// Aliased fixed point types > > +short _Accum short_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > +_Accum accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > + // expected-warning@-1{{type > > specifier missing, defaults to 'int'}} > > +long _Accum long_accum; // expected-error{{compile with > > '-ffixed-point' to enable fixed point types}} > > > > Modified: cfe/trunk/tools/libclang/CXType.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXType.cpp?rev=333923&r1=333922&r2=333923&view=diff > > ============================================================================== > > --- cfe/trunk/tools/libclang/CXType.cpp (original) > > +++ cfe/trunk/tools/libclang/CXType.cpp Mon Jun 4 09:07:52 2018 > > @@ -53,6 +53,12 @@ static CXTypeKind GetBuiltinTypeKind(con > > BTCASE(Float); > > BTCASE(Double); > > BTCASE(LongDouble); > > + BTCASE(ShortAccum); > > + BTCASE(Accum); > > + BTCASE(LongAccum); > > + BTCASE(UShortAccum); > > + BTCASE(UAccum); > > + BTCASE(ULongAccum); > > BTCASE(Float16); > > BTCASE(Float128); > > BTCASE(NullPtr); > > @@ -546,6 +552,12 @@ CXString clang_getTypeKindSpelling(enum > > TKIND(Float); > > TKIND(Double); > > TKIND(LongDouble); > > + TKIND(ShortAccum); > > + TKIND(Accum); > > + TKIND(LongAccum); > > + TKIND(UShortAccum); > > + TKIND(UAccum); > > + TKIND(ULongAccum); > > TKIND(Float16); > > TKIND(Float128); > > TKIND(NullPtr); > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r333923 - This diff includes changes for supporting the following types.
Leonard Chan via cfe-commits Mon, 04 Jun 2018 09:51:53 -0700
- r333923 - This diff includes changes for sup... Leonard Chan via cfe-commits
- Re: r333923 - This diff includes change... Roman Lebedev via cfe-commits
- Re: r333923 - This diff includes ch... Leonard Chan via cfe-commits