Gentle Ping !! Please help in reviewing the patch for bug 18275.

-- 
With regards,
Suyog Sarda
Index: lib/Sema/SemaTemplateInstantiateDecl.cpp
===================================================================
--- lib/Sema/SemaTemplateInstantiateDecl.cpp	(revision 200630)
+++ lib/Sema/SemaTemplateInstantiateDecl.cpp	(working copy)
@@ -3016,6 +3016,21 @@
       // Simple case: not a parameter pack.
       assert(FParamIdx < Function->getNumParams());
       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
+
+      //C++11 [over.load]p3:
+      //  Parameter declarations that differ only in the presence or absence of
+      //  const and/or volatile are equivalent.That is, the const and volatile
+      //  type-specifiers for each parameter type are ignored when
+      //  determining which function is being declared, defined, or called.
+
+     if (FunctionParam->getType().isConstQualified() ||
+        FunctionParam->getType().isVolatileQualified()) {
+         QualType FunctionParamType = FunctionParam->getType();
+         FunctionParamType.removeLocalFastQualifiers();
+         FunctionParamType.addFastQualifiers(PatternParam->getType().getLocalFastQualifiers());
+         FunctionParam->setType(FunctionParamType);
+     }
+
       FunctionParam->setDeclName(PatternParam->getDeclName());
       Scope.InstantiatedLocal(PatternParam, FunctionParam);
       ++FParamIdx;
@@ -3030,6 +3045,15 @@
            "should only be called when all template arguments are known");
     for (unsigned Arg = 0; Arg < *NumArgumentsInExpansion; ++Arg) {
       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
+
+      if (FunctionParam->getType().isConstQualified() ||
+         FunctionParam->getType().isVolatileQualified()) {
+          QualType FunctionParamType = FunctionParam->getType();
+          FunctionParamType.removeLocalFastQualifiers();
+          FunctionParamType.addFastQualifiers(PatternParam->getType().getLocalFastQualifiers());
+          FunctionParam->setType(FunctionParamType);
+      }
+
       FunctionParam->setDeclName(PatternParam->getDeclName());
       Scope.InstantiatedLocalPackArg(PatternParam, FunctionParam);
       ++FParamIdx;
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to