|
|
|
/* @generated */
|
|
|
|
digraph cfg {
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_1" [label="1: Start reference_field::ptr_F_div0\nFormals: \nLocals: r:reference_field::Ptr x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 81, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_1" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_7" ;
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_2" [label="2: Exit reference_field::ptr_F_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_3" [label="3: Return Stmt \n n$0=*&r.x:reference_field::X* [line 86, column 14]\n n$1=*n$0.f:int [line 86, column 14]\n *&return:int=(1 / n$1) [line 86, column 3]\n _=*&x:reference_field::X [line 86, column 19]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 86, column 19]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_3" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_2" ;
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 85, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_4" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_3" ;
|
[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
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ptr_Ptr(&r:reference_field::Ptr*,&x:reference_field::X&) [line 84, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_5" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_4" ;
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 83, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_6" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_5" ;
|
[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
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 82, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_7" -> "ptr_F_div0#reference_field#14005768761742554773.fa7bac24d70ab0b747e7fb5360157c5f_6" ;
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_1" [label="1: Start reference_field::ptr_I_div0\nFormals: \nLocals: r:reference_field::Ptr x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 89, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_1" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_7" ;
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_2" [label="2: Exit reference_field::ptr_I_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_3" [label="3: Return Stmt \n n$0=*&r.i:int* [line 94, column 15]\n n$1=*n$0:int [line 94, column 14]\n *&return:int=(1 / n$1) [line 94, column 3]\n _=*&x:reference_field::X [line 94, column 17]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 94, column 17]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_3" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_2" ;
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 93, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_4" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_3" ;
|
[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
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ptr_Ptr(&r:reference_field::Ptr*,&x:reference_field::X&) [line 92, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_5" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_4" ;
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 91, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_6" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_5" ;
|
[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
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 90, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_7" -> "ptr_I_div0#reference_field#18255668366877010738.5b1f39b2d5e2810cbdbf96621d88c2d0_6" ;
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_1" [label="1: Start reference_field::ptr_getF_div0\nFormals: \nLocals: r:reference_field::Ptr x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 97, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_1" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_7" ;
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_2" [label="2: Exit reference_field::ptr_getF_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_3" [label="3: Return Stmt \n _=*&r:reference_field::Ptr [line 102, column 14]\n n$1=_fun_reference_field::Ptr_getF(&r:reference_field::Ptr&) [line 102, column 14]\n *&return:int=(1 / n$1) [line 102, column 3]\n _=*&x:reference_field::X [line 102, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 102, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_3" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_2" ;
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 101, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_4" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_3" ;
|
[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
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ptr_Ptr(&r:reference_field::Ptr*,&x:reference_field::X&) [line 100, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_5" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_4" ;
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 99, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_6" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_5" ;
|
[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
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 98, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_7" -> "ptr_getF_div0#reference_field#3337646019334387234.41e241b3e1d6a6f7c629a1c6ca69cf07_6" ;
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_1" [label="1: Start reference_field::ptr_getI_div0\nFormals: \nLocals: r:reference_field::Ptr x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 105, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_1" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_7" ;
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_2" [label="2: Exit reference_field::ptr_getI_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_3" [label="3: Return Stmt \n _=*&r:reference_field::Ptr [line 110, column 14]\n n$1=_fun_reference_field::Ptr_getI(&r:reference_field::Ptr&) [line 110, column 14]\n *&return:int=(1 / n$1) [line 110, column 3]\n _=*&x:reference_field::X [line 110, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 110, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_3" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_2" ;
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 109, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_4" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_3" ;
|
[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
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ptr_Ptr(&r:reference_field::Ptr*,&x:reference_field::X&) [line 108, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_5" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_4" ;
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 107, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_6" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_5" ;
|
[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
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 106, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_7" -> "ptr_getI_div0#reference_field#2818660867908728453.99667cea541002986498839338031f13_6" ;
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_1" [label="1: Start reference_field::ref_F_div0\nFormals: \nLocals: r:reference_field::Ref x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 48, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_1" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_7" ;
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_2" [label="2: Exit reference_field::ref_F_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_3" [label="3: Return Stmt \n n$0=*&r.x:reference_field::X& [line 53, column 14]\n n$1=*n$0.f:int [line 53, column 14]\n *&return:int=(1 / n$1) [line 53, column 3]\n _=*&x:reference_field::X [line 53, column 18]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 53, column 18]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_3" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_2" ;
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 52, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_4" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_3" ;
|
[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
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ref_Ref(&r:reference_field::Ref*,&x:reference_field::X&) [line 51, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_5" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_4" ;
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 50, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_6" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_5" ;
|
[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
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 49, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_7" -> "ref_F_div0#reference_field#11041134718140208132.6e58f8c7050613499e915a7d12b0f081_6" ;
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_1" [label="1: Start reference_field::ref_I_div0\nFormals: \nLocals: r:reference_field::Ref x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 56, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_1" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_7" ;
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_2" [label="2: Exit reference_field::ref_I_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_3" [label="3: Return Stmt \n n$0=*&r.i:int& [line 61, column 14]\n n$1=*n$0:int [line 61, column 14]\n *&return:int=(1 / n$1) [line 61, column 3]\n _=*&x:reference_field::X [line 61, column 16]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 61, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_3" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_2" ;
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 60, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_4" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_3" ;
|
[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
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ref_Ref(&r:reference_field::Ref*,&x:reference_field::X&) [line 59, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_5" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_4" ;
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 58, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_6" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_5" ;
|
[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
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 57, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_7" -> "ref_I_div0#reference_field#12578013844532400739.b911fdef1ca9c73b658bff3d5d964b9b_6" ;
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_1" [label="1: Start reference_field::ref_getF_div0\nFormals: \nLocals: r:reference_field::Ref x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 64, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_1" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_7" ;
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_2" [label="2: Exit reference_field::ref_getF_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_3" [label="3: Return Stmt \n _=*&r:reference_field::Ref [line 69, column 14]\n n$1=_fun_reference_field::Ref_getF(&r:reference_field::Ref&) [line 69, column 14]\n *&return:int=(1 / n$1) [line 69, column 3]\n _=*&x:reference_field::X [line 69, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 69, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_3" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_2" ;
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 68, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_4" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_3" ;
|
[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
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ref_Ref(&r:reference_field::Ref*,&x:reference_field::X&) [line 67, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_5" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_4" ;
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 66, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_6" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_5" ;
|
[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
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 65, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_7" -> "ref_getF_div0#reference_field#2481930918988851369.2dc7181f26bf9bad7c2f06846f4d7ec4_6" ;
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_1" [label="1: Start reference_field::ref_getI_div0\nFormals: \nLocals: r:reference_field::Ref x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 72, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_1" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_7" ;
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_2" [label="2: Exit reference_field::ref_getI_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_3" [label="3: Return Stmt \n _=*&r:reference_field::Ref [line 77, column 14]\n n$1=_fun_reference_field::Ref_getI(&r:reference_field::Ref&) [line 77, column 14]\n *&return:int=(1 / n$1) [line 77, column 3]\n _=*&x:reference_field::X [line 77, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 77, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_3" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_2" ;
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 76, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_4" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_3" ;
|
[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
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Ref_Ref(&r:reference_field::Ref*,&x:reference_field::X&) [line 75, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_5" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_4" ;
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 74, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_6" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_5" ;
|
[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
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 73, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_7" -> "ref_getI_div0#reference_field#17267881158640772750.8919328183561d84930ec2a40da70667_6" ;
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_1" [label="1: Start reference_field::val_F_div0\nFormals: \nLocals: r:reference_field::Val x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 114, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_1" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_7" ;
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_2" [label="2: Exit reference_field::val_F_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_3" [label="3: Return Stmt \n n$0=*&r.x.f:int [line 119, column 14]\n *&return:int=(1 / n$0) [line 119, column 3]\n _=*&x:reference_field::X [line 119, column 18]\n n$2=_fun_reference_field::X_~X(&x:reference_field::X*) [line 119, column 18]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_3" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_2" ;
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 118, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_4" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_3" ;
|
[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
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_5" [label="5: DeclStmt \n n$4=_fun_reference_field::Val_Val(&r:reference_field::Val*,&x:reference_field::X&) [line 117, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_5" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_4" ;
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 116, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_6" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_5" ;
|
[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
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_7" [label="7: DeclStmt \n n$5=_fun_reference_field::X_X(&x:reference_field::X*) [line 115, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_7" -> "val_F_div0#reference_field#8428286850923379914.8fdee85eabf77b0016437fa0006d373c_6" ;
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_1" [label="1: Start reference_field::val_I_div0\nFormals: \nLocals: r:reference_field::Val x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 122, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_1" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_7" ;
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_2" [label="2: Exit reference_field::val_I_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_3" [label="3: Return Stmt \n n$0=*&r.i:int [line 127, column 14]\n *&return:int=(1 / n$0) [line 127, column 3]\n _=*&x:reference_field::X [line 127, column 16]\n n$2=_fun_reference_field::X_~X(&x:reference_field::X*) [line 127, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_3" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_2" ;
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 126, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_4" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_3" ;
|
[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
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_5" [label="5: DeclStmt \n n$4=_fun_reference_field::Val_Val(&r:reference_field::Val*,&x:reference_field::X&) [line 125, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_5" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_4" ;
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 124, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_6" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_5" ;
|
[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
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_7" [label="7: DeclStmt \n n$5=_fun_reference_field::X_X(&x:reference_field::X*) [line 123, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_7" -> "val_I_div0#reference_field#17788064844610257149.11b45a3e82e229e7a7714480217c1af3_6" ;
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_1" [label="1: Start reference_field::val_getF_div0\nFormals: \nLocals: r:reference_field::Val x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 130, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_1" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_7" ;
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_2" [label="2: Exit reference_field::val_getF_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_3" [label="3: Return Stmt \n _=*&r:reference_field::Val [line 135, column 14]\n n$1=_fun_reference_field::Val_getF(&r:reference_field::Val&) [line 135, column 14]\n *&return:int=(1 / n$1) [line 135, column 3]\n _=*&x:reference_field::X [line 135, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 135, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_3" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_2" ;
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 134, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_4" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_3" ;
|
[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
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Val_Val(&r:reference_field::Val*,&x:reference_field::X&) [line 133, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_5" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_4" ;
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 132, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_6" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_5" ;
|
[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
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 131, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_7" -> "val_getF_div0#reference_field#16910887455441500799.24fc3c9591435f1b92c06c5c7da4bd2e_6" ;
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_1" [label="1: Start reference_field::val_getI_div0\nFormals: \nLocals: r:reference_field::Val x:reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 138, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_1" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_7" ;
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_2" [label="2: Exit reference_field::val_getI_div0 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_3" [label="3: Return Stmt \n _=*&r:reference_field::Val [line 143, column 14]\n n$1=_fun_reference_field::Val_getI(&r:reference_field::Val&) [line 143, column 14]\n *&return:int=(1 / n$1) [line 143, column 3]\n _=*&x:reference_field::X [line 143, column 21]\n n$3=_fun_reference_field::X_~X(&x:reference_field::X*) [line 143, column 21]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_3" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_2" ;
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_4" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int=1 [line 142, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_4" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_3" ;
|
[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
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_5" [label="5: DeclStmt \n n$5=_fun_reference_field::Val_Val(&r:reference_field::Val*,&x:reference_field::X&) [line 141, column 7]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_5" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_4" ;
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_6" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int=0 [line 140, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_6" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_5" ;
|
[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
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_7" [label="7: DeclStmt \n n$6=_fun_reference_field::X_X(&x:reference_field::X*) [line 139, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_7" -> "val_getI_div0#reference_field#1916539470996695608.683d462cf87abbc81874a14e4872564a_6" ;
|
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_1" [label="1: Start reference_field::Ptr_Ptr\nFormals: this:reference_field::Ptr* r_:reference_field::X&\nLocals: \n DECLARE_LOCALS(&return); [line 34, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_1" -> "Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_4" ;
|
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_2" [label="2: Exit reference_field::Ptr_Ptr \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
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_3" [label="3: Constructor Init \n n$2=*&this:reference_field::Ptr* [line 34, column 24]\n n$3=*&this:reference_field::Ptr* [line 34, column 27]\n n$4=*n$3.x:reference_field::X* [line 34, column 27]\n *n$2.i:int*=n$4.f [line 34, column 24]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_3" -> "Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_2" ;
|
[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
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_4" [label="4: Constructor Init \n n$5=*&this:reference_field::Ptr* [line 34, column 16]\n n$6=*&r_:reference_field::X& [line 34, column 19]\n *n$5.x:reference_field::X*=n$6 [line 34, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_4" -> "Ptr#Ptr#reference_field#{6088279996118893652}.360bbf008525cb3c23d8ada20f2a72af_3" ;
|
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_1" [label="1: Start reference_field::Ref_Ref\nFormals: this:reference_field::Ref* r_:reference_field::X&\nLocals: \n DECLARE_LOCALS(&return); [line 26, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_1" -> "Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_4" ;
|
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_2" [label="2: Exit reference_field::Ref_Ref \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
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_3" [label="3: Constructor Init \n n$2=*&this:reference_field::Ref* [line 26, column 23]\n n$3=*&this:reference_field::Ref* [line 26, column 25]\n n$4=*n$3.x:reference_field::X& [line 26, column 25]\n *n$2.i:int&=n$4.f [line 26, column 23]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_3" -> "Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_2" ;
|
[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
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_4" [label="4: Constructor Init \n n$5=*&this:reference_field::Ref* [line 26, column 16]\n n$6=*&r_:reference_field::X& [line 26, column 18]\n *n$5.x:reference_field::X&=n$6 [line 26, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_4" -> "Ref#Ref#reference_field#{1778104277749367423}.02a281ecc4e6bde89182d1ef952810a2_3" ;
|
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_1" [label="1: Start reference_field::Val_Val\nFormals: this:reference_field::Val* r_:reference_field::X&\nLocals: \n DECLARE_LOCALS(&return); [line 42, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_1" -> "Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_4" ;
|
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_2" [label="2: Exit reference_field::Val_Val \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
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_3" [label="3: Constructor Init \n n$2=*&this:reference_field::Val* [line 42, column 23]\n n$3=*&this:reference_field::Val* [line 42, column 25]\n n$4=*n$3.x.f:int [line 42, column 25]\n *n$2.i:int=n$4 [line 42, column 23]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_3" -> "Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_2" ;
|
[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
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_4" [label="4: Constructor Init \n n$5=*&this:reference_field::Val* [line 42, column 16]\n n$6=*&r_:reference_field::X& [line 42, column 18]\n n$7=_fun_reference_field::X_X(n$5.x:reference_field::X*,n$6:reference_field::X&) [line 42, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_4" -> "Val#Val#reference_field#{10086609758499948489}.3f0d77ba0039a38103c912b5065ccdaa_3" ;
|
|
|
|
"X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_1" [label="1: Start reference_field::X_X\nFormals: this:reference_field::X* __param_0:reference_field::X const &\nLocals: \n DECLARE_LOCALS(&return); [line 12, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_1" -> "X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_3" ;
|
|
|
|
"X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_2" [label="2: Exit reference_field::X_X \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
|
|
|
"X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_3" [label="3: Constructor Init \n n$2=*&this:reference_field::X* [line 12, column 8]\n n$3=*&__param_0:reference_field::X const & [line 12, column 8]\n n$4=*n$3.f:int [line 12, column 8]\n *n$2.f:int=n$4 [line 12, column 8]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_3" -> "X#X#reference_field#{16892162000533972663|constexpr}.d3ad2332bde2031935fecc6685296b44_2" ;
|
|
|
|
"X#X#reference_field#{2751762285772383996}.b7c8700d1b15a5db2c677bfc2eb37a5f_1" [label="1: Start reference_field::X_X\nFormals: this:reference_field::X*\nLocals: \n DECLARE_LOCALS(&return); [line 12, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X#X#reference_field#{2751762285772383996}.b7c8700d1b15a5db2c677bfc2eb37a5f_1" -> "X#X#reference_field#{2751762285772383996}.b7c8700d1b15a5db2c677bfc2eb37a5f_2" ;
|
|
|
|
"X#X#reference_field#{2751762285772383996}.b7c8700d1b15a5db2c677bfc2eb37a5f_2" [label="2: Exit reference_field::X_X \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_1" [label="1: Start reference_field::Ptr_getF\nFormals: this:reference_field::Ptr*\nLocals: \n DECLARE_LOCALS(&return); [line 35, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_1" -> "getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_3" ;
|
|
|
|
"getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_2" [label="2: Exit reference_field::Ptr_getF \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Ptr* [line 35, column 23]\n n$1=*n$0.x:reference_field::X* [line 35, column 23]\n n$2=*n$1.f:int [line 35, column 23]\n *&return:int=n$2 [line 35, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_3" -> "getF#Ptr#reference_field#(6867936719957773992).53c4cdb31ea7c9aac827b2830f575dd5_2" ;
|
|
|
|
"getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_1" [label="1: Start reference_field::Ref_getF\nFormals: this:reference_field::Ref*\nLocals: \n DECLARE_LOCALS(&return); [line 27, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_1" -> "getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_3" ;
|
|
|
|
"getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_2" [label="2: Exit reference_field::Ref_getF \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Ref* [line 27, column 23]\n n$1=*n$0.x:reference_field::X& [line 27, column 23]\n n$2=*n$1.f:int [line 27, column 23]\n *&return:int=n$2 [line 27, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_3" -> "getF#Ref#reference_field#(4333270831228787341).d47ae80c78316dac2e24a22fc076cf41_2" ;
|
|
|
|
"getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_1" [label="1: Start reference_field::Val_getF\nFormals: this:reference_field::Val*\nLocals: \n DECLARE_LOCALS(&return); [line 43, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_1" -> "getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_3" ;
|
|
|
|
"getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_2" [label="2: Exit reference_field::Val_getF \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Val* [line 43, column 23]\n n$1=*n$0.x.f:int [line 43, column 23]\n *&return:int=n$1 [line 43, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_3" -> "getF#Val#reference_field#(5603383781744538435).f0720826d9b8abc0c6259038f1412318_2" ;
|
|
|
|
"getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_1" [label="1: Start reference_field::Ptr_getI\nFormals: this:reference_field::Ptr*\nLocals: \n DECLARE_LOCALS(&return); [line 36, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_1" -> "getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_3" ;
|
|
|
|
"getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_2" [label="2: Exit reference_field::Ptr_getI \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Ptr* [line 36, column 24]\n n$1=*n$0.i:int* [line 36, column 24]\n n$2=*n$1:int [line 36, column 23]\n *&return:int=n$2 [line 36, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_3" -> "getI#Ptr#reference_field#(9990830118718700597).db587e508ad6680b9c85197fd72992d4_2" ;
|
|
|
|
"getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_1" [label="1: Start reference_field::Ref_getI\nFormals: this:reference_field::Ref*\nLocals: \n DECLARE_LOCALS(&return); [line 28, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_1" -> "getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_3" ;
|
|
|
|
"getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_2" [label="2: Exit reference_field::Ref_getI \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Ref* [line 28, column 23]\n n$1=*n$0.i:int& [line 28, column 23]\n n$2=*n$1:int [line 28, column 23]\n *&return:int=n$2 [line 28, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_3" -> "getI#Ref#reference_field#(11319674367674692208).ab98b8b3de535d47d4b70092fc16ce37_2" ;
|
|
|
|
"getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_1" [label="1: Start reference_field::Val_getI\nFormals: this:reference_field::Val*\nLocals: \n DECLARE_LOCALS(&return); [line 44, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_1" -> "getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_3" ;
|
|
|
|
"getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_2" [label="2: Exit reference_field::Val_getI \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_3" [label="3: Return Stmt \n n$0=*&this:reference_field::Val* [line 44, column 23]\n n$1=*n$0.i:int [line 44, column 23]\n *&return:int=n$1 [line 44, column 16]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_3" -> "getI#Val#reference_field#(5092177944978041506).c3db07b6697824cd689cc81f71b31e2a_2" ;
|
|
|
|
}
|