[PATCH] D14348: Add Printable class to simplify the construction of Print helpers.

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 8 15:26:54 PST 2015


Thanks for looking into this. I think the issues is a constructor of std::function based on a generic type T being ambiguous with the const void* case (older gcc versions showed the same behaviour). I don't know if that is a violation of the C++ standard or not, in any case we will have to live with older gcc and msvc versions. So in the end I put in a workaround by wrapping the std::function with a Printable class so we do not get unwanted implicit conversions to std::function anymore.

- Matthias

> On Dec 8, 2015, at 2:30 PM, Joseph Tremoulet via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Fuller error messages from MSVC2013 pasted below.  It seems to no longer be happy to use e.g. the implicit user-defined conversion from Statistic to unsigned to print a Statistic, though I don't know why your change would make that suddenly be the case nor why the list of candidate overloads looks so off.
> 
> 8>C:\Source\llvm-mirror\lib\Analysis\CallGraph.cpp(190): error C2593: 'operator <<' is ambiguous
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(237): could be 'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedNumber &)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(234): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedString &)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(231): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::format_object_base &)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(218): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::Printable)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(215): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(double)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(211): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(int)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(207): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned int)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(206): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const void *)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(205): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(__int64)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(204): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned __int64)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(203): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(long)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(202): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned long)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(198): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::SmallVectorImpl<char> &)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(193): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const std::string &)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(186): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const char *)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(171): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::StringRef)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(164): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(signed char)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(157): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned char)'
> 8>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(150): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(char)'
> 8>          C:\Source\llvm-mirror\include\llvm/IR/Module.h(656): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Module &)'
> 8>          C:\Source\llvm-mirror\include\llvm/IR/Comdat.h(59): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Comdat &)'
> 8>          C:\Source\llvm-mirror\include\llvm/IR/Metadata.h(158): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Metadata &)'
> 8>          C:\Source\llvm-mirror\include\llvm/IR/Value.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Value &)'
> 8>          C:\Source\llvm-mirror\include\llvm/ADT/Twine.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Twine &)'
> 8>          C:\Source\llvm-mirror\include\llvm/IR/Type.h(424): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,llvm::Type &)'
> 8>          C:\Source\llvm-mirror\include\llvm/ADT/APInt.h(1739): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::APInt &)'
> 8>          while trying to match the argument list '(llvm::raw_ostream, const llvm::WeakVH)'
> 7>C:\Source\llvm-mirror\lib\Transforms\Scalar\Sink.cpp(108): error C2593: 'operator <<' is ambiguous
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(237): could be 'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedNumber &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(234): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedString &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(231): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::format_object_base &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(218): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::Printable)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(215): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(double)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(211): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(int)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(207): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned int)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(206): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const void *)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(205): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(__int64)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(204): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned __int64)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(203): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(long)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(202): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned long)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(198): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::SmallVectorImpl<char> &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(193): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const std::string &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(186): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const char *)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(171): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::StringRef)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(164): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(signed char)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(157): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned char)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(150): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(char)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/ConstantRange.h(282): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::ConstantRange &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Module.h(656): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Module &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Comdat.h(59): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Comdat &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Metadata.h(158): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Metadata &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Value.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Value &)'
> 7>          C:\Source\llvm-mirror\include\llvm/ADT/Twine.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Twine &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Type.h(424): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,llvm::Type &)'
> 7>          C:\Source\llvm-mirror\include\llvm/ADT/APInt.h(1739): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::APInt &)'
> 7>          while trying to match the argument list '(llvm::raw_ostream, llvm::Statistic)'
> 9>C:\Source\llvm-mirror\lib\CodeGen\EarlyIfConversion.cpp(203): error C2593: 'operator <<' is ambiguous
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(237): could be 'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedNumber &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(234): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedString &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(231): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::format_object_base &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(218): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::Printable)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(215): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(double)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(211): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(int)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(207): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned int)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(206): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const void *)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(205): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(__int64)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(204): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned __int64)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(203): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(long)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(202): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned long)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(198): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::SmallVectorImpl<char> &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(193): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const std::string &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(186): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const char *)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(171): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::StringRef)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(164): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(signed char)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(157): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned char)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(150): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(char)'
> 9>          C:\Source\llvm-mirror\include\llvm/CodeGen/MachineTraceMetrics.h(391): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::MachineTraceMetrics::Ensemble &)'
> 9>          C:\Source\llvm-mirror\include\llvm/CodeGen/MachineTraceMetrics.h(385): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::MachineTraceMetrics::Trace &)'
> 9>          C:\Source\llvm-mirror\include\llvm/CodeGen/MachineBasicBlock.h(768): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::MachineBasicBlock &)'
> 9>          C:\Source\llvm-mirror\include\llvm/Support/BranchProbability.h(163): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,llvm::BranchProbability)'
> 9>          C:\Source\llvm-mirror\include\llvm/CodeGen/MachineInstr.h(1253): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::MachineInstr &)'
> 9>          C:\Source\llvm-mirror\include\llvm/CodeGen/MachineOperand.h(744): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::MachineOperand &)'
> 9>          C:\Source\llvm-mirror\include\llvm/IR/Module.h(656): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Module &)'
> 9>          C:\Source\llvm-mirror\include\llvm/IR/Comdat.h(59): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Comdat &)'
> 9>          C:\Source\llvm-mirror\include\llvm/IR/Metadata.h(158): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Metadata &)'
> 9>          C:\Source\llvm-mirror\include\llvm/IR/Value.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Value &)'
> 9>          C:\Source\llvm-mirror\include\llvm/ADT/Twine.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Twine &)'
> 9>          C:\Source\llvm-mirror\include\llvm/IR/Type.h(424): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,llvm::Type &)'
> 9>          C:\Source\llvm-mirror\include\llvm/ADT/APInt.h(1739): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::APInt &)'
> 9>          while trying to match the argument list '(llvm::raw_ostream, llvm::cl::opt<unsigned int,false,llvm::cl::parser<unsigned int>>)'
> 7>C:\Source\llvm-mirror\lib\Transforms\Scalar\LoopStrengthReduce.cpp(4808): error C2593: 'operator <<' is ambiguous
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(237): could be 'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedNumber &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(234): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::FormattedString &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(231): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::format_object_base &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(218): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::Printable)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(215): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(double)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(211): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(int)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(207): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned int)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(206): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const void *)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(205): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(__int64)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(204): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned __int64)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(203): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(long)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(202): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned long)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(198): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const llvm::SmallVectorImpl<char> &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(193): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const std::string &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(186): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(const char *)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(171): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(llvm::StringRef)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(164): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(signed char)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(157): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(unsigned char)'
> 7>          C:\Source\llvm-mirror\include\llvm/Support/raw_ostream.h(150): or       'llvm::raw_ostream &llvm::raw_ostream::operator <<(char)'
> 7>          C:\Source\llvm-mirror\include\llvm/Analysis/ScalarEvolution.h(215): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::SCEVPredicate &)'
> 7>          C:\Source\llvm-mirror\include\llvm/Analysis/ScalarEvolution.h(156): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::SCEV &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Module.h(656): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Module &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Metadata.h(158): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Metadata &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Comdat.h(59): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Comdat &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/ConstantRange.h(282): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::ConstantRange &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Type.h(424): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,llvm::Type &)'
> 7>          C:\Source\llvm-mirror\include\llvm/ADT/APInt.h(1739): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::APInt &)'
> 7>          C:\Source\llvm-mirror\include\llvm/IR/Value.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Value &)'
> 7>          C:\Source\llvm-mirror\include\llvm/ADT/Twine.h(534): or       'llvm::raw_ostream &llvm::operator <<(llvm::raw_ostream &,const llvm::Twine &)'
> 7>          while trying to match the argument list '(llvm::raw_ostream, const llvm::IVStrideUse)'
> 
> -----Original Message-----
> From: Matthias Braun [mailto:matze at braunis.de] 
> Sent: Thursday, December 3, 2015 6:37 PM
> To: David Blaikie <dblaikie at gmail.com>
> Cc: reviews+D14348+public+d44b25c0924b3f23 at reviews.llvm.org; llvm-commits <llvm-commits at lists.llvm.org>; Reid Kleckner <rnk at google.com>; Rafael Espindola <rafael.espindola at gmail.com>; Joseph Tremoulet <jotrem at microsoft.com>; Andy Ayers <andya at microsoft.com>; Paul Robinson <paul_robinson at playstation.sony.com>
> Subject: Re: [PATCH] D14348: Add Printable class to simplify the construction of Print helpers.
> 
> Unfortunately I don't, maybe some of the MSVC developers could take a look?
> CCing some "random" people that may have msvc handy.
> 
> - Matthias
> 
>> On Dec 3, 2015, at 3:32 PM, David Blaikie via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>> 
>> 
>> 
>> On Thu, Dec 3, 2015 at 3:29 PM, Matthias Braun via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>> MatzeB added a comment.
>> 
>> I had to revert this patch because two gcc buildbots and all the msvc bots choke on ambiguous operator<< overloads. Examples:
>> 
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flab.ll
>> vm.org%3a8011%2fbuilders%2fsanitizer-x86_64-linux-autoconf%2fbuilds%2f
>> 12622%2fsteps%2fbuild%2520fresh%2520clang%2flogs%2fstdio&data=01%7c01%
>> 7cjotrem%40microsoft.com%7cd814fd85e93944cd7a8108d2fc3ab676%7c72f988bf
>> 86f141af91ab2d7cd011db47%7c1&sdata=ItGGfmEQe%2bJpkXJcn%2fDIWwmN%2fe1%2
>> flX2TNOF1y8EmA8o%3d 
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flab.ll
>> vm.org%3a8011%2fbuilders%2fpolly-amd64-linux%2fbuilds%2f36852%2fsteps%
>> 2fbuild_polly%2flogs%2fstdio&data=01%7c01%7cjotrem%40microsoft.com%7cd
>> 814fd85e93944cd7a8108d2fc3ab676%7c72f988bf86f141af91ab2d7cd011db47%7c1
>> &sdata=qrDTOUlzv%2fPifR0HMtERiQ%2bfCgo9rg1YMf3Gt3HaTOI%3d
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flab.ll
>> vm.org%3a8011%2fbuilders%2flld-x86_64-win7%2fbuilds%2f27400%2fsteps%2f
>> build_Lld%2flogs%2fstdio&data=01%7c01%7cjotrem%40microsoft.com%7cd814f
>> d85e93944cd7a8108d2fc3ab676%7c72f988bf86f141af91ab2d7cd011db47%7c1&sda
>> ta=lpVM3KZLxI4xcmmmTM9hGhJreq%2fN5uIV9RYQZvnhRx4%3d
>> 
>> My current guess is that std::function implicitely converts to void* 
>> or void* implicitely converts to std::function on these systems. So I 
>> guess to get this working I have to go back to the shim class after 
>> all :-(
>> 
>> Fair guess - though if you've got access to such a revision of GCC such that you could test/demonstrate this, it'd be good. I'm always hesitant to workaround something without knowing exactly what it is that's being worked around. (especially so we can leave a comment to rip out teh workaround when we drop support for whatever version of the compiler/standard library has this bug).
>> 
>> - Dave
>> 
>> 
>> 
>> Repository:
>>  rL LLVM
>> 
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2freview
>> s.llvm.org%2fD14348&data=01%7c01%7cjotrem%40microsoft.com%7cd814fd85e9
>> 3944cd7a8108d2fc3ab676%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=oQ
>> J9YfmYjWj5MHIfIWgy1tJ2Z5dGYhwSNE4NZfw3Vxs%3d
>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flists.
>> llvm.org%2fcgi-bin%2fmailman%2flistinfo%2fllvm-commits&data=01%7c01%7c
>> jotrem%40microsoft.com%7cd814fd85e93944cd7a8108d2fc3ab676%7c72f988bf86
>> f141af91ab2d7cd011db47%7c1&sdata=DN0DW8EFs9HNmJRnupRHaH7LKw6mOwasO9OdQ
>> zfnc9I%3d
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flists.
>> llvm.org%2fcgi-bin%2fmailman%2flistinfo%2fllvm-commits&data=01%7c01%7c
>> jotrem%40microsoft.com%7cd814fd85e93944cd7a8108d2fc3ab676%7c72f988bf86
>> f141af91ab2d7cd011db47%7c1&sdata=DN0DW8EFs9HNmJRnupRHaH7LKw6mOwasO9OdQ
>> zfnc9I%3d
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list