std::initializer_list objects can be constructed sort of explicitly, eg. (std::initializer_list<int>){12}. This produces an AST that looks like
CompoundLiteralExpr 0x11987f1a0 'std::initializer_list<int>':'class std::initializer_list<int>' `-CXXStdInitializerListExpr 0x11987f188 'std::initializer_list<int>':'class std::initializer_list<int>' `-MaterializeTemporaryExpr 0x11987f170 'const int [1]' xvalue `-InitListExpr 0x11987f128 'const int [1]' `-IntegerLiteral 0x11987cd18 'int' 12
We crash because we did not expect to see CompoundLiteralExpr containing CXXStdInitializerListExpr.
It seems correct to pass the value through CompoundLiteralExpr transparently (the value is currently a conjured structure-symbol of initializer_list type, which sounds like a correct value for the expression, even if not super verbose), hence the patch.
Empty "if" looks weird, why not just negate the condition, and then you could get rid of "else"?