Skip to content
  1. Oct 02, 2009
  2. Oct 01, 2009
  3. Sep 30, 2009
    • Douglas Gregor's avatar
      When overload resolution fails for an overloaded operator, show the · 66950a32
      Douglas Gregor authored
      overload candidates (but not the built-in ones). We still rely on the
      underlying built-in semantic analysis to produce the initial
      diagnostic, then print the candidates following that diagnostic. 
      
      One side advantage of this approach is that we can perform more validation
      of C++'s operator overloading with built-in candidates vs. the
      semantic analysis for those built-in operators: when there are no
      viable candidates, we know to expect an error from the built-in
      operator handling code. Otherwise, we are not modeling the built-in
      semantics properly within operator overloading. This is checked as:
      
            assert(Result.isInvalid() && 
                   "C++ binary operator overloading is missing
                   candidates!");
            if (Result.isInvalid())
              PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
      
      The assert() catches cases where we're wrong in a +Asserts build. The
      "if" makes sure that, if this happens in a production clang
      (-Asserts), we still build the proper built-in operator and continue
      on our merry way. This is effectively what happened before this
      change, but we've added the assert() to catch more flies.
      
      llvm-svn: 83175
      66950a32
Loading