From 3d170a82c49e89c2ce1cca24ae11285c9ca8b053 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Fri, 9 Feb 2018 10:07:26 -0800 Subject: [PATCH] [clang] translate lambdas that capture `this` Summary: Capturing this is implicit in the Clang AST. Reviewed By: da319 Differential Revision: D6933848 fbshipit-source-id: 7ab9ae9 --- infer/src/clang/cTrans.ml | 20 ++- .../cpp/shared/lambda/lambda1.cpp | 20 +++ .../cpp/shared/lambda/lambda1.cpp.dot | 142 ++++++++++++++++++ 3 files changed, 175 insertions(+), 7 deletions(-) diff --git a/infer/src/clang/cTrans.ml b/infer/src/clang/cTrans.ml index 261491a3a..3110dd313 100644 --- a/infer/src/clang/cTrans.ml +++ b/infer/src/clang/cTrans.ml @@ -674,7 +674,7 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s empty_res_trans - let get_this_exp_typ stmt_info ?class_qual_type {CContext.curr_class; tenv; procdesc} = + let get_this_pvar_typ stmt_info ?class_qual_type {CContext.curr_class; tenv; procdesc} = let class_qual_type = match class_qual_type with | Some class_qual_type -> @@ -686,11 +686,11 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s let procname = Procdesc.get_proc_name procdesc in let name = CFrontend_config.this in let pvar = Pvar.mk (Mangled.from_string name) procname in - (Exp.Lvar pvar, CType_decl.qual_type_to_sil_type tenv class_qual_type) - + (pvar, CType_decl.qual_type_to_sil_type tenv class_qual_type) let this_expr_trans stmt_info ?class_qual_type trans_state sil_loc = - let exps = [get_this_exp_typ stmt_info ?class_qual_type trans_state.context] in + let this_pvar, this_typ = get_this_pvar_typ stmt_info ?class_qual_type trans_state.context in + let exps = [(Exp.Lvar this_pvar, this_typ)] in (* there is no cast operation in AST, but backend needs it *) dereference_value_from_result sil_loc {empty_res_trans with exps} ~strip_pointer:false @@ -2655,7 +2655,8 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s | _ -> L.die ExternalError "Unexpected: capture-init statement without var decl" in - let translate_captured {Clang_ast_t.lci_captured_var; lci_init_captured_vardecl} + let translate_captured + {Clang_ast_t.lci_captured_var; lci_init_captured_vardecl; lci_capture_this} ((trans_results_acc, captured_vars_acc) as acc) = match (lci_captured_var, lci_init_captured_vardecl) with | Some captured_var_decl_ref, Some init_decl -> @@ -2668,9 +2669,14 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s let pvar_typ = get_captured_pvar_typ captured_var_decl_ref in (trans_results_acc, make_captured_tuple pvar_typ :: captured_vars_acc) | None, None -> - acc + if lci_capture_this then + (* captured [this] *) + let this_typ = get_this_pvar_typ stmt_info context in + (trans_results_acc, make_captured_tuple this_typ :: captured_vars_acc) + else acc | None, Some _ -> - L.die InternalError "Capture-init with init, but no capture" + CFrontend_config.incorrect_assumption __POS__ stmt_info.Clang_ast_t.si_source_range + "Capture-init with init, but no capture" in let lei_captures = CMethod_trans.get_captures_from_cpp_lambda lei_lambda_decl in let trans_results, captured_vars = diff --git a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp index 9bbfd8238..76958d6c9 100644 --- a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp +++ b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp @@ -49,3 +49,23 @@ int init_capture2() { return [ a = i, b = 0, c = 3 ]() { return a + b + c; } (); } + +class Capture { + void capture_this_explicit() { + auto lambda = [this]() { return this; }; + } + + void capture_star_this() { + auto lambda = [*this](){ + + }; + } + + void capture_this_with_equal() { + auto lambda = [=]() { return this; }; + } + + void capture_this_with_auto() { + auto lambda = [&]() { return this; }; + } +}; diff --git a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot index 9e66d156d..aede50c0e 100644 --- a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot @@ -129,6 +129,64 @@ digraph cfg { "init_capture2#11582143449720942167.039b5039af3b7807e4b00950523a9f3a_7" -> "init_capture2#11582143449720942167.039b5039af3b7807e4b00950523a9f3a_5" ; +"capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_1" [label="1: Start Capture_capture_this_explicit\nFormals: this:Capture*\nLocals: lambda:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19 0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19 \n DECLARE_LOCALS(&return,&lambda,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 54, column 3]\n " color=yellow style=filled] + + + "capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_1" -> "capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_3" ; +"capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_2" [label="2: Exit Capture_capture_this_explicit \n " color=yellow style=filled] + + +"capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19=(_fun_Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_operator(),&this) [line 55, column 19]\n _fun_Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_(&lambda:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19*,&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19&) [line 55, column 19]\n " shape="box"] + + + "capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_3" -> "capture_this_explicit#Capture#(13194085360619722149).2dba35a78268b10ad413414cc832a8f0_2" ; +"capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_1" [label="1: Start Capture_capture_star_this\nFormals: this:Capture*\nLocals: lambda:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19 0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19 \n DECLARE_LOCALS(&return,&lambda,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 58, column 3]\n " color=yellow style=filled] + + + "capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_1" -> "capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_3" ; +"capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_2" [label="2: Exit Capture_capture_star_this \n " color=yellow style=filled] + + +"capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19=(_fun_Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_operator(),&this) [line 59, column 19]\n _fun_Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_(&lambda:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19*,&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19&) [line 59, column 19]\n " shape="box"] + + + "capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_3" -> "capture_star_this#Capture#(2506493005619132138).63fd6aa2a7efbd48dc1a62c0c2bd2161_2" ; +"capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_1" [label="1: Start Capture_capture_this_with_equal\nFormals: this:Capture*\nLocals: lambda:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19 0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19 \n DECLARE_LOCALS(&return,&lambda,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 64, column 3]\n " color=yellow style=filled] + + + "capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_1" -> "capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_3" ; +"capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_2" [label="2: Exit Capture_capture_this_with_equal \n " color=yellow style=filled] + + +"capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19=(_fun_Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_operator(),&this) [line 65, column 19]\n _fun_Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_(&lambda:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19*,&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19&) [line 65, column 19]\n " shape="box"] + + + "capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_3" -> "capture_this_with_equal#Capture#(805776379555510952).ecd73e9a4e2bef0d060a242b61508f10_2" ; +"capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_1" [label="1: Start Capture_capture_this_with_auto\nFormals: this:Capture*\nLocals: lambda:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19 0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19 \n DECLARE_LOCALS(&return,&lambda,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 68, column 3]\n " color=yellow style=filled] + + + "capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_1" -> "capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_3" ; +"capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_2" [label="2: Exit Capture_capture_this_with_auto \n " color=yellow style=filled] + + +"capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19=(_fun_Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_operator(),&this) [line 69, column 19]\n _fun_Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_(&lambda:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19*,&0$?%__sil_tmpSIL_materialize_temp__n$0:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19&) [line 69, column 19]\n " shape="box"] + + + "capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_3" -> "capture_this_with_auto#Capture#(15696525048884093218).38be242109186a45cc282c38962c68e2_2" ; +"Capture#Capture#{12117490113068134497|constexpr}.98ffcc03a8acaf01f37e687e09517440_1" [label="1: Start Capture_Capture\nFormals: this:Capture* __param_0:Capture&\nLocals: \n DECLARE_LOCALS(&return); [line 53, column 7]\n " color=yellow style=filled] + + + "Capture#Capture#{12117490113068134497|constexpr}.98ffcc03a8acaf01f37e687e09517440_1" -> "Capture#Capture#{12117490113068134497|constexpr}.98ffcc03a8acaf01f37e687e09517440_2" ; +"Capture#Capture#{12117490113068134497|constexpr}.98ffcc03a8acaf01f37e687e09517440_2" [label="2: Exit Capture_Capture \n " color=yellow style=filled] + + +"Capture#Capture#{15371931494294124755|constexpr}.9ede96f2e081983279c43accbd64cbd2_1" [label="1: Start Capture_Capture\nFormals: this:Capture* __param_0:Capture const &\nLocals: \n DECLARE_LOCALS(&return); [line 53, column 7]\n " color=yellow style=filled] + + + "Capture#Capture#{15371931494294124755|constexpr}.9ede96f2e081983279c43accbd64cbd2_1" -> "Capture#Capture#{15371931494294124755|constexpr}.9ede96f2e081983279c43accbd64cbd2_2" ; +"Capture#Capture#{15371931494294124755|constexpr}.9ede96f2e081983279c43accbd64cbd2_2" [label="2: Exit Capture_Capture \n " color=yellow style=filled] + + "operator()#lambda_shared_lambda_lambda1.cpp:11:15#bar#(7708532531154088338).366f354811e123a58e7def3a604b1046_1" [label="1: Start bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()\nFormals: this:bar::lambda_shared_lambda_lambda1.cpp:11:15*\nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 11, column 18]\n " color=yellow style=filled] @@ -249,4 +307,88 @@ digraph cfg { "operator()#lambda_shared_lambda_lambda1.cpp:49:10#init_capture2#(10943089228143620310).7e4ba21e8ca9ff39a89b363b4c5d845b_3" -> "operator()#lambda_shared_lambda_lambda1.cpp:49:10#init_capture2#(10943089228143620310).7e4ba21e8ca9ff39a89b363b4c5d845b_2" ; +"operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_1" [label="1: Start Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_operator()\nFormals: this:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19*\nLocals: \n DECLARE_LOCALS(&return); [line 55, column 26]\n " color=yellow style=filled] + + + "operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_1" -> "operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_3" ; +"operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_2" [label="2: Exit Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_operator() \n " color=yellow style=filled] + + +"operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_3" [label="3: Return Stmt \n n$0=*&this:Capture* [line 55, column 37]\n *&return:Capture*=n$0 [line 55, column 30]\n " shape="box"] + + + "operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_3" -> "operator()#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#(1084455887557995828.5f0b81c0997b564513af8916b5468947_2" ; +"#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_1" [label="1: Start Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_\nFormals: this:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19* __param_0:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19&\nLocals: \n DECLARE_LOCALS(&return); [line 55, column 19]\n " color=yellow style=filled] + + + "#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_1" -> "#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_3" ; +"#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_2" [label="2: Exit Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19_ \n " color=yellow style=filled] + + +"#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_3" [label="3: Constructor Init \n n$0=*&this:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19* [line 55, column 19]\n n$1=*&__param_0:Capture::capture_this_explicit::lambda_shared_lambda_lambda1.cpp:55:19& [line 55, column 19]\n n$2=*n$1.:Capture* [line 55, column 19]\n *n$0.:Capture*=n$2 [line 55, column 19]\n " shape="box"] + + + "#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_3" -> "#lambda_shared_lambda_lambda1.cpp:55:19#capture_this_explicit#Capture#{15581681824770184595|constexp.ec00a7d90451e0c7680026716c904b92_2" ; +"operator()#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#(11891233366713773989).7fdd5551697df84cd5fe07ec280b3564_1" [label="1: Start Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_operator()\nFormals: this:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19*\nLocals: \n DECLARE_LOCALS(&return); [line 59, column 27]\n " color=yellow style=filled] + + + "operator()#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#(11891233366713773989).7fdd5551697df84cd5fe07ec280b3564_1" -> "operator()#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#(11891233366713773989).7fdd5551697df84cd5fe07ec280b3564_2" ; +"operator()#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#(11891233366713773989).7fdd5551697df84cd5fe07ec280b3564_2" [label="2: Exit Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_operator() \n " color=yellow style=filled] + + +"#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_1" [label="1: Start Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_\nFormals: this:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19* __param_0:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19&\nLocals: \n DECLARE_LOCALS(&return); [line 59, column 19]\n " color=yellow style=filled] + + + "#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_1" -> "#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_3" ; +"#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_2" [label="2: Exit Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19_ \n " color=yellow style=filled] + + +"#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_3" [label="3: Constructor Init \n n$0=*&this:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19* [line 59, column 19]\n n$1=*&__param_0:Capture::capture_star_this::lambda_shared_lambda_lambda1.cpp:59:19& [line 59, column 19]\n _fun_Capture_Capture(n$0.:Capture*,n$1.:Capture&) [line 59, column 19]\n " shape="box"] + + + "#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_3" -> "#lambda_shared_lambda_lambda1.cpp:59:19#capture_star_this#Capture#{9456129203468966420|constexpr}.4865d22cd69692723766b951221a21d1_2" ; +"operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_1" [label="1: Start Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_operator()\nFormals: this:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19*\nLocals: \n DECLARE_LOCALS(&return); [line 65, column 23]\n " color=yellow style=filled] + + + "operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_1" -> "operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_3" ; +"operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_2" [label="2: Exit Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_operator() \n " color=yellow style=filled] + + +"operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_3" [label="3: Return Stmt \n n$0=*&this:Capture* [line 65, column 34]\n *&return:Capture*=n$0 [line 65, column 27]\n " shape="box"] + + + "operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_3" -> "operator()#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#(91082432562742530.7f80250f026964d947c1e499000303d8_2" ; +"#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_1" [label="1: Start Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_\nFormals: this:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19* __param_0:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19&\nLocals: \n DECLARE_LOCALS(&return); [line 65, column 19]\n " color=yellow style=filled] + + + "#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_1" -> "#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_3" ; +"#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_2" [label="2: Exit Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19_ \n " color=yellow style=filled] + + +"#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_3" [label="3: Constructor Init \n n$0=*&this:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19* [line 65, column 19]\n n$1=*&__param_0:Capture::capture_this_with_equal::lambda_shared_lambda_lambda1.cpp:65:19& [line 65, column 19]\n n$2=*n$1.:Capture* [line 65, column 19]\n *n$0.:Capture*=n$2 [line 65, column 19]\n " shape="box"] + + + "#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_3" -> "#lambda_shared_lambda_lambda1.cpp:65:19#capture_this_with_equal#Capture#{16013381636753347826|conste.6afb74b89c25ee911bcc35939b7dddc6_2" ; +"operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_1" [label="1: Start Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_operator()\nFormals: this:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19*\nLocals: \n DECLARE_LOCALS(&return); [line 69, column 23]\n " color=yellow style=filled] + + + "operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_1" -> "operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_3" ; +"operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_2" [label="2: Exit Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_operator() \n " color=yellow style=filled] + + +"operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_3" [label="3: Return Stmt \n n$0=*&this:Capture* [line 69, column 34]\n *&return:Capture*=n$0 [line 69, column 27]\n " shape="box"] + + + "operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_3" -> "operator()#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#(476955214552649307.b6b975a86b82f1e6c9bb2478f86b7473_2" ; +"#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_1" [label="1: Start Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_\nFormals: this:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19* __param_0:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19&\nLocals: \n DECLARE_LOCALS(&return); [line 69, column 19]\n " color=yellow style=filled] + + + "#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_1" -> "#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_3" ; +"#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_2" [label="2: Exit Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19_ \n " color=yellow style=filled] + + +"#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_3" [label="3: Constructor Init \n n$0=*&this:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19* [line 69, column 19]\n n$1=*&__param_0:Capture::capture_this_with_auto::lambda_shared_lambda_lambda1.cpp:69:19& [line 69, column 19]\n n$2=*n$1.:Capture* [line 69, column 19]\n *n$0.:Capture*=n$2 [line 69, column 19]\n " shape="box"] + + + "#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_3" -> "#lambda_shared_lambda_lambda1.cpp:69:19#capture_this_with_auto#Capture#{10854495330849287568|constex.8d1ac582b7a23cd3c32a1a4b8e266cf3_2" ; }