Index: test/SemaCXX/ast-print.cpp
===================================================================
--- test/SemaCXX/ast-print.cpp	(revision 166899)
+++ test/SemaCXX/ast-print.cpp	(working copy)
@@ -81,3 +81,17 @@
         E a = A;
     }
 };
+
+// CHECK:  test10(*m);
+
+struct MyClass10
+{
+    operator const char *() { return "str"; }
+};
+    
+void test10(const char *str)
+{
+    MyClass10* m;
+    test10(*m);
+}
+
Index: test/Analysis/temp-obj-dtors-cfg-output.cpp
===================================================================
--- test/Analysis/temp-obj-dtors-cfg-output.cpp	(revision 166899)
+++ test/Analysis/temp-obj-dtors-cfg-output.cpp	(working copy)
@@ -121,7 +121,7 @@
 // CHECK:   [B1]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B1.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
 // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
 // CHECK:     6: ~A() (Temporary object destructor)
@@ -179,7 +179,7 @@
 // CHECK:   [B1]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B1.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
 // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
 // CHECK:     6: ~A() (Temporary object destructor)
@@ -195,29 +195,29 @@
 // CHECK:     2: [B1.1] (BindTemporary)
 // CHECK:     3: [B1.2].operator int
 // CHECK:     4: [B1.3]()
-// CHECK:     5: [B1.4] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:     5: [B1.2] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:     6: int([B1.5]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:     7: B() (CXXConstructExpr, class B)
 // CHECK:     8: [B1.7] (BindTemporary)
 // CHECK:     9: [B1.8].operator int
 // CHECK:    10: [B1.9]()
-// CHECK:    11: [B1.10] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:    11: [B1.8] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    12: int([B1.11]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:    13: [B1.6] + [B1.12]
-// CHECK:    14: int a = int(A().operator int()) + int(B().operator int());
+// CHECK:    14: int a = int(A()) + int(B());
 // CHECK:    15: ~B() (Temporary object destructor)
 // CHECK:    16: ~A() (Temporary object destructor)
 // CHECK:    17: A() (CXXConstructExpr, class A)
 // CHECK:    18: [B1.17] (BindTemporary)
 // CHECK:    19: [B1.18].operator int
 // CHECK:    20: [B1.19]()
-// CHECK:    21: [B1.20] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:    21: [B1.18] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    22: int([B1.21]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:    23: B() (CXXConstructExpr, class B)
 // CHECK:    24: [B1.23] (BindTemporary)
 // CHECK:    25: [B1.24].operator int
 // CHECK:    26: [B1.25]()
-// CHECK:    27: [B1.26] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:    27: [B1.24] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    28: int([B1.27]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:    29: [B1.22] + [B1.28]
 // CHECK:    30: foo
@@ -254,7 +254,7 @@
 // CHECK:     2: [B4.1] (BindTemporary)
 // CHECK:     3: [B4.2].operator _Bool
 // CHECK:     4: [B4.3]()
-// CHECK:     5: [B4.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B4.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     Preds (1): B5
 // CHECK:     Succs (1): B3
 // CHECK:   [B5]
@@ -263,7 +263,7 @@
 // CHECK:     3: [B5.2] (BindTemporary)
 // CHECK:     4: [B5.3].operator _Bool
 // CHECK:     5: [B5.4]()
-// CHECK:     6: [B5.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     6: [B5.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B5.6] && ...
 // CHECK:     Preds (2): B6 B7
 // CHECK:     Succs (2): B4 B3
@@ -273,7 +273,7 @@
 // CHECK:     Succs (1): B5
 // CHECK:   [B7]
 // CHECK:     1: [B9.5] && [B8.5]
-// CHECK:     2: bool a = A().operator _Bool() && B().operator _Bool();
+// CHECK:     2: bool a = A() && B();
 // CHECK:     T: [B9.5] && ...
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B6 B5
@@ -282,7 +282,7 @@
 // CHECK:     2: [B8.1] (BindTemporary)
 // CHECK:     3: [B8.2].operator _Bool
 // CHECK:     4: [B8.3]()
