mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[ASTDumper] Fix malformed JSON for async let _ = ....
By calling `printCommon` twice, this inserts a JSON object into another JSON object without a key. This asserts inside LLVM's JSON helper, but only if the compiler is built with assertions enabled (which Xcode's compiler doesn't). This also fixes the S-expression version, which is similarly busted: ``` (pattern_entry (async_let type="Int" (pattern_any type="Int") (original_init=call_expr type="Int" ... ```
This commit is contained in:
@@ -1913,10 +1913,8 @@ namespace {
|
|||||||
printFoot();
|
printFoot();
|
||||||
}
|
}
|
||||||
void visitAnyPattern(AnyPattern *P, Label label) {
|
void visitAnyPattern(AnyPattern *P, Label label) {
|
||||||
if (P->isAsyncLet()) {
|
|
||||||
printCommon(P, "async_let ", label);
|
|
||||||
}
|
|
||||||
printCommon(P, "pattern_any", label);
|
printCommon(P, "pattern_any", label);
|
||||||
|
printFlag(P->isAsyncLet(), "async_let", DeclModifierColor);
|
||||||
printFoot();
|
printFoot();
|
||||||
}
|
}
|
||||||
void visitTypedPattern(TypedPattern *P, Label label) {
|
void visitTypedPattern(TypedPattern *P, Label label) {
|
||||||
|
|||||||
@@ -503,3 +503,11 @@ func outerFn() {
|
|||||||
}
|
}
|
||||||
innerFun(shouldRecurse: true)
|
innerFun(shouldRecurse: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Regression test: Discarded async lets were calling `printCommon` twice,
|
||||||
|
// which resulted in invalid JSON (and not-so-great S-expression output)
|
||||||
|
// either.
|
||||||
|
func discardedAsyncLet() async {
|
||||||
|
func someTask() async {}
|
||||||
|
async let _ = someTask()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user