diff --git a/src/compiler/Intermediate.cpp b/src/compiler/Intermediate.cpp
index 0beee2c..3b66221 100644
--- a/src/compiler/Intermediate.cpp
+++ b/src/compiler/Intermediate.cpp
@@ -870,7 +870,7 @@
         getTypePointer()->setQualifier(EvqTemporary);
     }
 
-    char size = std::max(left->getNominalSize(), right->getNominalSize());
+    int size = std::max(left->getNominalSize(), right->getNominalSize());
 
     //
     // All scalars. Code after this test assumes this case is removed!
@@ -1126,7 +1126,7 @@
                     return 0;
                 }
                 {// support MSVC++6.0
-                    char size = getNominalSize();
+                    int size = getNominalSize();
                     tempConstArray = new ConstantUnion[size*size];
                     for (int row = 0; row < size; row++) {
                         for (int column = 0; column < size; column++) {
@@ -1174,9 +1174,9 @@
                 tempConstArray = new ConstantUnion[getNominalSize()];
 
                 {// support MSVC++6.0
-                    for (char size = getNominalSize(), i = 0; i < size; i++) {
+                    for (int size = getNominalSize(), i = 0; i < size; i++) {
                         tempConstArray[i].setFConst(0.0f);
-                        for (char j = 0; j < size; j++) {
+                        for (int j = 0; j < size; j++) {
                             tempConstArray[i].setFConst(tempConstArray[i].getFConst() + ((unionArray[j*size + i].getFConst()) * rightUnionArray[j].getFConst()));
                         }
                     }
@@ -1195,9 +1195,9 @@
 
                 tempConstArray = new ConstantUnion[getNominalSize()];
                 {// support MSVC++6.0
-                    for (char size = getNominalSize(), i = 0; i < size; i++) {
+                    for (int size = getNominalSize(), i = 0; i < size; i++) {
                         tempConstArray[i].setFConst(0.0f);
-                        for (char j = 0; j < size; j++) {
+                        for (int j = 0; j < size; j++) {
                             tempConstArray[i].setFConst(tempConstArray[i].getFConst() + ((unionArray[j].getFConst()) * rightUnionArray[i*size + j].getFConst()));
                         }
                     }
diff --git a/src/compiler/Types.h b/src/compiler/Types.h
index db3a84b..505fa8e 100644
--- a/src/compiler/Types.h
+++ b/src/compiler/Types.h
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -95,7 +95,7 @@
 public:
     POOL_ALLOCATOR_NEW_DELETE();
     TType() {}
-    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, char s = 1, bool m = false, bool a = false) :
+    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, int s = 1, bool m = false, bool a = false) :
             type(t), precision(p), qualifier(q), size(s), matrix(m), array(a), arraySize(0), structure(0)
     {
     }
@@ -115,8 +115,8 @@
     void setQualifier(TQualifier q) { qualifier = q; }
 
     // One-dimensional size of single instance type
-    char getNominalSize() const { return size; }
-    void setNominalSize(char s) { size = s; }
+    int getNominalSize() const { return size; }
+    void setNominalSize(int s) { size = s; }
     // Full size of single instance of type
     size_t getObjectSize() const;
 
@@ -234,12 +234,12 @@
 private:
     TString buildMangledName() const;
 
-    TBasicType type;
+    TBasicType type      : 6;
     TPrecision precision;
-    TQualifier qualifier;
-    char size;
-	bool matrix;
-    bool array;
+    TQualifier qualifier : 7;
+    int size             : 8; // size of vector or matrix, not size of array
+    unsigned int matrix  : 1;
+    unsigned int array   : 1;
     int arraySize;
 
     TStructure* structure;      // 0 unless this is a struct
@@ -261,7 +261,7 @@
     TBasicType type;
     TQualifier qualifier;
     TPrecision precision;
-    char size;          // size of vector or matrix, not size of array
+    int size;          // size of vector or matrix, not size of array
     bool matrix;
     bool array;
     int arraySize;
@@ -281,7 +281,7 @@
         line = ln;
     }
 
-    void setAggregate(char s, bool m = false)
+    void setAggregate(int s, bool m = false)
     {
         size = s;
         matrix = m;
diff --git a/src/compiler/intermediate.h b/src/compiler/intermediate.h
index 3a86148..738621f 100644
--- a/src/compiler/intermediate.h
+++ b/src/compiler/intermediate.h
@@ -254,7 +254,7 @@
     TBasicType getBasicType() const { return type.getBasicType(); }
     TQualifier getQualifier() const { return type.getQualifier(); }
     TPrecision getPrecision() const { return type.getPrecision(); }
-    char getNominalSize() const { return type.getNominalSize(); }
+    int getNominalSize() const { return type.getNominalSize(); }
     
     bool isMatrix() const { return type.isMatrix(); }
     bool isArray()  const { return type.isArray(); }