-// CHECK:     5: [B8.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B8.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     Preds (1): B9
 // CHECK:     Succs (1): B7
 // CHECK:   [B9]
@@ -290,7 +290,7 @@
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2].operator _Bool
 // CHECK:     4: [B9.3]()
-// CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B9.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B9.5] && ...
 // CHECK:     Preds (1): B10
 // CHECK:     Succs (2): B8 B7
@@ -320,7 +320,7 @@
 // CHECK:     2: [B4.1] (BindTemporary)
 // CHECK:     3: [B4.2].operator _Bool
 // CHECK:     4: [B4.3]()
-// CHECK:     5: [B4.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B4.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     Preds (1): B5
 // CHECK:     Succs (1): B3
 // CHECK:   [B5]
@@ -329,7 +329,7 @@
 // CHECK:     3: [B5.2] (BindTemporary)
 // CHECK:     4: [B5.3].operator _Bool
 // CHECK:     5: [B5.4]()
-// CHECK:     6: [B5.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     6: [B5.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B5.6] || ...
 // CHECK:     Preds (2): B6 B7
 // CHECK:     Succs (2): B3 B4
@@ -339,7 +339,7 @@
 // CHECK:     Succs (1): B5
 // CHECK:   [B7]
 // CHECK:     1: [B9.5] || [B8.5]
-// CHECK:     2: bool a = A().operator _Bool() || B().operator _Bool();
+// CHECK:     2: bool a = A() || B();
 // CHECK:     T: [B9.5] || ...
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B5 B6
@@ -348,7 +348,7 @@
 // CHECK:     2: [B8.1] (BindTemporary)
 // CHECK:     3: [B8.2].operator _Bool
 // CHECK:     4: [B8.3]()
-// CHECK:     5: [B8.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B8.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     Preds (1): B9
 // CHECK:     Succs (1): B7
 // CHECK:   [B9]
@@ -356,7 +356,7 @@
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2].operator _Bool
 // CHECK:     4: [B9.3]()
-// CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B9.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B9.5] || ...
 // CHECK:     Preds (1): B10
 // CHECK:     Succs (2): B7 B8
@@ -389,7 +389,7 @@
 // CHECK:     3: [B4.2] (BindTemporary)
 // CHECK:     4: [B4.3].operator _Bool
 // CHECK:     5: [B4.4]()
-// CHECK:     6: [B4.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     6: [B4.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     7: ~B() (Temporary object destructor)
 // CHECK:     T: if [B4.6]
 // CHECK:     Preds (2): B5 B6
@@ -411,14 +411,14 @@
 // CHECK:     2: [B7.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B7.2]
 // CHECK:     4: [B7.3] (CXXConstructExpr, class A)
-// CHECK:     5: A a = B().operator _Bool() ? A() : A(B().operator A());
+// CHECK:     5: A a = B() ? A() : A(B());
 // CHECK:     T: [B10.5] ? ... : ...
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B5 B6
 // CHECK:   [B8]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B8.1] (BindTemporary)
-// CHECK:     3: [B8.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B8.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B8.3]
 // CHECK:     5: [B8.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B8.5] (BindTemporary)
@@ -429,9 +429,9 @@
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2].operator A
 // CHECK:     4: [B9.3]()
-// CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, class A)
+// CHECK:     5: [B9.2] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     6: [B9.5] (BindTemporary)
-// CHECK:     7: [B9.6] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     7: [B9.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     8: [B9.7]
 // CHECK:     9: [B9.8] (CXXConstructExpr, class A)
 // CHECK:    10: [B9.9] (BindTemporary)
@@ -447,7 +447,7 @@
 // CHECK:     2: [B10.1] (BindTemporary)
 // CHECK:     3: [B10.2].operator _Bool
 // CHECK:     4: [B10.3]()
-// CHECK:     5: [B10.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B10.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B10.5] ? ... : ...
 // CHECK:     Preds (1): B11
 // CHECK:     Succs (2): B8 B9
