[ping]

On 10/14/2014 04:12 PM, Stephan Bergmann wrote:
$ clang++ --version
clang version 3.6.0 (trunk 219190)
Target: x86_64-unknown-linux-gnu
Thread model: posix

$ cat test.cc
enum class E { e };
typedef E E2;
E2 f1() { return E::e; }
E f2() { return E::e; }
bool g1() { return !f1(); }
bool g2() { return !f2(); }

$ clang++ -std=c++11 -c test.cc
test.cc:6:20: error: invalid argument type 'E' to unary expression
bool g2() { return !f2(); }
                   ^~~~~
1 error generated.

rightly complains about the invalid contextual conversion to bool in g2
but erroneously not also about the one in g1.

Index: lib/Sema/SemaExpr.cpp
===================================================================
--- lib/Sema/SemaExpr.cpp    (revision 219190)
+++ lib/Sema/SemaExpr.cpp    (working copy)
@@ -7414,7 +7414,7 @@
 }

 static bool isScopedEnumerationType(QualType T) {
-  if (const EnumType *ET = dyn_cast<EnumType>(T))
+  if (const EnumType *ET = dyn_cast<EnumType>(T.getCanonicalType()))
     return ET->getDecl()->isScoped();
   return false;
 }

would fix that for me.

Stephan
Index: lib/Sema/SemaExpr.cpp
===================================================================
--- lib/Sema/SemaExpr.cpp	(revision 219190)
+++ lib/Sema/SemaExpr.cpp	(working copy)
@@ -7414,7 +7414,7 @@
 }
 
 static bool isScopedEnumerationType(QualType T) {
-  if (const EnumType *ET = dyn_cast<EnumType>(T))
+  if (const EnumType *ET = dyn_cast<EnumType>(T.getCanonicalType()))
     return ET->getDecl()->isScoped();
   return false;
 }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to