hfinkel added inline comments.

================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:5396
+  IdentifierInfo &VariangtII = Context.Idents.get(
+      (D.getIdentifier()->getName() + "." + DVScope.NameSuffix).str());
+  D.SetIdentifier(&VariangtII, D.getBeginLoc());
----------------
jdoerfert wrote:
> hfinkel wrote:
> > Is there any way in which this name might become visible to users (e.g., in 
> > error messages)?
> Yes, I think so. One way to trigger it would be to define the same function 
> in the same `omp begin declare variant scope` (or two with the same context). 
> I haven't verified this though.
> TBH, I'm unsure how bad this actually is in the short term. The original name 
> is still a at the beginning. We should obviously make sure the error message 
> is appropriate eventually, e.g., it de-mangles the name.
I think that we have to consider diagnostic quality as a first-class citizen. 
There are a few different ways that we might approach this. A minimal diff from 
what you have might be:

  1. Replace the "." above with ".ompvariant."
  2. Add logic to FunctionDecl::getNameForDiagnostic (or 
NamedDecl::getNameForDiagnostic) that recognizes that magic string in the name 
and alters the printing to do something intelligible for the user with the name.

(I think that (1) is a good idea anyway).

Another way would be to add some first-class property to the function and then 
leave the mangling to CodeGen. Are we mangling these in Sema in other places 
too?




Also, these can have external linkage, right?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:5487
+
+    VMIs.erase(VMIs.begin() + BestIdx);
+    Exprs.erase(Exprs.begin() + BestIdx);
----------------
jdoerfert wrote:
> hfinkel wrote:
> > Why is the ordering here useful? Don't you collect all of the variant 
> > clauses from all of the declarations? Can't there be duplicates? (and does 
> > the relative order need always be the same?) Are we effectively supporting 
> > here, as an extension, cases where not all of the declarations have the 
> > same set of variants declared (it loos like we are because there's no break 
> > in the `while (CalleeFnDecl)` loop, but this makes me wonder if that would 
> > still have an odd behavior.
> > Why is the ordering here useful?
> 
> I don't think it is ordered. We have a conceptual set and BestIdx determines 
> the which of the set is the best. All others are equal.
> 
> > Don't you collect all of the variant clauses from all of the declarations? 
> 
> Yes.
> 
> > Can't there be duplicates? (and does the relative order need always be the 
> > same?)
> 
> Yes (and no).  `getBestVariantMatchForContext` should determine the best 
> regardless of duplicates, we might just try it multiple times if we didn't 
> manage to create a call.
> 
> > Are we effectively supporting here, as an extension, cases where not all of 
> > the declarations have the same set of variants declared (it loos like we 
> > are because there's no break in the while (CalleeFnDecl) loop, but this 
> > makes me wonder if that would still have an odd behavior.
> 
> We are supporting that. All declarations are scanned and all variants are 
> collected. What odd behavior do you refer to?
> 
Makes sense, thanks.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75779



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

Reply via email to