[PATCH] D110482: [clang] Implement if consteval (P1938)

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 28 10:45:18 PDT 2021


erichkeane added a comment.

A handful of 'nits' (at best), and a wish for the `if consteval` vs `consteval if` to be consistent, but otherwise LGTM.  Hopefully @aaron.ballman  can come and do a final pass.



================
Comment at: clang/include/clang/AST/Stmt.h:164
 
-    /// True if this if statement is a constexpr if.
-    unsigned IsConstexpr : 1;
+    /// Whether this is an if constexpr if or a consteval if or neither.
+    IfStatementKind Kind : 3;
----------------



================
Comment at: clang/include/clang/AST/Stmt.h:2122
   child_range children() {
-    return child_range(getTrailingObjects<Stmt *>(),
+    // We always store a condition, but there is none for if consteval
+    // statements, so skip it.
----------------
Not sure if `consteval if` follows the same naming convention as `constexpr if`?


================
Comment at: clang/include/clang/AST/Stmt.h:2131
   const_child_range children() const {
-    return const_child_range(getTrailingObjects<Stmt *>(),
-                             getTrailingObjects<Stmt *>() +
-                                 numTrailingObjects(OverloadToken<Stmt *>()));
+    // We always store a condition, but there is none for if consteval
+    // statements, so skip it.
----------------
Same change here.


================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:1505
 
+def warn_if_consteval_always_true : Warning<
+  "if consteval is always true in an %select{unevaluated|immediate}0 context">,  InGroup<DiagGroup<"redundant-if-consteval">>;
----------------
This seems like it needs a newline somewhere/clang-formatting.


================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:1505
 
+def warn_if_consteval_always_true : Warning<
+  "if consteval is always true in an %select{unevaluated|immediate}0 context">,  InGroup<DiagGroup<"redundant-if-consteval">>;
----------------
erichkeane wrote:
> This seems like it needs a newline somewhere/clang-formatting.



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:1506
+def warn_if_consteval_always_true : Warning<
+  "if consteval is always true in an %select{unevaluated|immediate}0 context">,  InGroup<DiagGroup<"redundant-if-consteval">>;
+
----------------



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:5945
+def note_protected_by_if_consteval : Note<
+  "jump enters controlled statement of if consteval">;
 def note_protected_by_if_available : Note<
----------------
I see an inconsistency in a couple of places here between `if consteval` or `consteval if`.  I THINK it is the latter, so I'm suggesting changes for that.  I see the DiagnosticParseKinds seem to use the `consteval if` spelling, so I feel like perhaps I'm not wrong?


================
Comment at: clang/include/clang/Basic/Specifiers.h:32
   /// Define the kind of constexpr specifier.
-  enum class ConstexprSpecKind { Unspecified, Constexpr, Consteval, Constinit };
+  enum class ConstexprSpecKind : unsigned {
+    Unspecified,
----------------
I'd prefer just reverting the changes to ConstexprSpecKind to the 'before', since you're not using it anymore.


================
Comment at: clang/include/clang/Basic/Specifiers.h:40
+  /// In an if statement, this denotes whether the the statement is
+  /// an if constexpr or if consteval statement.
+  enum class IfStatementKind : unsigned {
----------------



================
Comment at: clang/include/clang/Basic/Specifiers.h:45
+    Consteval,
+    ConstevalNegated
+  };
----------------
Reads nicer to me maybe?  IDK, feel free to ignore.


================
Comment at: clang/include/clang/Sema/Sema.h:1223
+    /// occurs in an immediate function context - either a consteval function
+    /// or an 'if consteval' function.
+    ImmediateFunctionContext,
----------------



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110482/new/

https://reviews.llvm.org/D110482



More information about the cfe-commits mailing list