erichkeane marked 14 inline comments as done.
erichkeane added a comment.

Incoming patch!



================
Comment at: include/clang/Basic/Attr.td:1809
       bool DuplicateArchitecture = false;
+      bool operator ==(const ParsedTargetAttr &Other) {
+        return DuplicateArchitecture == Other.DuplicateArchitecture &&
----------------
rsmith wrote:
> Our normal convention is to not put a space before `==` here.
Clang format seems to keep adding it interestingly enough.  Perhaps because it 
is a .td file?  Will remove.


================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:9317-9318
+def err_target_required_in_redecl :
+  Error<"function declaration is missing 'target' attribute in a "
+            "multiversioned function">;
+def note_multiversioning_caused_here :
----------------
rsmith wrote:
> There's some weird indentation hereabouts. Our normal convention is to put 
> the `Error<` on the `def` line, and start the diagnostic text as a 
> 2-space-indented string literal on the next line.
Thanks!  Clang-format really makes a mess of these too...


================
Comment at: lib/CodeGen/CodeGenModule.cpp:2144
+        if (getContext().hasSameType(CurFD->getType(), FD->getType())) {
+          StringRef MangledName = getMangledName(CurFD);
+          llvm::Constant *Func = GetGlobalValue(MangledName);
----------------
rsmith wrote:
> You should skip functions you've already seen somewhere around here; we don't 
> need to handle the same function multiple times.
Will the lookup call give me duplicates?  I need to check each at least once 
through this so that I can put them into "Options" so that I can emit them 
during the resolver.  

Otherwise, I'm not terribly sure what you mean.


================
Comment at: lib/Sema/SemaDecl.cpp:9326-9328
+static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl 
*OldFD,
+                                             const FunctionDecl *NewFD,
+                                             bool CausesMV) {
----------------
rsmith wrote:
> rsmith wrote:
> > Would it be possible to factor out the checks in `MergeFunctionDecl` that 
> > you're using here and reuse them directly?
> Maybe also check that the language linkage matches (`extern "C"` and `extern 
> "C++"` could imply different calling conventions, even though they don't on 
> any of our current targets).
I'd thought about that, but I'm being WAAY more strict, so I didn't see a good 
way to factor them out without making things pretty complicated.  Suggestions 
welcome :)


================
Comment at: lib/Sema/SemaDecl.cpp:9383-9384
+
+    QualType OldReturnType = OldType->getReturnType();
+    QualType NewReturnType = NewType->getReturnType();
+    if (OldReturnType != NewReturnType) {
----------------
rsmith wrote:
> This won't do the right thing for C++14 deduced return types. I'm not 
> completely sure what the right thing is, though -- clearly we need to deduce 
> the same return type in all versions of the function, but it's less clear 
> whether we should also require the return-type-as-written to match across 
> versions (as is required across redeclarations). Example:
> 
> ```
> VERSION_FOO auto f() { return 0; } // declared return type is `auto`, actual 
> return type is `int`
> VERSION_BAR auto f(); // will fail the current check, because the return type 
> `auto` doesn't match the prior return type `int`
> VERSION_BAR auto f() { return 0.0; } // should reject this because we deduced 
> a different return type than on the VERSION_FOO version?
> ```
> 
> Perhaps the simplest thing would be to simply disallow deduced return types 
> for multiversioned functions entirely for now?
I think disallowing 'auto' return for now is a good idea. This next patch is 
using isUndeducedType, which I think is sufficient, but if there is a better 
function I'm missing, please let me know.


https://reviews.llvm.org/D40819



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

Reply via email to