Re: [clang] 596f76a - Revert "[C2x] reject type definitions in offsetof"

2023-01-16 Thread Roman Lebedev via cfe-commits
Reminder to please always mention the reason for the revert/recommit
in the commit message.

On Mon, Jan 16, 2023 at 11:53 AM Yingchi Long via cfe-commits
 wrote:
>
>
> Author: Yingchi Long
> Date: 2023-01-16T16:52:50+08:00
> New Revision: 596f76a799c933927eec4d8ac8a83c44efff9854
>
> URL: 
> https://github.com/llvm/llvm-project/commit/596f76a799c933927eec4d8ac8a83c44efff9854
> DIFF: 
> https://github.com/llvm/llvm-project/commit/596f76a799c933927eec4d8ac8a83c44efff9854.diff
>
> LOG: Revert "[C2x] reject type definitions in offsetof"
>
> This reverts commit e327b52766ed497e4779f4e652b9ad237dfda8e6.
>
> Added:
>
>
> Modified:
> clang/docs/ReleaseNotes.rst
> clang/include/clang/Basic/DiagnosticSemaKinds.td
> clang/include/clang/Parse/Parser.h
> clang/include/clang/Parse/RAIIObjectsForParser.h
> clang/include/clang/Sema/Sema.h
> clang/lib/Parse/ParseDecl.cpp
> clang/lib/Parse/ParseDeclCXX.cpp
> clang/lib/Parse/ParseExpr.cpp
> clang/lib/Sema/SemaDecl.cpp
> clang/lib/Sema/SemaDeclCXX.cpp
> clang/lib/Sema/SemaTemplate.cpp
> clang/test/C/drs/dr4xx.c
> clang/test/Parser/declarators.c
> clang/test/SemaCXX/offsetof.cpp
>
> Removed:
> clang/test/C/C2x/n2350.c
>
>
> 
> diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
> index a75bc1df2d7c9..09133f967f01f 100644
> --- a/clang/docs/ReleaseNotes.rst
> +++ b/clang/docs/ReleaseNotes.rst
> @@ -670,9 +670,6 @@ C2x Feature Support
>va_start(list); // Invalid in C17 and earlier, valid in C2x and later.
>va_end(list);
>  }
> -
> -- Reject type definitions in the ``type`` argument of ``__builtin_offsetof``
> -  according to `WG14 N2350 
> `_.
>
>  C++ Language Changes in Clang
>  -
>
> diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
> b/clang/include/clang/Basic/DiagnosticSemaKinds.td
> index 862ac845bda45..02afb098b2395 100644
> --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
> +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
> @@ -1650,8 +1650,6 @@ def err_type_defined_in_condition : Error<
>"%0 cannot be defined in a condition">;
>  def err_type_defined_in_enum : Error<
>"%0 cannot be defined in an enumeration">;
> -def err_type_defined_in_offsetof : Error<
> -  "%0 cannot be defined in '%select{__builtin_offsetof|offsetof}1'">;
>
>  def note_pure_virtual_function : Note<
>"unimplemented pure virtual method %0 in %1">;
>
> diff  --git a/clang/include/clang/Parse/Parser.h 
> b/clang/include/clang/Parse/Parser.h
> index 6f9581b9ea1fc..7a33532eec14e 100644
> --- a/clang/include/clang/Parse/Parser.h
> +++ b/clang/include/clang/Parse/Parser.h
> @@ -62,7 +62,6 @@ class Parser : public CodeCompletionHandler {
>friend class ColonProtectionRAIIObject;
>friend class ParsingOpenMPDirectiveRAII;
>friend class InMessageExpressionRAIIObject;
> -  friend class OffsetOfStateRAIIObject;
>friend class PoisonSEHIdentifiersRAIIObject;
>friend class ObjCDeclContextSwitch;
>friend class ParenBraceBracketBalancer;
> @@ -249,8 +248,6 @@ class Parser : public CodeCompletionHandler {
>/// function call.
>bool CalledSignatureHelp = false;
>
> -  Sema::OffsetOfKind OffsetOfState = Sema::OffsetOfKind::OOK_Outside;
> -
>/// The "depth" of the template parameters currently being parsed.
>unsigned TemplateParameterDepth;
>
>
> diff  --git a/clang/include/clang/Parse/RAIIObjectsForParser.h 
> b/clang/include/clang/Parse/RAIIObjectsForParser.h
> index cb525c9d0edd6..5ae609e600734 100644
> --- a/clang/include/clang/Parse/RAIIObjectsForParser.h
> +++ b/clang/include/clang/Parse/RAIIObjectsForParser.h
> @@ -341,19 +341,6 @@ namespace clang {
>  }
>};
>
> -  class OffsetOfStateRAIIObject {
> -Sema::OffsetOfKind 
> -Sema::OffsetOfKind OldValue;
> -
> -  public:
> -OffsetOfStateRAIIObject(Parser , Sema::OffsetOfKind Value)
> -: OffsetOfState(P.OffsetOfState), OldValue(P.OffsetOfState) {
> -  OffsetOfState = Value;
> -}
> -
> -~OffsetOfStateRAIIObject() { OffsetOfState = OldValue; }
> -  };
> -
>/// RAII object that makes sure paren/bracket/brace count is correct
>/// after declaration/statement parsing, even when there's a parsing error.
>class ParenBraceBracketBalancer {
>
> diff  --git a/clang/include/clang/Sema/Sema.h 
> b/clang/include/clang/Sema/Sema.h
> index 35e319879a98d..30c5ea608f7a0 100644
> --- a/clang/include/clang/Sema/Sema.h
> +++ b/clang/include/clang/Sema/Sema.h
> @@ -3304,16 +3304,6 @@ class Sema final {
>  TUK_Friend   // Friend declaration:  'friend struct foo;'
>};
>
> -  enum OffsetOfKind {
> -// Not parsing a type within __builtin_offsetof.
> -OOK_Outside,
> -// Parsing a type within __builtin_offsetof.
> -OOK_Builtin,
> -// Parsing a type within macro "offsetof", 

[clang] 596f76a - Revert "[C2x] reject type definitions in offsetof"

2023-01-16 Thread Yingchi Long via cfe-commits

Author: Yingchi Long
Date: 2023-01-16T16:52:50+08:00
New Revision: 596f76a799c933927eec4d8ac8a83c44efff9854

URL: 
https://github.com/llvm/llvm-project/commit/596f76a799c933927eec4d8ac8a83c44efff9854
DIFF: 
https://github.com/llvm/llvm-project/commit/596f76a799c933927eec4d8ac8a83c44efff9854.diff

LOG: Revert "[C2x] reject type definitions in offsetof"

This reverts commit e327b52766ed497e4779f4e652b9ad237dfda8e6.

Added: 


Modified: 
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Parse/Parser.h
clang/include/clang/Parse/RAIIObjectsForParser.h
clang/include/clang/Sema/Sema.h
clang/lib/Parse/ParseDecl.cpp
clang/lib/Parse/ParseDeclCXX.cpp
clang/lib/Parse/ParseExpr.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaDeclCXX.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/test/C/drs/dr4xx.c
clang/test/Parser/declarators.c
clang/test/SemaCXX/offsetof.cpp

Removed: 
clang/test/C/C2x/n2350.c



diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index a75bc1df2d7c9..09133f967f01f 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -670,9 +670,6 @@ C2x Feature Support
   va_start(list); // Invalid in C17 and earlier, valid in C2x and later.
   va_end(list);
 }
-
-- Reject type definitions in the ``type`` argument of ``__builtin_offsetof`` 
-  according to `WG14 N2350 
`_.
 
 C++ Language Changes in Clang
 -

diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 862ac845bda45..02afb098b2395 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -1650,8 +1650,6 @@ def err_type_defined_in_condition : Error<
   "%0 cannot be defined in a condition">;
 def err_type_defined_in_enum : Error<
   "%0 cannot be defined in an enumeration">;
-def err_type_defined_in_offsetof : Error<
-  "%0 cannot be defined in '%select{__builtin_offsetof|offsetof}1'">;
 
 def note_pure_virtual_function : Note<
   "unimplemented pure virtual method %0 in %1">;

diff  --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index 6f9581b9ea1fc..7a33532eec14e 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -62,7 +62,6 @@ class Parser : public CodeCompletionHandler {
   friend class ColonProtectionRAIIObject;
   friend class ParsingOpenMPDirectiveRAII;
   friend class InMessageExpressionRAIIObject;
-  friend class OffsetOfStateRAIIObject;
   friend class PoisonSEHIdentifiersRAIIObject;
   friend class ObjCDeclContextSwitch;
   friend class ParenBraceBracketBalancer;
@@ -249,8 +248,6 @@ class Parser : public CodeCompletionHandler {
   /// function call.
   bool CalledSignatureHelp = false;
 
-  Sema::OffsetOfKind OffsetOfState = Sema::OffsetOfKind::OOK_Outside;
-
   /// The "depth" of the template parameters currently being parsed.
   unsigned TemplateParameterDepth;
 

diff  --git a/clang/include/clang/Parse/RAIIObjectsForParser.h 
b/clang/include/clang/Parse/RAIIObjectsForParser.h
index cb525c9d0edd6..5ae609e600734 100644
--- a/clang/include/clang/Parse/RAIIObjectsForParser.h
+++ b/clang/include/clang/Parse/RAIIObjectsForParser.h
@@ -341,19 +341,6 @@ namespace clang {
 }
   };
 
-  class OffsetOfStateRAIIObject {
-Sema::OffsetOfKind 
-Sema::OffsetOfKind OldValue;
-
-  public:
-OffsetOfStateRAIIObject(Parser , Sema::OffsetOfKind Value)
-: OffsetOfState(P.OffsetOfState), OldValue(P.OffsetOfState) {
-  OffsetOfState = Value;
-}
-
-~OffsetOfStateRAIIObject() { OffsetOfState = OldValue; }
-  };
-
   /// RAII object that makes sure paren/bracket/brace count is correct
   /// after declaration/statement parsing, even when there's a parsing error.
   class ParenBraceBracketBalancer {

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 35e319879a98d..30c5ea608f7a0 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -3304,16 +3304,6 @@ class Sema final {
 TUK_Friend   // Friend declaration:  'friend struct foo;'
   };
 
-  enum OffsetOfKind {
-// Not parsing a type within __builtin_offsetof.
-OOK_Outside,
-// Parsing a type within __builtin_offsetof.
-OOK_Builtin,
-// Parsing a type within macro "offsetof", defined in __buitin_offsetof
-// To improve our diagnostic message.
-OOK_Macro,
-  };
-
   Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
  SourceLocation KWLoc, CXXScopeSpec , IdentifierInfo *Name,
  SourceLocation NameLoc, const ParsedAttributesView ,
@@ -3322,7 +3312,7 @@ class Sema final {
  bool , SourceLocation