Build error GetRootCall is ambiguous

tvm version 0.12.0 make, gcc:11.3. I have searched on web,but there is not valid info.I changed some config item in config.cmake file.

error info is below, the code is behund the error info by the pic.

cause is: const std::vectorstd::string& is recognize the same with const std::string&

caller: GetRootCall(body, 1, {“nn.conv2d”, add_op_type})

candidate 1(line 534):inline const CallNode* GetRootCall(const CallNode* current_call, int depth, const std::vectorstd::string& expected_op_names)

candidate 2(583):inline const CallNode* GetRootCall(const CallNode* current_call, int max_depth, const std::string& op_name)

/home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc: In member function ‘virtual std::vectortvm::runtime::json::JSONGraphNodeEntry tvm::relay::contrib::BNNSJSONSerializer::VisitExpr_(const tvm::relay::CallNode*)’: /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:93:27: error: call of overloaded ‘GetRootCall(const tvm::relay::CallNode&, int, )’ is ambiguous* ** 93 | call = GetRootCall(body, 1, {“nn.conv2d”, add_op_type});** | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:34: /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:534:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const std::vector<std::__cxx11::basic_string >&)’ 534 | inline const CallNode* GetRootCall(const CallNode* current_call, int depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:583:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const string&)’ 583 | inline const CallNode* GetRootCall(const CallNode* current_call, int max_depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:95:27: error: call of overloaded ‘GetRootCall(const tvm::relay::CallNode*&, int, )’ is ambiguous 95 | call = GetRootCall(body, 1, {“nn.conv2d”, “nn.relu”}); | ~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:34: /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:534:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const std::vector<std::__cxx11::basic_string >&)’ 534 | inline const CallNode* GetRootCall(const CallNode* current_call, int depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:583:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const string&)’ 583 | inline const CallNode* GetRootCall(const CallNode* current_call, int max_depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:102:27: error: call of overloaded ‘GetRootCall(const tvm::relay::CallNode*&, int, )’ is ambiguous 102 | call = GetRootCall(body, 1, {“nn.conv2d”, “sigmoid”}); | ~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:34: /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:534:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const std::vector<std::__cxx11::basic_string >&)’ 534 | inline const CallNode* GetRootCall(const CallNode* current_call, int depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/…/…/utils.h:583:24: note: candidate: ‘const tvm::relay::CallNode* tvm::relay::backend::GetRootCall(const tvm::relay::CallNode*, int, const string&)’ 583 | inline const CallNode* GetRootCall(const CallNode* current_call, int max_depth, | ^~~~~~~~~~~ /home/jiazhanbo/ai_dev/build_fold/0.12.0/apache-tvm-src-v0.12.0/src/relay/backend/contrib/bnns/codegen.cc:105:27: error: call of overloaded ‘GetRootCall(const tvm::relay::CallNode*, int, )’ is ambiguous 105 | call = GetRootCall(fn->body.as(), 1, {“nn.dense”, “add”});

the solution about this problem: the one: close the bnns in the config.make file

the second:in the bnns/codeGen.cc, change the getRootCall ’ params: from call = GetRootCall(body, 1, {“nn.conv2d”, add_op_type}); to call = GetRootCall(body, 1, {“nn.conv2d”, add_op_type,""});

the root cause is the gcc, because the bug 59389 – [C++11] bogus error: call of overloaded ‘Foo(<brace-enclosed initializer list>)’ is ambiguous