invalid bits size for WrittenBuiltinSpecs::Type

Hello Clang Developers,

in file clang/Basic/Specifiers.h there is
    struct clang::WrittenBuiltinSpecs {
      /*DeclSpec::TST*/ unsigned Type : 5; // << must be *6*
....
   };

"Type" field must be 6 to match DeclSpec::TST which is the same as enum TypeSpecifierType
which has
  TST_error // erroneous type
with value 43 which can not be kept in 5 bits field.

as a correct example you can see that
clang::DeclSpec::TypeSpecType field is 6 bits

So, we corrupt values during save in clang::DeclSpec::SaveWrittenBuiltinSpecs for all after TST_image1d_t.
Btw, due to this TST_error is changed to TST_float128....

Hope it helps,
Vladimir.

Thanks, fixed in r297654.

Reid,

May be it’s worth to have the same assert for clang::DeclSpec::TypeSpecType?

Thanks,
Vladimir.

I think this is something the compiler should catch. I’m writing a generalized warning in clang for it right now.

Yes, I agree. In fact, this is how I got here myself. I ran test using Clank (the Java port of CLang) and got Java-assert that reducing from enumerator to 5 bits doesn’t fit for TST_error value :slight_smile: Please, send me the changeset when you are done with compiler warning. Thanks! Vladimir.

Patch to catch this bug if you’re curious: https://reviews.llvm.org/D30923

Thank you!