diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp
index 680d735..c72eca2 100644
--- a/lib/CodeGen/CGCXX.cpp
+++ b/lib/CodeGen/CGCXX.cpp
@@ -256,6 +256,27 @@
                            E->arg_begin() + 1, E->arg_end());
 }
 
+RValue
+CodeGenFunction::EmitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *E) {
+  assert((E->getCastKind() == CastExpr::CK_UserDefinedConversion) &&
+         "EmitCXXFunctionalCastExpr - called with wrong cast");
+  
+  CXXMethodDecl *MD = E->getTypeConversionMethod();
+  const FunctionProtoType *FPT = MD->getType()->getAsFunctionProtoType();
+  llvm::Constant *Callee;
+  if (CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(MD))
+    Callee = CGM.GetAddrOfCXXConstructor(CD, Ctor_Complete); 
+  else {
+    const llvm::Type *Ty = 
+      CGM.getTypes().GetFunctionType(CGM.getTypes().getFunctionInfo(MD), 
+                                     FPT->isVariadic());
+    Callee = CGM.GetAddrOfFunction(GlobalDecl(MD), Ty);
+  }
+  llvm::Value *This = EmitLValue(E->getSubExpr()).getAddress();
+  
+  return EmitCXXMemberCall(MD, Callee, This, 0, 0);
+}
+
 llvm::Value *CodeGenFunction::LoadCXXThis() {
   assert(isa<CXXMethodDecl>(CurFuncDecl) && 
          "Must be in a C++ member function decl to load 'this'");
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 6f6daa7..002c774 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -177,7 +177,12 @@
                                LValue::MakeAddr(CastPtr, 0));
     return;
   }
-
+  if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) {
+    CXXFunctionalCastExpr *CXXFExpr = cast<CXXFunctionalCastExpr>(E);
+    CGF.EmitCXXFunctionalCastExpr(CXXFExpr);
+    return;
+  }
+  
   // FIXME: Remove the CK_Unknown check here.
   assert((E->getCastKind() == CastExpr::CK_NoOp || 
           E->getCastKind() == CastExpr::CK_Unknown) && 
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index e8b7304..299296a 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -227,6 +227,11 @@
     return llvm::Constant::getNullValue(ConvertType(E->getType()));
   }
   Value *VisitCastExpr(const CastExpr *E) {
+    if (E->getCastKind() == CastExpr::CK_UserDefinedConversion) {
+      const CXXFunctionalCastExpr *CXXFExpr = cast<CXXFunctionalCastExpr>(E);
+      return CGF.EmitCXXFunctionalCastExpr(CXXFExpr).getScalarVal();
+    }
+      
     // Make sure to evaluate VLA bounds now so that we have them for later.
     if (E->getType()->isVariablyModifiedType())
       CGF.EmitVLASize(E->getType());
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index e8f0cc5..2815939 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -838,6 +838,8 @@
   RValue EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E,
                                        const CXXMethodDecl *MD);
   
+  RValue EmitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *E);
+  
   RValue EmitBuiltinExpr(const FunctionDecl *FD, 
                          unsigned BuiltinID, const CallExpr *E);
 
