Program: 130376
Project: 130376
Buggy source:
private static TypeInfo parseInnerType(@Nonnull CSharpBuilderWrapper builder,int flags,TokenSet nameStopperSet){
  TypeInfo typeInfo=new TypeInfo();
  PsiBuilder.Marker marker=builder.mark();
  boolean varSupport=BitUtil.isSet(flags,VAR_SUPPORT) && builder.getVersion().isAtLeast(CSharpLanguageVersion._2_0);
  if (varSupport) {
    builder.enableSoftKeyword(CSharpSoftTokens.VAR_KEYWORD);
  }
  IElementType tokenType=builder.getTokenType();
  if (varSupport) {
    builder.disableSoftKeyword(CSharpSoftTokens.VAR_KEYWORD);
  }
  typeInfo.marker=marker;
  if (CSharpTokenSets.NATIVE_TYPES.contains(tokenType)) {
    builder.advanceLexer();
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.NATIVE_TYPE : CSharpElements.NATIVE_TYPE);
    typeInfo.nativeElementType=tokenType;
  }
 else   if (builder.getTokenType() == CSharpTokens.LPAR) {
    builder.advanceLexer();
    if (builder.getTokenType() == CSharpTokens.RPAR) {
      builder.error("String_Node_Str");
      builder.advanceLexer();
    }
 else {
      int count=0;
      while (!builder.eof()) {
        TypeInfo inner=parseType(builder,flags);
        if (inner == null) {
          builder.error("String_Node_Str");
        }
 else {
          PsiBuilder.Marker precede=inner.marker.precede();
          if (builder.getTokenType() == CSharpTokens.IDENTIFIER) {
            doneIdentifier(builder,flags);
          }
          precede.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.TUPLE_VARIABLE : CSharpElements.TUPLE_VARIABLE);
          count++;
        }
        if (builder.getTokenType() == COMMA) {
          builder.advanceLexer();
        }
 else {
          break;
        }
      }
      if (count < 2) {
        builder.error("String_Node_Str");
      }
      expect(builder,CSharpTokens.RPAR,"String_Node_Str");
    }
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.TUPLE_TYPE : CSharpElements.TUPLE_TYPE);
  }
 else   if (builder.getTokenType() == CSharpTokens.IDENTIFIER) {
    ExpressionParsing.ReferenceInfo referenceInfo=ExpressionParsing.parseQualifiedReference(builder,null,flags,nameStopperSet);
    typeInfo.isParameterized=referenceInfo != null && referenceInfo.isParameterized;
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.USER_TYPE : CSharpElements.USER_TYPE);
  }
 else {
    marker.drop();
    return null;
  }
  return typeInfo;
}

Fixed version (ground truth):
private static TypeInfo parseInnerType(@Nonnull CSharpBuilderWrapper builder,int flags,TokenSet nameStopperSet){
  TypeInfo typeInfo=new TypeInfo();
  PsiBuilder.Marker marker=builder.mark();
  boolean varSupport=BitUtil.isSet(flags,VAR_SUPPORT) && builder.getVersion().isAtLeast(CSharpLanguageVersion._2_0);
  if (varSupport) {
    builder.enableSoftKeyword(CSharpSoftTokens.VAR_KEYWORD);
  }
  IElementType tokenType=builder.getTokenType();
  if (varSupport) {
    builder.disableSoftKeyword(CSharpSoftTokens.VAR_KEYWORD);
  }
  typeInfo.marker=marker;
  if (CSharpTokenSets.NATIVE_TYPES.contains(tokenType)) {
    builder.advanceLexer();
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.NATIVE_TYPE : CSharpElements.NATIVE_TYPE);
    typeInfo.nativeElementType=tokenType;
  }
 else   if (builder.getTokenType() == CSharpTokens.LPAR) {
    builder.advanceLexer();
    if (builder.getTokenType() == CSharpTokens.RPAR) {
      builder.error("String_Node_Str");
      builder.advanceLexer();
    }
 else {
      int count=0;
      while (!builder.eof()) {
        TypeInfo inner=parseType(builder,flags);
        if (inner == null) {
          builder.error("String_Node_Str");
        }
 else {
          PsiBuilder.Marker precede=inner.marker.precede();
          if (builder.getTokenType() == CSharpTokens.IDENTIFIER) {
            doneIdentifier(builder,flags);
          }
          precede.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.TUPLE_VARIABLE : CSharpElements.TUPLE_VARIABLE);
          count++;
        }
        if (builder.getTokenType() == COMMA) {
          builder.advanceLexer();
        }
 else {
          break;
        }
      }
      if (count < 2) {
        builder.error("String_Node_Str");
      }
      expect(builder,CSharpTokens.RPAR,"String_Node_Str");
    }
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.TUPLE_TYPE : CSharpElements.TUPLE_TYPE);
  }
 else   if (builder.getTokenType() == CSharpTokens.IDENTIFIER || builder.getTokenType() == CSharpSoftTokens.GLOBAL_KEYWORD) {
    ExpressionParsing.ReferenceInfo referenceInfo=ExpressionParsing.parseQualifiedReference(builder,null,flags,nameStopperSet);
    typeInfo.isParameterized=referenceInfo != null && referenceInfo.isParameterized;
    marker.done(BitUtil.isSet(flags,STUB_SUPPORT) ? CSharpStubElements.USER_TYPE : CSharpElements.USER_TYPE);
  }
 else {
    marker.drop();
    return null;
  }
  return typeInfo;
}