]> granicus.if.org Git - clang/commitdiff
A type- or value-dependent expression cannot use bitfield
authorDouglas Gregor <dgregor@apple.com>
Mon, 24 May 2010 20:13:53 +0000 (20:13 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 24 May 2010 20:13:53 +0000 (20:13 +0000)
promotion. Fixes <rdar://problem/8020920>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104545 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/SemaTemplate/enum-argument.cpp

index d6e094e5b4a9e3248367c1ce9d2266f574c206ef..aa98910f0ff260434d142956bf5c4f5e808c12e7 100644 (file)
@@ -2729,6 +2729,9 @@ unsigned ASTContext::getIntegerRank(Type *T) {
 /// \returns the type this bit-field will promote to, or NULL if no
 /// promotion occurs.
 QualType ASTContext::isPromotableBitField(Expr *E) {
+  if (E->isTypeDependent() || E->isValueDependent())
+    return QualType();
+  
   FieldDecl *Field = E->getBitField();
   if (!Field)
     return QualType();
index de89487bd5819573ab2b4314d4848fb3ee088355..7d237570678f23409bcb6c1382483039eb863e0a 100644 (file)
@@ -21,3 +21,16 @@ struct X0 {
 };
 
 X0<int> x0i;
+
+namespace rdar8020920 {
+  template<typename T>
+  struct X {
+    enum { e0 = 32 };
+
+    unsigned long long bitfield : e0;
+
+    void f(int j) {
+      bitfield + j;
+    }
+  };
+}