ychen added inline comments.

================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5423-5424
+template <typename TemplateLikeDecl, typename PrimaryDel,
+          bool IsMoreSpecialThanPrimaryCheck =
+              !std::is_same<TemplateLikeDecl, PrimaryDel>::value>
+static TemplateLikeDecl *
----------------
aaron.ballman wrote:
> Can't this be a local constexpr variable instead of an NTTP, or are there 
> reasons you want to allow callers to be able to override that?
Ah, I didn't think of that. The caller has no need to override this.


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5426-5427
+static TemplateLikeDecl *
+getMoreSpecialized(Sema &S, QualType T1, QualType T2, TemplateLikeDecl *P1,
+                   PrimaryDel *P2, TemplateDeductionInfo &Info) {
+  bool Better1 = isAtLeastAsSpecializedAs(S, T1, T2, P2, Info);
----------------
aaron.ballman wrote:
> Curiosity question -- can you make `P1` and `P2` be pointers to `const` 
> without many other viral changes to existing code?
`isAtLeastAsSpecializedAs` uses template instantiations which modify P1/P2.


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5184
 
-  // FIXME: This mimics what GCC implements, but doesn't match up with the
-  // proposed resolution for core issue 692. This area needs to be sorted out,
----------------
aaron.ballman wrote:
> ychen wrote:
> > ychen wrote:
> > > aaron.ballman wrote:
> > > > ychen wrote:
> > > > > aaron.ballman wrote:
> > > > > > aaron.ballman wrote:
> > > > > > > We tend not to use top-level const on locals in the project as a 
> > > > > > > matter of style.
> > > > > > Does GCC still implement it this way?
> > > > > > 
> > > > > > One concern I have is that this will be an ABI breaking change, and 
> > > > > > I'm not certain how disruptive it will be. If GCC already made that 
> > > > > > change, it may be reasonable for us to also break it without having 
> > > > > > to add ABI tags or something special. But if these changes diverge 
> > > > > > us from GCC, that may require some extra effort to mitigate.
> > > > > Unfortunately, GCC is still using the old/non-conforming behavior. 
> > > > > https://clang.godbolt.org/z/5K4916W71. What is the usual way to 
> > > > > mitigate this?
> > > > You would use the `ClangABI` enumeration to alter behavior between ABI 
> > > > versions: 
> > > > https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Basic/LangOptions.h#L174
> > > >  like done in: 
> > > > https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/DeclCXX.cpp#L929
> > > Looking at how `ClangABI` is currently used, it looks like it is for 
> > > low-level object layout ABI compatibility. For library/language ABI 
> > > compatibility, maybe we should not use `ClangABI`? Looking at 
> > > https://reviews.llvm.org/rG86a1b135f0c67a022ef628f092c6691892752876, I 
> > > guess the practice is just committed and see? If it breaks important or 
> > > many existing libraries, just revert or add compiler options?
> > > I guess the practice is just committed and see? If it breaks important or 
> > > many existing libraries, just revert or add compiler options?
> > 
> > I'm fairly optimistic considering `check-runtimes` passes. 
> > Looking at how ClangABI is currently used, it looks like it is for 
> > low-level object layout ABI compatibility. For library/language ABI 
> > compatibility, maybe we should not use ClangABI? 
> 
> I don't know that there's any specific guidance that we only use it for 
> object layout ABI compatibility; we have used it for behavior beyond layout 
> in the past: 
> https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDeclCXX.cpp#L9786
> 
> > I guess the practice is just committed and see? If it breaks important or 
> > many existing libraries, just revert or add compiler options?
> 
> Somewhat, yes. We aim for full ABI compatibility with GCC and consider ABI 
> differences to be bugs (generally speaking). If we break some important 
> existing library, that bug is critical to get fixed ASAP, but any ABI 
> different can potentially bite users.
> 
> I would say: if matching the old ABI requires convoluting the implementation 
> too much, we can skip it; otherwise, we should probably match GCC's ABI just 
> to avoid concerns.
> 
> CC @rsmith in case he has different opinions as code owner.
That makes sense to me. Added the ABI compatibility check.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128745

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

Reply via email to