@@ -486,7 +486,7 @@
 // CHECK:   [B5]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B5.1] (BindTemporary)
-// CHECK:     3: [B5.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B5.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B5.3]
 // CHECK:     5: [B5.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B5.5] (BindTemporary)
@@ -497,9 +497,9 @@
 // CHECK:     2: [B6.1] (BindTemporary)
 // CHECK:     3: [B6.2].operator A
 // CHECK:     4: [B6.3]()
-// CHECK:     5: [B6.4] (ImplicitCastExpr, UserDefinedConversion, class A)
+// CHECK:     5: [B6.2] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     6: [B6.5] (BindTemporary)
-// CHECK:     7: [B6.6] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     7: [B6.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     8: [B6.7]
 // CHECK:     9: [B6.8] (CXXConstructExpr, class A)
 // CHECK:    10: [B6.9] (BindTemporary)
@@ -516,7 +516,7 @@
 // CHECK:     3: [B7.2] (BindTemporary)
 // CHECK:     4: [B7.3].operator _Bool
 // CHECK:     5: [B7.4]()
-// CHECK:     6: [B7.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     6: [B7.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B7.6] ? ... : ...
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B5 B6
@@ -534,14 +534,14 @@
 // CHECK:     1: [B13.5] ? [B11.6] : [B12.15]
 // CHECK:     2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B10.2]
-// CHECK:     4: const A &a = B().operator _Bool() ? A() : A(B().operator A());
+// CHECK:     4: const A &a = B() ? A() : A(B());
 // CHECK:     T: [B13.5] ? ... : ...
 // CHECK:     Preds (2): B11 B12
 // CHECK:     Succs (2): B8 B9
 // CHECK:   [B11]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B11.1] (BindTemporary)
-// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B11.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B11.3]
 // CHECK:     5: [B11.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B11.5] (BindTemporary)
@@ -552,9 +552,9 @@
 // CHECK:     2: [B12.1] (BindTemporary)
 // CHECK:     3: [B12.2].operator A
 // CHECK:     4: [B12.3]()
-// CHECK:     5: [B12.4] (ImplicitCastExpr, UserDefinedConversion, class A)
+// CHECK:     5: [B12.2] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     6: [B12.5] (BindTemporary)
-// CHECK:     7: [B12.6] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     7: [B12.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     8: [B12.7]
 // CHECK:     9: [B12.8] (CXXConstructExpr, class A)
 // CHECK:    10: [B12.9] (BindTemporary)
@@ -570,7 +570,7 @@
 // CHECK:     2: [B13.1] (BindTemporary)
 // CHECK:     3: [B13.2].operator _Bool
 // CHECK:     4: [B13.3]()
-// CHECK:     5: [B13.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B13.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B13.5] ? ... : ...
 // CHECK:     Preds (1): B14
 // CHECK:     Succs (2): B11 B12
@@ -612,7 +612,7 @@
 // CHECK:   [B6]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B6.1] (BindTemporary)
-// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B6.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B6.3]
 // CHECK:     5: [B6.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B6.5] (BindTemporary)
@@ -623,7 +623,7 @@
 // CHECK:     2: [B7.1] (BindTemporary)
 // CHECK:     3: [B7.2].operator _Bool
 // CHECK:     4: [B7.3]()
-// CHECK:     5: [B7.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B7.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B7.5] ? ... : ...
 // CHECK:     Preds (1): B8
 // CHECK:     Succs (2): B5 B6
@@ -666,7 +666,7 @@
 // CHECK:   [B6]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B6.1] (BindTemporary)
-// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B6.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B6.3]
 // CHECK:     5: [B6.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B6.5] (BindTemporary)
@@ -678,7 +678,7 @@
 // CHECK:     3: [B7.2] (BindTemporary)
 // CHECK:     4: [B7.3].operator _Bool
 // CHECK:     5: [B7.4]()
-// CHECK:     6: [B7.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     6: [B7.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B7.6] ? ... : ...
 // CHECK:     Preds (2): B9 B8
 // CHECK:     Succs (2): B5 B6
@@ -704,7 +704,7 @@
 // CHECK:   [B11]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B11.1] (BindTemporary)
-// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B11.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B11.3]
 // CHECK:     5: [B11.4] (CXXConstructExpr, class A)
 // CHECK:     6: [B11.5] (BindTemporary)
@@ -715,7 +715,7 @@
 // CHECK:     2: [B12.1] (BindTemporary)
 // CHECK:     3: [B12.2].operator _Bool
 // CHECK:     4: [B12.3]()
-// CHECK:     5: [B12.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
+// CHECK:     5: [B12.2] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CHECK:     T: [B12.5] ? ... : ...
 // CHECK:     Preds (1): B13
 // CHECK:     Succs (2): B10 B11
@@ -726,7 +726,7 @@
 // CHECK:   [B1]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B1.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
 // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
 // CHECK:     6: A a = A();
@@ -742,12 +742,12 @@
 // CHECK:   [B1]
 // CHECK:     1: A() (CXXConstructExpr, class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     3: [B1.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
 // CHECK:     5: const A &a = A();
 // CHECK:     6: A() (CXXConstructExpr, class A)
 // CHECK:     7: [B1.6] (BindTemporary)
-// CHECK:     8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     8: [B1.6] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     9: [B1.8]
 // CHECK:    10: foo
 // CHECK:    11: [B1.10] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
@@ -766,7 +766,7 @@
 // CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // CHECK:     3: [B1.2]()
 // CHECK:     4: [B1.3] (BindTemporary)
-// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     5: [B1.3] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     6: [B1.5]
 // CHECK:     7: [B1.6] (CXXConstructExpr, class A)
 // CHECK:     8: A a = A::make();
@@ -784,14 +784,14 @@
 // CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // CHECK:     3: [B1.2]()
 // CHECK:     4: [B1.3] (BindTemporary)
-// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:     5: [B1.3] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     6: [B1.5]
 // CHECK:     7: const A &a = A::make();
 // CHECK:     8: A::make
 // CHECK:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // CHECK:    10: [B1.9]()
 // CHECK:    11: [B1.10] (BindTemporary)
-// CHECK:    12: [B1.11] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:    12: [B1.10] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    13: [B1.12]
 // CHECK:    14: foo
 // CHECK:    15: [B1.14] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
@@ -811,7 +811,7 @@
 // CHECK:     3: [B1.2] (BindTemporary)
 // CHECK:     4: [B1.3].operator int
 // CHECK:     5: [B1.4]()
-// CHECK:     6: [B1.5] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:     6: [B1.3] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:     7: a
 // CHECK:     8: [B1.7] = [B1.6]
 // CHECK:     9: ~A() (Temporary object destructor)
@@ -827,13 +827,13 @@
 // CHECK:     2: [B1.1] (BindTemporary)
 // CHECK:     3: [B1.2].operator int
 // CHECK:     4: [B1.3]()
-// CHECK:     5: [B1.4] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:     5: [B1.2] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:     6: int([B1.5]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:     7: B() (CXXConstructExpr, class B)
 // CHECK:     8: [B1.7] (BindTemporary)
 // CHECK:     9: [B1.8].operator int
 // CHECK:    10: [B1.9]()
-// CHECK:    11: [B1.10] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:    11: [B1.8] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    12: int([B1.11]) (CXXFunctionalCastExpr, NoOp, int)
 // CHECK:    13: [B1.6] + [B1.12]
 // CHECK:    14: a([B1.13]) (Member initializer)
Index: test/Analysis/auto-obj-dtors-cfg-output.cpp
===================================================================
--- test/Analysis/auto-obj-dtors-cfg-output.cpp	(revision 166899)
+++ test/Analysis/auto-obj-dtors-cfg-output.cpp	(working copy)
@@ -183,7 +183,7 @@
 // CHECK:    5: const A &b = a;
 // CHECK:    6: A() (CXXConstructExpr, class A)
 // CHECK:    7: [B1.6] (BindTemporary)
-// CHECK:    8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
+// CHECK:    8: [B1.6] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    9: [B1.8]
 // CHECK:   10: const A &c = A();
 // CHECK:   11: [B1.10].~A() (Implicit destructor)
@@ -334,8 +334,8 @@
 // CHECK:    8: [B4.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    9: [B4.8].operator int
 // CHECK:   10: [B4.9]()
-// CHECK:   11: [B4.10] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   12: [B4.11] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:   11: [B4.7] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   12: [B4.7] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: if [B4.12]
 // CHECK:    Preds (1): B5
 // CHECK:    Succs (2): B3 B2
@@ -406,8 +406,8 @@
 // CHECK:    8: [B8.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    9: [B8.8].operator int
 // CHECK:   10: [B8.9]()
-// CHECK:   11: [B8.10] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   12: [B8.11] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:   11: [B8.7] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   12: [B8.7] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: if [B8.12]
 // CHECK:    Preds (1): B9
 // CHECK:    Succs (2): B7 B4
@@ -439,8 +439,8 @@
 // CHECK:    6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    7: [B4.6].operator int
 // CHECK:    8: [B4.7]()
-// CHECK:    9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:    9: [B4.5] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   10: [B4.5] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: while [B4.10]
 // CHECK:    Preds (2): B2 B5
 // CHECK:    Succs (2): B3 B1
@@ -519,8 +519,8 @@
 // CHECK:    6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    7: [B10.6].operator int
 // CHECK:    8: [B10.7]()
-// CHECK:    9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:    9: [B10.5] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   10: [B10.5] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: while [B10.10]
 // CHECK:    Preds (2): B2 B11
 // CHECK:    Succs (2): B9 B1
@@ -636,7 +636,7 @@
 // CHECK:    8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    9: [B2.8].operator int
 // CHECK:   10: [B2.9]()
-// CHECK:   11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   11: [B2.7] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    T: switch [B2.11]
 // CHECK:    Preds (1): B4
 // CHECK:    Succs (1): B1
@@ -668,7 +668,7 @@
 // CHECK:    8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    9: [B2.8].operator int
 // CHECK:   10: [B2.9]()
-// CHECK:   11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   11: [B2.7] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    T: switch [B2.11]
 // CHECK:    Preds (1): B9
 // CHECK:    Succs (3): B3 B8
@@ -740,8 +740,8 @@
 // CHECK:    6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    7: [B4.6].operator int
 // CHECK:    8: [B4.7]()
-// CHECK:    9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:    9: [B4.5] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   10: [B4.5] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: for (...; [B4.10]; )
 // CHECK:    Preds (2): B2 B5
 // CHECK:    Succs (2): B3 B1
@@ -821,8 +821,8 @@
 // CHECK:    6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    7: [B10.6].operator int
 // CHECK:    8: [B10.7]()
-// CHECK:    9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int)
-// CHECK:   10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
+// CHECK:    9: [B10.5] (ImplicitCastExpr, UserDefinedConversion, int)
+// CHECK:   10: [B10.5] (ImplicitCastExpr, IntegralToBoolean, _Bool)
 // CHECK:    T: for (...; [B10.10]; )
 // CHECK:    Preds (2): B2 B11
 // CHECK:    Succs (2): B9 B1
Index: lib/AST/StmtPrinter.cpp
===================================================================
--- lib/AST/StmtPrinter.cpp	(revision 166899)
+++ lib/AST/StmtPrinter.cpp	(working copy)
@@ -945,7 +945,7 @@
 }
 void StmtPrinter::VisitImplicitCastExpr(ImplicitCastExpr *Node) {
   // No need to print anything, simply forward to the sub expression.
-  PrintExpr(Node->getSubExpr());
+  PrintExpr(Node->getSubExprAsWritten());
 }
 void StmtPrinter::VisitBinaryOperator(BinaryOperator *Node) {
   PrintExpr(Node->getLHS());
