[clang] translate UsingDecl

Summary:
We would previously skip any function that had one of these.
A no-op translation is sufficient to fix this issue (see new E2E test).

Reviewed By: mbouaziz

Differential Revision: D6317323

fbshipit-source-id: 0855bd8
master
Sam Blackshear 7 years ago committed by Facebook Github Bot
parent 2ff05385dc
commit d90bc24657

@ -2274,7 +2274,7 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
| (RecordDecl _) :: _ -> | (RecordDecl _) :: _ ->
(* Case for struct *) (* Case for struct *)
collect_all_decl trans_state decl_list succ_nodes stmt_info collect_all_decl trans_state decl_list succ_nodes stmt_info
| (TypedefDecl _) :: _ | (UsingDirectiveDecl _) :: _ -> | (TypedefDecl _ | UsingDecl _ | UsingDirectiveDecl _) :: _ ->
empty_res_trans empty_res_trans
| decl :: _ -> | decl :: _ ->
CFrontend_config.unimplemented "In DeclStmt found an unknown declaration type %s" CFrontend_config.unimplemented "In DeclStmt found an unknown declaration type %s"

@ -289,6 +289,7 @@ codetoanalyze/cpp/shared/methods/virtual_methods.cpp, tri_area, 5, DIVIDE_BY_ZER
codetoanalyze/cpp/shared/methods/virtual_methods.cpp, tri_not_virtual_area, 5, DIVIDE_BY_ZERO, [start of procedure tri_not_virtual_area(),start of procedure Triangle,start of procedure Polygon,return from a call to Polygon_Polygon,return from a call to Triangle_Triangle,start of procedure Polygon,return from a call to Polygon_Polygon,start of procedure set_values,return from a call to Polygon_set_values,start of procedure area,return from a call to Polygon_area] codetoanalyze/cpp/shared/methods/virtual_methods.cpp, tri_not_virtual_area, 5, DIVIDE_BY_ZERO, [start of procedure tri_not_virtual_area(),start of procedure Triangle,start of procedure Polygon,return from a call to Polygon_Polygon,return from a call to Triangle_Triangle,start of procedure Polygon,return from a call to Polygon_Polygon,start of procedure set_values,return from a call to Polygon_set_values,start of procedure area,return from a call to Polygon_area]
codetoanalyze/cpp/shared/namespace/function.cpp, div0_namespace_resolution, 0, DIVIDE_BY_ZERO, [start of procedure div0_namespace_resolution(),start of procedure f1::get(),return from a call to f1::get,start of procedure f2::get(),return from a call to f2::get] codetoanalyze/cpp/shared/namespace/function.cpp, div0_namespace_resolution, 0, DIVIDE_BY_ZERO, [start of procedure div0_namespace_resolution(),start of procedure f1::get(),return from a call to f1::get,start of procedure f2::get(),return from a call to f2::get]
codetoanalyze/cpp/shared/namespace/function.cpp, div0_using, 2, DIVIDE_BY_ZERO, [start of procedure div0_using(),start of procedure f1::get0(),return from a call to f1::get0] codetoanalyze/cpp/shared/namespace/function.cpp, div0_using, 2, DIVIDE_BY_ZERO, [start of procedure div0_using(),start of procedure f1::get0(),return from a call to f1::get0]
codetoanalyze/cpp/shared/namespace/function.cpp, using_div0, 2, DIVIDE_BY_ZERO, [start of procedure using_div0(),start of procedure ret_zero,return from a call to f3::C_ret_zero]
codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_namepace_res, 3, DIVIDE_BY_ZERO, [start of procedure div0_namepace_res()] codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_namepace_res, 3, DIVIDE_BY_ZERO, [start of procedure div0_namepace_res()]
codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_static_field, 3, DIVIDE_BY_ZERO, [start of procedure div0_static_field()] codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_static_field, 3, DIVIDE_BY_ZERO, [start of procedure div0_static_field()]
codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_static_field_member_access, 3, DIVIDE_BY_ZERO, [start of procedure div0_static_field_member_access()] codetoanalyze/cpp/shared/namespace/global_variable.cpp, div0_static_field_member_access, 3, DIVIDE_BY_ZERO, [start of procedure div0_static_field_member_access()]

@ -22,3 +22,15 @@ int div0_using() {
} }
int div0_namespace_resolution() { return 1 / (f1::get() + f2::get()); } int div0_namespace_resolution() { return 1 / (f1::get() + f2::get()); }
namespace f3 {
class C {
public:
static int ret_zero() { return 0; }
};
} // namespace f3
int using_div0() {
using f3::C;
return 1 / C::ret_zero();
}

@ -55,4 +55,26 @@ digraph iCFG {
"div0_namespace_resolution#14165120127941064123.2433829c6d52c7e69a43e89e30e4c7fc_3" -> "div0_namespace_resolution#14165120127941064123.2433829c6d52c7e69a43e89e30e4c7fc_2" ; "div0_namespace_resolution#14165120127941064123.2433829c6d52c7e69a43e89e30e4c7fc_3" -> "div0_namespace_resolution#14165120127941064123.2433829c6d52c7e69a43e89e30e4c7fc_2" ;
"using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_1" [label="1: Start using_div0\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 33, column 1]\n " color=yellow style=filled]
"using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_1" -> "using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_3" ;
"using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_2" [label="2: Exit using_div0 \n " color=yellow style=filled]
"using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_3" [label="3: Return Stmt \n n$0=_fun_f3::C_ret_zero() [line 35, column 14]\n *&return:int=(1 / n$0) [line 35, column 3]\n " shape="box"]
"using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_3" -> "using_div0#15267107907897398237.0f32134dc9668df527885e12e16348fe_2" ;
"ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_1" [label="1: Start f3::C_ret_zero\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29, column 3]\n " color=yellow style=filled]
"ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_1" -> "ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_3" ;
"ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_2" [label="2: Exit f3::C_ret_zero \n " color=yellow style=filled]
"ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_3" [label="3: Return Stmt \n *&return:int=0 [line 29, column 27]\n " shape="box"]
"ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_3" -> "ret_zero#C#f3#(14815103288805165028).4dbfdc84a3e84f15300709ed03f3f5c1_2" ;
} }

Loading…
Cancel
Save