Implement ranking of standard conversion sequences by their qualification
conversions (e.g., comparing int* -> const int* against 
int* -> const volatile int*); see C++ 13.3.3.2p3 bullet 3.

Add Sema::UnwrapSimilarPointerTypes to simplify the control flow of
IsQualificationConversion and CompareQualificationConversion (and fix
the handling of the int* -> volatile int* conversion in the former).
 


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57978 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index 2508d1a..b176bc9 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -262,7 +262,8 @@
   
   QualType ObjCGetTypeForMethodDefinition(DeclTy *D);
 
-  
+  bool UnwrapSimilarPointerTypes(QualType& T1, QualType& T2);
+
   virtual TypeResult ActOnTypeName(Scope *S, Declarator &D);
 private:
   //===--------------------------------------------------------------------===//
@@ -380,6 +381,10 @@
   CompareStandardConversionSequences(const StandardConversionSequence& SCS1,
                                      const StandardConversionSequence& SCS2);
 
+  ImplicitConversionSequence::CompareKind 
+  CompareQualificationConversions(const StandardConversionSequence& SCS1,
+                                  const StandardConversionSequence& SCS2);
+
   /// OverloadingResult - Capture the result of performing overload
   /// resolution.
   enum OverloadingResult {