rjmccall added a comment. This looks generally like what I'm looking for, thanks! Some comments.
================ Comment at: lib/CodeGen/CodeGenModule.cpp:1129 @@ +1128,3 @@ + if (GV && GV != GetGlobalValue(getMangledName(D))) + continue; + ---------------- This is a pretty expensive extra check, and I think it only kicks in on invalid code where we've got multiple definitions of a function. Can we just eliminate it? It's not really a problem to emit the second function definition as long as we're not trying to emit it into the same llvm::Function. ================ Comment at: lib/CodeGen/CodeGenModule.cpp:1573 @@ +1572,3 @@ +static void replaceUsesOfNonProtoConstant(llvm::Constant *old, + llvm::Function *newFn) { + // Fast path. ---------------- Instead of moving this function in this patch, just add a forward declaration. If you want to move it, you can do that in a separate patch that only moves the function. ================ Comment at: lib/CodeGen/CodeGenModule.h:349 @@ +348,3 @@ + llvm::SmallVector<std::pair<llvm::GlobalValue *, llvm::Constant *>, 8> + GlobalValReplacements; + ---------------- Missing a period in the comment. ================ Comment at: lib/CodeGen/CodeGenModule.h:354 @@ +353,3 @@ + /// call). + llvm::DenseSet<GlobalDecl> ExplicitDefinitions; + ---------------- I don't think this is necessary. I don't believe we ever need to emit a (mangled) function for definition between starting to emit another function and adding its entry block, or between starting to emit a global variable and finishing its constant initializer. So you should be able to just check whether the existing llvm::GlobalValue is a definition. I don't think avoiding emitting the diagnostic multiple times for different globals is necessary, or even a good idea. http://reviews.llvm.org/D11297 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits