[PATCH] D29723: [Sema] Add lvalue-to-rvalue cast in direct-list-initialization of enum

Phabricator via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 15 17:31:44 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL295266: [Sema] Add lvalue-to-rvalue cast in direct-list-initialization of enum (authored by vedantk).

Changed prior to commit:
  https://reviews.llvm.org/D29723?vs=87679&id=88632#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D29723

Files:
  cfe/trunk/lib/Sema/SemaInit.cpp
  cfe/trunk/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp


Index: cfe/trunk/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
===================================================================
--- cfe/trunk/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
+++ cfe/trunk/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
@@ -150,35 +150,44 @@
 
     void f(T);
     f(T{0});
+
+    char c;
+    auto t3 = T{c};
   }
 #if __cplusplus <= 201402L
-  // expected-error at -15 5{{cannot initialize}}
-  // expected-error at -15 5{{cannot initialize}}
-  // expected-error at -15 5{{cannot initialize}}
+  // expected-error at -18 5{{cannot initialize}}
+  // expected-error at -18 5{{cannot initialize}}
+  // expected-error at -18 5{{cannot initialize}}
+  //
   //
+  // expected-error at -18 5{{cannot initialize}}
   //
-  // expected-error at -15 5{{cannot initialize}}
+  // expected-error at -18 5{{cannot initialize}}
   //
-  // expected-error at -15 5{{cannot initialize}}
+  // expected-error at -18 5{{cannot initialize}}
   //
-  // expected-error at -15 5{{cannot initialize}}
   //
+  // expected-error at -18 5{{cannot initialize}}
   //
-  // expected-error at -15 5{{cannot initialize}}
+  //
+  // expected-error at -18 5{{cannot initialize}}
 #else
-  // expected-error at -29 {{cannot initialize}}
-  // expected-error at -29 {{cannot initialize}}
-  // expected-error at -29 {{cannot initialize}}
+  // expected-error at -35 {{cannot initialize}}
+  // expected-error at -35 {{cannot initialize}}
+  // expected-error at -35 {{cannot initialize}}
+  //
   //
+  // expected-error at -35 {{cannot initialize}}
   //
-  // expected-error at -29 {{cannot initialize}}
+  // expected-error at -35 {{cannot initialize}}
   //
-  // expected-error at -29 {{cannot initialize}}
+  // expected-error at -35 {{cannot initialize}}
   //
-  // expected-error at -29 {{cannot initialize}}
   //
+  // expected-error at -35 {{cannot initialize}}
   //
-  // expected-error at -29 {{cannot initialize}}
+  //
+  // expected-error at -35 {{cannot initialize}}
 #endif
 
   template<typename T> void bad() {
@@ -252,4 +261,12 @@
     (void)B{0.0}; // expected-error {{type 'double' cannot be narrowed}}
 #endif
   }
+
+#if __cplusplus > 201402L
+  enum class F : unsigned {};
+  F f1(unsigned x) { return F{x}; }
+  F f2(const unsigned x) { return F{x}; }
+  F f3(bool x) { return F{x}; }
+  F f4(const bool x) { return F{x}; }
+#endif
 }
Index: cfe/trunk/lib/Sema/SemaInit.cpp
===================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp
+++ cfe/trunk/lib/Sema/SemaInit.cpp
@@ -3981,6 +3981,8 @@
       ImplicitConversionSequence ICS;
       ICS.setStandard();
       ICS.Standard.setAsIdentityConversion();
+      if (!E->isRValue())
+        ICS.Standard.First = ICK_Lvalue_To_Rvalue;
       // If E is of a floating-point type, then the conversion is ill-formed
       // due to narrowing, but go through the motions in order to produce the
       // right diagnostic.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29723.88632.patch
Type: text/x-patch
Size: 2863 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170216/ddee2b94/attachment.bin>


More information about the cfe-commits mailing list