aaron.ballman added a reviewer: erichkeane.
aaron.ballman added a comment.

Thank you for this! I think it's heading in the right direction, but we're 
missing some significant test coverage for it. I had some suggestions for 
specific things we should be thinking about, but another useful test would be 
to modify an existing constexpr test to add a RUN line enabling ms extensions, 
and use a macro to switch between `constexpr` and `[[msvc::constexpr]]` based 
on those RUN lines. Basically, ensure that `[[msvc::constexpr]]` gives the same 
behavior (both in terms of evaluation and in terms of semantic checking) as 
`constexpr`. WDYT?



================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:4995-4997
+  case ParsedAttr::AT_MSConstexpr:
+    D->addAttr(::new (S.Context) MSConstexprAttr(S.Context, AL));
+    return;
----------------
This looks incorrect to me -- constexpr isn't a calling convention, so I think 
this code should be removed.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:7057-7058
+static void handleMSConstexprAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
+  if (auto *FD = dyn_cast<FunctionDecl>(D))
+    FD->setConstexprKind(ConstexprSpecKind::Constexpr);
+  D->addAttr(::new (S.Context) MSConstexprAttr(S.Context, AL));
----------------
We can use `cast` here because we know the declaration must have already been 
determined to be a function (from the subjects list in Attr.td).

That said, I think there's more semantic checking we want to do here. For 
example, can you use this attribute on a virtual function? What about a 
function already marked `constexpr`? Even more scary, what about a function 
marked `consteval`?

Also, I presume a `constexpr` function should be able to call an 
`[[msvc::constexpr]]` function and vice versa?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D134475

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to