https://github.com/zahiraam updated https://github.com/llvm/llvm-project/pull/70505
>From 340e3777509f70b5b300adcb181261e84247cf1a Mon Sep 17 00:00:00 2001 From: Ammarguellat <zahira.ammarguel...@intel.com> Date: Mon, 23 Oct 2023 12:51:21 -0700 Subject: [PATCH 1/5] Revert "[clang] Support fixed point types in C++ (#67750)" This reverts commit a3a7d6318027bb86e6614c022e77e0bd81aef6dc. When compiling with MSVC2022 in C++32 mode this is giving an error. Compiling this simple test case: t1.cpp: with -std=c++23 will give the following error: In file included from C:\Users\zahiraam\t1.cpp:1: c:\Program files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\include\vector:3329:16: error: compile with '-ffixed-point' to enable fixed point types 3329 | _Vbase _Accum = 0; | ^ c:\Program files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\include\vector:3329:23: error: expected unqualified-id 3329 | _Vbase _Accum = 0; | ^ Please full error in https://github.com/llvm/llvm-project/pull/67750#issuecomment-1775264907 --- clang/include/clang/Basic/TokenKinds.def | 6 +- clang/include/clang/Driver/Options.td | 2 +- clang/lib/AST/ItaniumMangle.cpp | 59 +------------------- clang/lib/Parse/ParseExpr.cpp | 3 - clang/lib/Parse/ParseExprCXX.cpp | 9 --- clang/lib/Parse/ParseTentative.cpp | 6 -- clang/test/CodeGenCXX/fixed-point-mangle.cpp | 45 --------------- clang/test/Frontend/fixed_point_errors.cpp | 24 ++++---- 8 files changed, 15 insertions(+), 139 deletions(-) delete mode 100644 clang/test/CodeGenCXX/fixed-point-mangle.cpp diff --git a/clang/include/clang/Basic/TokenKinds.def b/clang/include/clang/Basic/TokenKinds.def index bbae1200d376c0d..3ce317d318f9bb6 100644 --- a/clang/include/clang/Basic/TokenKinds.def +++ b/clang/include/clang/Basic/TokenKinds.def @@ -423,9 +423,9 @@ C23_KEYWORD(typeof , KEYGNU) C23_KEYWORD(typeof_unqual , 0) // ISO/IEC JTC1 SC22 WG14 N1169 Extension -KEYWORD(_Accum , KEYALL) -KEYWORD(_Fract , KEYALL) -KEYWORD(_Sat , KEYALL) +KEYWORD(_Accum , KEYNOCXX) +KEYWORD(_Fract , KEYNOCXX) +KEYWORD(_Sat , KEYNOCXX) // GNU Extensions (in impl-reserved namespace) KEYWORD(_Decimal32 , KEYALL) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index e63158fb0e5333a..ca883689b05c28a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2097,7 +2097,7 @@ defm fixed_point : BoolFOption<"fixed-point", LangOpts<"FixedPoint">, DefaultFalse, PosFlag<SetTrue, [], [ClangOption, CC1Option], "Enable">, NegFlag<SetFalse, [], [ClangOption], "Disable">, - BothFlags<[], [ClangOption], " fixed point types">>; + BothFlags<[], [ClangOption], " fixed point types">>, ShouldParseIf<!strconcat("!", cplusplus.KeyPath)>; defm cxx_static_destructors : BoolFOption<"c++-static-destructors", LangOpts<"RegisterStaticDestructors">, DefaultTrue, NegFlag<SetFalse, [], [ClangOption, CC1Option], diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 27e8cbf6dc3f41b..eafb121a8a4aa00 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3050,17 +3050,7 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { // ::= Di # char32_t // ::= Ds # char16_t // ::= Dn # std::nullptr_t (i.e., decltype(nullptr)) - // ::= [DS] DA # N1169 fixed-point [_Sat] T _Accum - // ::= [DS] DR # N1169 fixed-point [_Sat] T _Fract // ::= u <source-name> # vendor extended type - // - // <fixed-point-size> - // ::= s # short - // ::= t # unsigned short - // ::= i # plain - // ::= j # unsigned - // ::= l # long - // ::= m # unsigned long std::string type_name; // Normalize integer types as vendor extended types: // u<length>i<type size> @@ -3205,77 +3195,30 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { Out << "DF16_"; break; case BuiltinType::ShortAccum: - Out << "DAs"; - break; case BuiltinType::Accum: - Out << "DAi"; - break; case BuiltinType::LongAccum: - Out << "DAl"; - break; case BuiltinType::UShortAccum: - Out << "DAt"; - break; case BuiltinType::UAccum: - Out << "DAj"; - break; case BuiltinType::ULongAccum: - Out << "DAm"; - break; case BuiltinType::ShortFract: - Out << "DRs"; - break; case BuiltinType::Fract: - Out << "DRi"; - break; case BuiltinType::LongFract: - Out << "DRl"; - break; case BuiltinType::UShortFract: - Out << "DRt"; - break; case BuiltinType::UFract: - Out << "DRj"; - break; case BuiltinType::ULongFract: - Out << "DRm"; - break; case BuiltinType::SatShortAccum: - Out << "DSDAs"; - break; case BuiltinType::SatAccum: - Out << "DSDAi"; - break; case BuiltinType::SatLongAccum: - Out << "DSDAl"; - break; case BuiltinType::SatUShortAccum: - Out << "DSDAt"; - break; case BuiltinType::SatUAccum: - Out << "DSDAj"; - break; case BuiltinType::SatULongAccum: - Out << "DSDAm"; - break; case BuiltinType::SatShortFract: - Out << "DSDRs"; - break; case BuiltinType::SatFract: - Out << "DSDRi"; - break; case BuiltinType::SatLongFract: - Out << "DSDRl"; - break; case BuiltinType::SatUShortFract: - Out << "DSDRt"; - break; case BuiltinType::SatUFract: - Out << "DSDRj"; - break; case BuiltinType::SatULongFract: - Out << "DSDRm"; - break; + llvm_unreachable("Fixed point types are disabled for c++"); case BuiltinType::Half: Out << "Dh"; break; diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 4d267c915ff2478..dd2d9400b7747e3 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -1574,9 +1574,6 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind, case tok::kw_typename: case tok::kw_typeof: case tok::kw___vector: - case tok::kw__Accum: - case tok::kw__Fract: - case tok::kw__Sat: #define GENERIC_IMAGE_TYPE(ImgType, Id) case tok::kw_##ImgType##_t: #include "clang/Basic/OpenCLImageTypes.def" { diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 79db094e098f8e6..99b4931004546c1 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -2354,15 +2354,6 @@ void Parser::ParseCXXSimpleTypeSpecifier(DeclSpec &DS) { case tok::kw_bool: DS.SetTypeSpecType(DeclSpec::TST_bool, Loc, PrevSpec, DiagID, Policy); break; - case tok::kw__Accum: - DS.SetTypeSpecType(DeclSpec::TST_accum, Loc, PrevSpec, DiagID, Policy); - break; - case tok::kw__Fract: - DS.SetTypeSpecType(DeclSpec::TST_fract, Loc, PrevSpec, DiagID, Policy); - break; - case tok::kw__Sat: - DS.SetTypeSpecSat(Loc, PrevSpec, DiagID); - break; #define GENERIC_IMAGE_TYPE(ImgType, Id) \ case tok::kw_##ImgType##_t: \ DS.SetTypeSpecType(DeclSpec::TST_##ImgType##_t, Loc, PrevSpec, DiagID, \ diff --git a/clang/lib/Parse/ParseTentative.cpp b/clang/lib/Parse/ParseTentative.cpp index 8b653b1c4f8eaf4..28decc4fc43f9b8 100644 --- a/clang/lib/Parse/ParseTentative.cpp +++ b/clang/lib/Parse/ParseTentative.cpp @@ -1775,9 +1775,6 @@ Parser::isCXXDeclarationSpecifier(ImplicitTypenameContext AllowImplicitTypename, case tok::kw___ibm128: case tok::kw_void: case tok::annot_decltype: - case tok::kw__Accum: - case tok::kw__Fract: - case tok::kw__Sat: #define GENERIC_IMAGE_TYPE(ImgType, Id) case tok::kw_##ImgType##_t: #include "clang/Basic/OpenCLImageTypes.def" if (NextToken().is(tok::l_paren)) @@ -1897,9 +1894,6 @@ bool Parser::isCXXDeclarationSpecifierAType() { case tok::kw_void: case tok::kw___unknown_anytype: case tok::kw___auto_type: - case tok::kw__Accum: - case tok::kw__Fract: - case tok::kw__Sat: #define GENERIC_IMAGE_TYPE(ImgType, Id) case tok::kw_##ImgType##_t: #include "clang/Basic/OpenCLImageTypes.def" return true; diff --git a/clang/test/CodeGenCXX/fixed-point-mangle.cpp b/clang/test/CodeGenCXX/fixed-point-mangle.cpp deleted file mode 100644 index 103990a61316a9c..000000000000000 --- a/clang/test/CodeGenCXX/fixed-point-mangle.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// RUN: %clang_cc1 -ffixed-point -S -emit-llvm %s -o - -triple=x86_64-unknown-linux-gnu | FileCheck %s - -// Primary fixed point types -void func(signed short _Accum){} // CHECK: @_Z4funcDAs -void func(signed _Accum){} // CHECK: @_Z4funcDAi -void func(signed long _Accum){} // CHECK: @_Z4funcDAl -void func(unsigned short _Accum){} // CHECK: @_Z4funcDAt -void func(unsigned _Accum){} // CHECK: @_Z4funcDAj -void func(unsigned long _Accum){} // CHECK: @_Z4funcDAm -void func(signed short _Fract){} // CHECK: @_Z4funcDRs -void func(signed _Fract){} // CHECK: @_Z4funcDRi -void func(signed long _Fract){} // CHECK: @_Z4funcDRl -void func(unsigned short _Fract){} // CHECK: @_Z4funcDRt -void func(unsigned _Fract){} // CHECK: @_Z4funcDRj -void func(unsigned long _Fract){} // CHECK: @_Z4funcDRm - -// Aliased -void func2(short _Accum){} // CHECK: @_Z5func2DAs -void func2(_Accum){} // CHECK: @_Z5func2DAi -void func2(long _Accum){} // CHECK: @_Z5func2DAl -void func2(short _Fract){} // CHECK: @_Z5func2DRs -void func2(_Fract){} // CHECK: @_Z5func2DRi -void func2(long _Fract){} // CHECK: @_Z5func2DRl - -// Primary saturated -void func(_Sat signed short _Accum){} // CHECK: @_Z4funcDSDAs -void func(_Sat signed _Accum){} // CHECK: @_Z4funcDSDAi -void func(_Sat signed long _Accum){} // CHECK: @_Z4funcDSDAl -void func(_Sat unsigned short _Accum){} // CHECK: @_Z4funcDSDAt -void func(_Sat unsigned _Accum){} // CHECK: @_Z4funcDSDAj -void func(_Sat unsigned long _Accum){} // CHECK: @_Z4funcDSDAm -void func(_Sat signed short _Fract){} // CHECK: @_Z4funcDSDRs -void func(_Sat signed _Fract){} // CHECK: @_Z4funcDSDRi -void func(_Sat signed long _Fract){} // CHECK: @_Z4funcDSDRl -void func(_Sat unsigned short _Fract){} // CHECK: @_Z4funcDSDRt -void func(_Sat unsigned _Fract){} // CHECK: @_Z4funcDSDRj -void func(_Sat unsigned long _Fract){} // CHECK: @_Z4funcDSDRm - -// Aliased saturated -void func2(_Sat short _Accum){} // CHECK: @_Z5func2DSDAs -void func2(_Sat _Accum){} // CHECK: @_Z5func2DSDAi -void func2(_Sat long _Accum){} // CHECK: @_Z5func2DSDAl -void func2(_Sat short _Fract){} // CHECK: @_Z5func2DSDRs -void func2(_Sat _Fract){} // CHECK: @_Z5func2DSDRi -void func2(_Sat long _Fract){} // CHECK: @_Z5func2DSDRl diff --git a/clang/test/Frontend/fixed_point_errors.cpp b/clang/test/Frontend/fixed_point_errors.cpp index 2264622a2e8c870..cdd90ceb7548f94 100644 --- a/clang/test/Frontend/fixed_point_errors.cpp +++ b/clang/test/Frontend/fixed_point_errors.cpp @@ -1,18 +1,14 @@ -// RUN: %clang_cc1 -x c++ %s -verify -DWITHOUT_FIXED_POINT -// RUN: %clang_cc1 -x c++ %s -verify -ffixed-point +// RUN: %clang_cc1 -x c++ %s -verify +// RUN: %clang_cc1 -x c++ -ffixed-point %s -verify -#ifdef WITHOUT_FIXED_POINT -_Accum accum; // expected-error{{compile with '-ffixed-point' to enable fixed point types}} - // expected-error@-1{{a type specifier is required for all declarations}} -_Fract fract; // expected-error{{compile with '-ffixed-point' to enable fixed point types}} - // expected-error@-1{{a type specifier is required for all declarations}} -_Sat _Accum sat_accum; // expected-error 2{{compile with '-ffixed-point' to enable fixed point types}} - // expected-error@-1{{a type specifier is required for all declarations}} -#endif +// Name namgling is not provided for fixed point types in c++ + +_Accum accum; // expected-error{{unknown type name '_Accum'}} +_Fract fract; // expected-error{{unknown type name '_Fract'}} +_Sat _Accum sat_accum; // expected-error{{unknown type name '_Sat'}} + // expected-error@-1{{expected ';' after top level declarator}} int accum_int = 10k; // expected-error{{invalid suffix 'k' on integer constant}} int fract_int = 10r; // expected-error{{invalid suffix 'r' on integer constant}} -#ifdef WITHOUT_FIXED_POINT -float accum_flt = 0.0k; // expected-error{{invalid suffix 'k' on floating constant}} -float fract_flt = 0.0r; // expected-error{{invalid suffix 'r' on floating constant}} -#endif +float accum_flt = 10.0k; // expected-error{{invalid suffix 'k' on floating constant}} +float fract_flt = 10.0r; // expected-error{{invalid suffix 'r' on floating constant}} >From a9268af3c21a6dbb6bc70d607642cc698dbfc678 Mon Sep 17 00:00:00 2001 From: Ammarguellat <zahira.ammarguel...@intel.com> Date: Mon, 23 Oct 2023 14:14:42 -0700 Subject: [PATCH 2/5] Fix format. --- clang/lib/AST/ItaniumMangle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index eafb121a8a4aa00..c3be3366e66731c 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3046,7 +3046,8 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { // UNSUPPORTED: ::= De # IEEE 754r decimal floating point (128 bits) // UNSUPPORTED: ::= Df # IEEE 754r decimal floating point (32 bits) // ::= Dh # IEEE 754r half-precision floating point (16 bits) - // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits); + // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point + // type _FloatN (N bits); // ::= Di # char32_t // ::= Ds # char16_t // ::= Dn # std::nullptr_t (i.e., decltype(nullptr)) >From 14a8ea1566c6a2d172aafdf71fbb258609fa5014 Mon Sep 17 00:00:00 2001 From: Ammarguellat <zahira.ammarguel...@intel.com> Date: Tue, 24 Oct 2023 05:21:58 -0700 Subject: [PATCH 3/5] Fix format. --- clang/lib/AST/ItaniumMangle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index eafb121a8a4aa00..c3be3366e66731c 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3046,7 +3046,8 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { // UNSUPPORTED: ::= De # IEEE 754r decimal floating point (128 bits) // UNSUPPORTED: ::= Df # IEEE 754r decimal floating point (32 bits) // ::= Dh # IEEE 754r half-precision floating point (16 bits) - // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits); + // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point + // type _FloatN (N bits); // ::= Di # char32_t // ::= Ds # char16_t // ::= Dn # std::nullptr_t (i.e., decltype(nullptr)) >From 0a57f9148a17571c545c2f4a45b0da8e91f1d776 Mon Sep 17 00:00:00 2001 From: Ammarguellat <zahira.ammarguel...@intel.com> Date: Fri, 27 Oct 2023 13:37:59 -0700 Subject: [PATCH 4/5] Testin new PR. --- clang/docs/ReleaseNotes.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 42f20b9a9bb0410..6e32c905dd0e108 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -211,6 +211,10 @@ New Compiler Flags the preprocessed text to the output. This can greatly reduce the size of the preprocessed output, which can be helpful when trying to reduce a test case. +* ``-fcx-limited-range`` states that range reduction is disabled for complex + division. No checks for ``NaN + I*NaN`` is performed for the result of complex + multiplication or division. + Deprecated Compiler Flags ------------------------- >From 2584f2b55ae61c3c4397c80f2046be9b514a81cc Mon Sep 17 00:00:00 2001 From: Zahira Ammarguellat <zahira.ammarguel...@intel.com> Date: Thu, 2 Nov 2023 12:01:26 -0700 Subject: [PATCH 5/5] Testing. --- clang/lib/CodeGen/CGExprScalar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index c25ddeff9adc3a7..a610b409ee9aeb8 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -3234,6 +3234,7 @@ Value *ScalarExprEmitter::EmitPromoted(const Expr *E, QualType PromotionType) { BinOpInfo ScalarExprEmitter::EmitBinOps(const BinaryOperator *E, QualType PromotionType) { + // Testing only. TestAndClearIgnoreResultAssign(); BinOpInfo Result; Result.LHS = CGF.EmitPromotedScalarExpr(E->getLHS(), PromotionType); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits