Index: clang/lib/AST/ASTContext.cpp =================================================================== --- clang/lib/AST/ASTContext.cpp +++ clang/lib/AST/ASTContext.cpp @@ -8286,6 +8286,12 @@ *NotEncodedT = T; return; + // FIXME: We should do better than this, but this is better than crashing. + case Type::BitInt: + if (NotEncodedT) + *NotEncodedT = T; + return; + // We could see an undeduced auto type here during error recovery. // Just ignore it. case Type::Auto: @@ -8293,7 +8299,6 @@ return; case Type::Pipe: - case Type::BitInt: #define ABSTRACT_TYPE(KIND, BASE) #define TYPE(KIND, BASE) #define DEPENDENT_TYPE(KIND, BASE) \ Index: clang/test/CodeGenObjC/encode-test-bitint.m =================================================================== --- /dev/null +++ clang/test/CodeGenObjC/encode-test-bitint.m @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -triple i686-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -fblocks -emit-llvm -o /dev/null %s + +// Using a _BitInt as a block parameter or return type previously would crash +// when getting the ObjC encoding for the type. Verify that we no longer crash, +// but do not verify any particular encoding (one has not yet been determined). +void foo1(void) +{ + __auto_type blk = ^int(unsigned _BitInt(64) len) + { + return 12; + }; +} + +void foo2(void) +{ + __auto_type blk = ^unsigned _BitInt(64)(int len) + { + return 12; + }; +} +