|
|
|
/* @generated */
|
|
|
|
digraph cfg {
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_1" [label="1: Start npe_property_nullable\nFormals: \nLocals: child:Person* person:Person* \n DECLARE_LOCALS(&return,&child,&person); [line 55, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_1" -> "npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_5" ;
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_2" [label="2: Exit npe_property_nullable \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_3" [label="3: Return Stmt \n n$1=*&child:Person* [line 58, column 22]\n n$0=_fun_NSString_stringWithUTF8String:(\"key\":char* const ) [line 58, column 13]\n n$2=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(n$1:objc_object*,n$0:objc_object*,null:objc_object*) [line 58, column 10]\n *&return:NSDictionary*=n$2 [line 58, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_3" -> "npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_2" ;
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_4" [label="4: DeclStmt \n n$3=*&person:Person* [line 57, column 19]\n n$4=_fun_Person_child(n$3:Person*) [line 57, column 26]\n *&child:Person*=n$4 [line 57, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_4" -> "npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_3" ;
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_5" [label="5: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(t=Person):unsigned long) [line 56, column 20]\n n$6=_fun_NSObject_init(n$5:Person*) virtual [line 56, column 20]\n *&person:Person*=n$6 [line 56, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_5" -> "npe_property_nullable.ba4461b16b55481ab8de5124734d2bf3_4" ;
|
|
|
|
"initWithName:#User#instance.e074182198c39906ef7606c27f655686_1" [label="1: Start User_initWithName:\nFormals: self:User* name:NSString*\nLocals: \nAnnotation: <_Nullable> User_initWithName:(<> <_Nullable>) \n DECLARE_LOCALS(&return); [line 31, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"initWithName:#User#instance.e074182198c39906ef7606c27f655686_1" -> "initWithName:#User#instance.e074182198c39906ef7606c27f655686_3" ;
|
|
|
|
"initWithName:#User#instance.e074182198c39906ef7606c27f655686_2" [label="2: Exit User_initWithName: \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"initWithName:#User#instance.e074182198c39906ef7606c27f655686_3" [label="3: Return Stmt \n n$0=*&self:User* [line 32, column 10]\n *&return:objc_object*=n$0 [line 32, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"initWithName:#User#instance.e074182198c39906ef7606c27f655686_3" -> "initWithName:#User#instance.e074182198c39906ef7606c27f655686_2" ;
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_1" [label="1: Start User_otherUserName\nFormals: self:User*\nLocals: ou:User* \n DECLARE_LOCALS(&return,&ou); [line 50, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_1" -> "otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_4" ;
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_2" [label="2: Exit User_otherUserName \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_3" [label="3: Return Stmt \n n$4=*&ou:User* [line 52, column 10]\n n$5=*n$4._name:NSString* [line 52, column 10]\n *&return:NSString*=n$5 [line 52, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_3" -> "otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_2" ;
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_4" [label="4: DeclStmt \n n$6=*&self:User* [line 51, column 15]\n n$7=_fun_User_otherUser(n$6:User*) virtual [line 51, column 14]\n *&ou:User*=n$7 [line 51, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_4" -> "otherUserName#User#instance.7b86b8d2191be71dec320c3203056cd7_3" ;
|
|
|
|
"tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_1" [label="1: Start User_tellMeSomething\nFormals: self:User*\nLocals: \nAnnotation: <_Nullable> User_tellMeSomething(<>) \n DECLARE_LOCALS(&return); [line 35, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_1" -> "tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_3" ;
|
|
|
|
"tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_2" [label="2: Exit User_tellMeSomething \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_3" [label="3: Return Stmt \n n$1=_fun_NSString_stringWithUTF8String:(\"Hi\":char* const ) [line 36, column 10]\n *&return:NSString*=n$1 [line 36, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_3" -> "tellMeSomething#User#instance.5ed632cdc46e048613dbc2d7030419cf_2" ;
|
|
|
|
"tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_1" [label="1: Start User_tellMeSomething:and:and:and:\nFormals: self:User* s1:NSString* s2:NSString* s3:NSString* s4:NSString*\nLocals: \nAnnotation: <> User_tellMeSomething:and:and:and:(<> <> <> <_Nullable> <>) \n DECLARE_LOCALS(&return); [line 43, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_1" -> "tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_3" ;
|
|
|
|
"tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_2" [label="2: Exit User_tellMeSomething:and:and:and: \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_3" [label="3: Return Stmt \n n$3=_fun_NSString_stringWithUTF8String:(\"Hi\":char* const ) [line 47, column 10]\n *&return:NSString*=n$3 [line 47, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_3" -> "tellMeSomething:and:and:and:#User#instance.eedc1cc1313630d342198a5528c9eaec_2" ;
|
|
|
|
"tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_1" [label="1: Start User_tellMeSomethingNotNullable\nFormals: self:User*\nLocals: \n DECLARE_LOCALS(&return); [line 39, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_1" -> "tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_3" ;
|
|
|
|
"tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_2" [label="2: Exit User_tellMeSomethingNotNullable \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_3" [label="3: Return Stmt \n n$2=_fun_NSString_stringWithUTF8String:(\"Hi\":char* const ) [line 40, column 10]\n *&return:NSString*=n$2 [line 40, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_3" -> "tellMeSomethingNotNullable#User#instance.245a0cd3ebd907a23c846151021de342_2" ;
|
|
|
|
}
|