Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4.1.0 release: Invalid C++ declaration: Expected identifier in nested name #9433

Closed
jumaffre opened this issue Jul 12, 2021 · 7 comments
Closed
Assignees
Milestone

Comments

@jumaffre
Copy link

Describe the bug

After the recent upgrade to 4.1.0, we now get the following error when building documentation for the CCF project (full error in our CI):

Exception occurred:
  File "/__w/1/s/env/lib/python3.8/site-packages/sphinx/util/cfamily.py", line 275, in fail
    raise self._make_multi_error(errors, '')
sphinx.util.cfamily.DefinitionError: Invalid C++ declaration: Expected identifier in nested name. [error at 8]
  typename

This happens when reading heavily-templated C++ sources (src/kv/ folder), documented with Doxygen (1.8.13).

How to Reproduce

$ git clone https://github.com/microsoft/CCF.git
$ cd CCF
$ ./livehtml.sh

Expected behavior

No response

Your project

https://github.com/microsoft/CCF

Screenshots

No response

OS

Linux

Python version

3.8.9

Sphinx version

4.1.0

Sphinx extensions

No response

Extra tools

Doxygen

Additional context

No response

@jakobandersen
Copy link
Contributor

Thanks for reporting. However, I can't immediately reproduce the problem (though with Doxygen 1.9.1).
Which version of Breathe do you use? Try updating Breathe to the newest version, and if possible, try with a newer Doxygen.
If it still persists. try running with the following in conf.py:

breathe_debug_trace_directives = True

It looks like Breathe is feeding Sphinx some strange declarations, so that config var should log a bit more of what is going on.

@achamayou
Copy link

achamayou commented Jul 12, 2021

@jakobandersen sorry, that's because https://github.com/microsoft/CCF/pull/2787/files was merged, which pins sphinx to <4.1.0

Full stack:

Traceback (most recent call last):
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/application.py", line 343, in build
    self.builder.build_update()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 293, in build_update
    self.build(to_build,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 307, in build
    updated_docnames = set(self.read())
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 414, in read
    self._read_serial(docnames)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 435, in _read_serial
    self.read_doc(docname)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 475, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/io.py", line 188, in read_doc
    pub.publish()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/io.py", line 108, in read
    self.parse()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/parsers.py", line 100, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 170, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 239, in run
    context, next_state, result = self.check_line(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2769, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 281, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 239, in run
    context, next_state, result = self.check_line(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2769, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 281, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 239, in run
    context, next_state, result = self.check_line(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2344, in explicit_markup
    self.explicit_list(blank_finish)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2369, in explicit_list
    newline_offset, blank_finish = self.nested_list_parse(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 318, in nested_list_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 239, in run
    context, next_state, result = self.check_line(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2647, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2354, in explicit_construct
    return method(self, expmatch)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2096, in directive
    return self.run_directive(
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 2146, in run_directive
    result = directive_instance.run()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/directives.py", line 292, in run
    return self.render(matches[0], project_info, filter_, target_handler, mask_factory,
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/directive/base.py", line 96, in render
    return object_renderer.render(node_stack[0], context)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 2279, in render
    result = method(self, node)  # type: ignore
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 2166, in dispatch_compound
    return self.visit_compound(node)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 1063, in visit_compound
    return self.visit_class(node)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 977, in visit_class
    self.create_template_prefix(nodeDef),
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 780, in create_template_prefix
    nodes = self.render(decl.templateparamlist)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 2279, in render
    result = method(self, node)  # type: ignore
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 2089, in visit_templateparamlist
    nodelist.extend(self.visit_param(item, insertDeclNameByParsing=True))
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py", line 2051, in visit_param
    ast = parser._parse_type(named='single', outer='templateParam')
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/domains/cpp.py", line 6415, in _parse_type
    declSpecs = self._parse_decl_specs(outer=outer)
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/domains/cpp.py", line 6109, in _parse_decl_specs
    trailing = self._parse_trailing_type_spec()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/domains/cpp.py", line 5874, in _parse_trailing_type_spec
    nestedName = self._parse_nested_name()
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/domains/cpp.py", line 5796, in _parse_nested_name
    self.fail("Expected identifier in nested name.")
  File "/data/amchamay/CCF/env/lib/python3.8/site-packages/sphinx/util/cfamily.py", line 275, in fail
    raise self._make_multi_error(errors, '')
sphinx.util.cfamily.DefinitionError: Invalid C++ declaration: Expected identifier in nested name. [error at 8]
  typename
  --------^

Breathe debug output

Running directive: .. cpp:struct::  ccf::MemberDetails                                                                                                                                                                                      
  Running directive: .. cpp:var::  MemberStatus status   = MemberStatus::ACCEPTED
  Running directive: .. cpp:var::  nlohmann::json member_data   = nullptr
Running directive: .. cpp:enum:: ccf::MemberStatus
  Running directive: .. cpp:enumerator:: ACCEPTED
  Running directive: .. cpp:enumerator:: ACTIVE
Running directive: .. cpp:struct::  ccf::MemberAck : public ccf::StateDigest
  Running directive: .. cpp:var::  std::optional< SignedReq > signed_req   = std::nullopt
Running directive: .. cpp:struct::  ccf::StateDigest
  Running directive: .. cpp:var::  std::string state_digest  
Running directive: .. cpp:struct::  ccf::SignedReq
  Running directive: .. cpp:var::  std::vector< uint8_t > sig   = {}
  Running directive: .. cpp:var::  std::vector< uint8_t > req   = {}
  Running directive: .. cpp:var::  std::vector< uint8_t > request_body   = {}
  Running directive: .. cpp:var::  crypto::MDType md   = crypto::MDType::NONE
  Running directive: .. cpp:var::  std::string key_id   = {}
Running directive: .. cpp:struct::  ccf::UserDetails
  Running directive: .. cpp:var::  nlohmann::json user_data   = nullptr
Running directive: .. cpp:struct::  ccf::NodeInfo : public ccf::NodeInfoNetwork
  Running directive: .. cpp:var::  crypto::Pem cert  
  Running directive: .. cpp:var::  QuoteInfo quote_info  
  Running directive: .. cpp:var::  crypto::Pem encryption_pub_key  
  Running directive: .. cpp:var::  NodeStatus status   = NodeStatus::PENDING
  Running directive: .. cpp:var::  std::optional< kv::Version > ledger_secret_seqno   = std::nullopt
  Running directive: .. cpp:var::  std::optional< std::string > code_digest  
Running directive: .. cpp:enum:: ccf::NodeStatus
  Running directive: .. cpp:enumerator:: PENDING
  Running directive: .. cpp:enumerator:: TRUSTED
  Running directive: .. cpp:enumerator:: RETIRED
  Running directive: .. cpp:enumerator:: LEARNER
  Running directive: .. cpp:enumerator:: RETIRING
Running directive: .. cpp:struct::  ccf::NodeInfoNetwork
Running directive: .. cpp:struct::  ccf::QuoteInfo
  Running directive: .. cpp:var::  QuoteFormat format   = QuoteFormat::oe_sgx_v1
  Running directive: .. cpp:var::  std::vector< uint8_t > quote  
  Running directive: .. cpp:var::  std::vector< uint8_t > endorsements  
Running directive: .. cpp:enum:: ccf::QuoteFormat
  Running directive: .. cpp:enumerator:: oe_sgx_v1
Running directive: .. cpp:struct::  kv::NetworkConfiguration
Running directive: .. cpp:enum:: ccf::CodeStatus
  Running directive: .. cpp:enumerator:: ALLOWED_TO_JOIN
Running directive: .. cpp:struct::  ccf::ServiceInfo
Running directive: .. cpp:struct::  ccf::ServiceConfiguration
Running directive: .. cpp:struct::  ccf::jsgov::ProposalInfoDetails
  Running directive: .. cpp:var::  ProposalId proposal_id  
  Running directive: .. cpp:var::  ccf::MemberId proposer_id  
  Running directive: .. cpp:var::  ccf::ProposalState state  
  Running directive: .. cpp:var::  Ballots ballots   = {}
Running directive: .. cpp:enum:: ccf::ProposalState
  Running directive: .. cpp:enumerator:: OPEN
  Running directive: .. cpp:enumerator:: ACCEPTED
  Running directive: .. cpp:enumerator:: WITHDRAWN
  Running directive: .. cpp:enumerator:: REJECTED
  Running directive: .. cpp:enumerator:: FAILED
  Running directive: .. cpp:enumerator:: DROPPED
Running directive: .. cpp:struct::  ccf::endpoints::EndpointKey
  Running directive: .. cpp:var::  URI uri_path  
  Running directive: .. cpp:var::  RESTVerb verb   = HTTP_POST
Running directive: .. cpp:struct::  ccf::endpoints::EndpointProperties
  Running directive: .. cpp:var::  Mode mode   = Mode::ReadWrite
  Running directive: .. cpp:var::  ForwardingRequired forwarding_required   = ForwardingRequired::Always
  Running directive: .. cpp:var::  ExecuteOutsideConsensus execute_outside_consensus  =ExecuteOutsideConsensus::Never
  Running directive: .. cpp:var::  std::vector< std::string > authn_policies   = {}
  Running directive: .. cpp:var::  nlohmann::json openapi  
  Running directive: .. cpp:var::  std::string js_module  
  Running directive: .. cpp:var::  std::string js_function  
Running directive: .. cpp:enum:: ccf::endpoints::Mode
  Running directive: .. cpp:enumerator:: ReadWrite
  Running directive: .. cpp:enumerator:: ReadOnly
  Running directive: .. cpp:enumerator:: Historical
Running directive: .. cpp:enum:: ccf::endpoints::ForwardingRequired
  Running directive: .. cpp:enumerator:: Sometimes
  Running directive: .. cpp:enumerator:: Always
  Running directive: .. cpp:enumerator:: Never
Running directive: .. cpp:enum:: ccf::endpoints::ExecuteOutsideConsensus
  Running directive: .. cpp:enumerator:: Never
  Running directive: .. cpp:enumerator:: Locally
  Running directive: .. cpp:enumerator:: Primary
Running directive: .. cpp:struct::  ccf::JwtIssuerMetadata
  Running directive: .. cpp:var::  JwtIssuerKeyFilter key_filter  
  Running directive: .. cpp:var::  std::optional< JwtIssuerKeyPolicy > key_policy  
  Running directive: .. cpp:var::  std::optional< std::string > ca_cert_bundle_name  
  Running directive: .. cpp:var::  bool auto_refresh   = false
Running directive: .. cpp:enum:: ccf::JwtIssuerKeyFilter
  Running directive: .. cpp:enumerator:: All
  Running directive: .. cpp:enumerator:: SGX
Running directive: .. cpp:struct::  ccf::JwtIssuerKeyPolicy
  Running directive: .. cpp:var::  std::optional< std::map< std::string, std::string > > sgx_claims  
Running directive: .. cpp:struct::  ccf::PrimarySignature : public ccf::NodeSignature
  Running directive: .. cpp:var::  ccf::SeqNo seqno   = 0
  Running directive: .. cpp:var::  ccf::View view   = 0
  Running directive: .. cpp:var::  ccf::SeqNo commit_seqno   = 0
  Running directive: .. cpp:var::  ccf::View commit_view   = 0
  Running directive: .. cpp:var::  crypto::Sha256Hash root  
Running directive: .. cpp:struct::  ccf::NodeSignature
  Running directive: .. cpp:var::  std::vector< uint8_t > sig  
  Running directive: .. cpp:var::  NodeId node  
  Running directive: .. cpp:var::  Nonce hashed_nonce  
Running directive: .. cpp:struct::  ccf::SnapshotHash
  Running directive: .. cpp:var::  crypto::Sha256Hash hash  
  Running directive: .. cpp:var::  kv::Version version  
Running directive: .. cpp:function::  std::shared_ptr< ccf::RpcFrontend > ccfapp::get_rpc_handler (ccf::NetworkTables &network, AbstractNodeContext &context)                                                                               
Running directive: .. cpp:struct::  ccf::endpoints::Endpoint : public ccf::endpoints::EndpointDefinition
  Running directive: .. cpp:function::  Endpoint & set_openapi_hidden (bool hidden)
  Running directive: .. cpp:function::  Endpoint & set_params_schema (const nlohmann::json &j)
  Running directive: .. cpp:function::  Endpoint & set_result_schema (const nlohmann::json &j, std::optional< http_status > status=std::nullopt)
  Running directive: .. cpp:function:: template<typename In, typename Out> inline Endpoint & set_auto_schema (std::optional< http_status > status=std::nullopt)
  Running directive: .. cpp:function:: template<typename T> inline Endpoint & set_auto_schema (std::optional< http_status > status=std::nullopt)
  Running directive: .. cpp:function:: template<typename T> inline Endpoint & add_query_parameter (const std::string &param_name, QueryParamPresence presence=RequiredParameter)
  Running directive: .. cpp:function::  Endpoint & set_forwarding_required (ForwardingRequired fr)
  Running directive: .. cpp:function::  Endpoint & set_execute_outside_consensus (ExecuteOutsideConsensus v)
  Running directive: .. cpp:struct::  Installer
Running directive: .. cpp:class::  ccf::endpoints::EndpointRegistry : public ccf::endpoints::Endpoint::Installer
  Running directive: .. cpp:function::  virtual void install (Endpoint &endpoint) override
  Running directive: .. cpp:function::  void set_default (EndpointFunction f, const AuthnPolicies &ap)
Running directive: .. cpp:class::  ccf::CommonEndpointRegistry : public ccf::BaseEndpointRegistry
Running directive: .. cpp:class::  ccf::BaseEndpointRegistry : public ccf::endpoints::EndpointRegistry
  Running directive: .. cpp:function::  ApiResult get_status_for_txid_v1 (ccf::View view, ccf::SeqNo seqno, ccf::TxStatus &tx_status)
  Running directive: .. cpp:function::  ApiResult get_last_committed_txid_v1 (ccf::View &view, ccf::SeqNo &seqno)
  Running directive: .. cpp:function::  ApiResult generate_openapi_document_v1 (kv::ReadOnlyTx &tx, const std::string &title, const std::string &description, const std::string &document_version, nlohmann::json &document)
  Running directive: .. cpp:function::  ApiResult get_quote_for_this_node_v1 (kv::ReadOnlyTx &tx, QuoteInfo &quote_info)
  Running directive: .. cpp:function::  ApiResult get_id_for_this_node_v1 (NodeId &node_id)
  Running directive: .. cpp:function::  ApiResult get_quotes_for_all_trusted_nodes_v1 (kv::ReadOnlyTx &tx, std::map< NodeId, QuoteInfo > &quotes)
  Running directive: .. cpp:function::  ApiResult get_view_for_seqno_v1 (ccf::SeqNo seqno, ccf::View &view)
  Running directive: .. cpp:function::  ApiResult get_user_data_v1 (kv::ReadOnlyTx &tx, const UserId &user_id, nlohmann::json &user_data)
  Running directive: .. cpp:function::  ApiResult get_member_data_v1 (kv::ReadOnlyTx &tx, const MemberId &member_id, nlohmann::json &member_data)
  Running directive: .. cpp:function::  ApiResult get_user_cert_v1 (kv::ReadOnlyTx &tx, const UserId &user_id, crypto::Pem &user_cert_pem)
  Running directive: .. cpp:function::  ApiResult get_member_cert_v1 (kv::ReadOnlyTx &tx, const MemberId &member_id, crypto::Pem &member_cert_pem)
  Running directive: .. cpp:function::  ApiResult get_untrusted_host_time_v1 (::timespec &time)
Running directive: .. cpp:var::  static std::shared_ptr< EmptyAuthnPolicy > ccf::empty_auth_policy  =std::make_shared<EmptyAuthnPolicy>()
Running directive: .. cpp:var::  static std::shared_ptr< UserCertAuthnPolicy > ccf::user_cert_auth_policy  =std::make_shared<UserCertAuthnPolicy>()
Running directive: .. cpp:var::  static std::shared_ptr< UserSignatureAuthnPolicy > ccf::user_signature_auth_policy  =std::make_shared<UserSignatureAuthnPolicy>()
Running directive: .. cpp:var::  static std::shared_ptr< JwtAuthnPolicy > ccf::jwt_auth_policy  =std::make_shared<JwtAuthnPolicy>()
Running directive: .. cpp:struct::  ccf::UserCertAuthnIdentity : public ccf::AuthnIdentity
  Running directive: .. cpp:var::  UserId user_id  
Running directive: .. cpp:struct::  ccf::JwtAuthnIdentity : public ccf::AuthnIdentity
  Running directive: .. cpp:var::  std::string key_issuer  
  Running directive: .. cpp:var::  nlohmann::json header  
  Running directive: .. cpp:var::  nlohmann::json payload  
Running directive: .. cpp:struct::  ccf::UserSignatureAuthnIdentity : public ccf::AuthnIdentity
  Running directive: .. cpp:var::  UserId user_id  
  Running directive: .. cpp:var::  crypto::Pem user_cert  
  Running directive: .. cpp:var::  SignedReq signed_request  
Running directive: .. cpp:enum:: ccf::TxStatus
  Running directive: .. cpp:enumerator:: Unknown
  Running directive: .. cpp:enumerator:: Pending
  Running directive: .. cpp:enumerator:: Committed
  Running directive: .. cpp:enumerator:: Invalid
Running directive: .. cpp:type::  ccf::View = uint64_t
Running directive: .. cpp:type::  ccf::SeqNo = uint64_t
Running directive: .. cpp:struct::  ccf::TxID
Running directive: .. cpp:enum:: ccf::ApiResult
  Running directive: .. cpp:enumerator:: OK
  Running directive: .. cpp:enumerator:: Uninitialised
  Running directive: .. cpp:enumerator:: InvalidArgs
  Running directive: .. cpp:enumerator:: NotFound
  Running directive: .. cpp:enumerator:: InternalError
Running directive: .. cpp:function::  static ccf::endpoints::EndpointFunction ccf::historical::adapter (const HandleHistoricalQuery &f, AbstractStateCache &state_cache, const CheckAvailability &available, const TxIDExtractor &extractor=txid_from_header)
Running directive: .. cpp:class::  ccf::historical::AbstractStateCache
  Running directive: .. cpp:function::  virtual void set_default_expiry_duration (ExpiryDuration seconds_until_expiry)=0
  Running directive: .. cpp:function::  virtual StorePtr get_store_at (RequestHandle handle, ccf::SeqNo seqno, ExpiryDuration seconds_until_expiry)=0
  Running directive: .. cpp:function::  virtual StorePtr get_store_at (RequestHandle handle, ccf::SeqNo seqno)=0
  Running directive: .. cpp:function::  virtual StatePtr get_state_at (RequestHandle handle, ccf::SeqNo seqno)=0
  Running directive: .. cpp:function::  virtual std::vector< StorePtr > get_store_range (RequestHandle handle, ccf::SeqNo start_seqno, ccf::SeqNo end_seqno, ExpiryDuration seconds_until_expiry)=0
  Running directive: .. cpp:function::  virtual std::vector< StorePtr > get_store_range (RequestHandle handle, ccf::SeqNo start_seqno, ccf::SeqNo end_seqno)=0
  Running directive: .. cpp:function::  virtual bool drop_request (RequestHandle handle)=0
Running directive: .. cpp:struct::  ccf::historical::State
  Running directive: .. cpp:var::  StorePtr store   = nullptr
  Running directive: .. cpp:var::  TxReceiptPtr receipt   = nullptr
  Running directive: .. cpp:var::  ccf::TxID transaction_id  
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::SHA256 (const std::vector< uint8_t > &data)                                                                                                                            
Running directive: .. cpp:class::  crypto::HashProvider
  Running directive: .. cpp:function::  virtual HashBytes Hash (const uint8_t *data, size_t size, MDType type) const =0
Running directive: .. cpp:function::  std::shared_ptr< HashProvider > crypto::make_hash_provider ()
Running directive: .. cpp:class::  crypto::PublicKey
  Running directive: .. cpp:function::  virtual bool verify (const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type, HashBytes &bytes)=0
  Running directive: .. cpp:function::  inline bool verify (const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE)
  Running directive: .. cpp:function::  inline virtual bool verify (const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature)
  Running directive: .. cpp:function::  inline virtual bool verify_hash (const std::vector< uint8_t > &hash, const std::vector< uint8_t > &signature, MDType md_type)
  Running directive: .. cpp:function::  virtual bool verify_hash (const uint8_t *hash, size_t hash_size, const uint8_t *sig, size_t sig_size, MDType md_type)=0
  Running directive: .. cpp:function::  virtual Pem public_key_pem () const =0
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > public_key_der () const =0
Running directive: .. cpp:class::  crypto::KeyPair
Running directive: .. cpp:class::  crypto::RSAPublicKey
  Running directive: .. cpp:function::   RSAPublicKey (const Pem &pem)
  Running directive: .. cpp:function::   RSAPublicKey (const std::vector< uint8_t > &der)
  Running directive: .. cpp:function::  virtual size_t key_size () const =0
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > rsa_oaep_wrap (const uint8_t *input, size_t input_size, const uint8_t *label=nullptr, size_t label_size=0)=0
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > rsa_oaep_wrap (const std::vector< uint8_t > &input, std::optional< std::vector< std::uint8_t >> label=std::nullopt)=0
  Running directive: .. cpp:function::  virtual Pem public_key_pem () const =0
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > public_key_der () const =0
Running directive: .. cpp:class::  crypto::RSAKeyPair
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > rsa_oaep_unwrap (const std::vector< uint8_t > &input, std::optional< std::vector< std::uint8_t >> label=std::nullopt)=0
  Running directive: .. cpp:function::  virtual Pem private_key_pem () const =0
  Running directive: .. cpp:function::  virtual Pem public_key_pem () const =0
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > public_key_der () const =0
Running directive: .. cpp:enum:: crypto::CurveID
  Running directive: .. cpp:enumerator:: NONE
  Running directive: .. cpp:enumerator:: SECP384R1
  Running directive: .. cpp:enumerator:: SECP256R1
Running directive: .. cpp:function::  KeyPairPtr crypto::make_key_pair (CurveID curve_id)
Running directive: .. cpp:function::  KeyPairPtr crypto::make_key_pair (const Pem &pem, CBuffer pw)
Running directive: .. cpp:function::  RSAKeyPairPtr crypto::make_rsa_key_pair (size_t public_key_size, size_t public_exponent)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::aes_gcm_encrypt (const std::vector< uint8_t > &key, std::vector< uint8_t > &plaintext, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &aad)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::aes_gcm_decrypt (const std::vector< uint8_t > &key, std::vector< uint8_t > &ciphertext, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &aad)
Running directive: .. cpp:class::  crypto::Entropy
  Running directive: .. cpp:function::  virtual std::vector< uint8_t > random (size_t len)=0
  Running directive: .. cpp:function::  virtual void random (unsigned char *data, size_t len)=0
  Running directive: .. cpp:function::  virtual uint64_t random64 ()=0
Running directive: .. cpp:class::  crypto::Verifier
  Running directive: .. cpp:function::  inline virtual bool verify (const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE) const
  Running directive: .. cpp:function::  inline virtual bool verify (CBuffer contents, CBuffer sig, MDType md_type=MDType::NONE) const
  Running directive: .. cpp:function::  inline virtual bool verify (const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type, HashBytes &hash_bytes) const
  Running directive: .. cpp:function::  inline virtual bool verify (const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE) const
  Running directive: .. cpp:function::  inline virtual bool verify (const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type, HashBytes &hash_bytes) const
  Running directive: .. cpp:function::  inline virtual bool verify_hash (const uint8_t *hash, size_t hash_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE)
  Running directive: .. cpp:function::  inline virtual bool verify_hash (const std::vector< uint8_t > &hash, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE)
  Running directive: .. cpp:function:: template<size_t SIZE> inline bool verify_hash (const std::array< uint8_t, SIZE > &hash, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE)
  Running directive: .. cpp:function::  inline virtual Pem public_key_pem () const
  Running directive: .. cpp:function::  inline virtual std::vector< uint8_t > public_key_der () const
  Running directive: .. cpp:function::  virtual bool verify_certificate (const std::vector< const Pem *> &trusted_certs, const std::vector< const Pem *> &chain={})=0
  Running directive: .. cpp:function::  virtual bool is_self_signed () const =0
  Running directive: .. cpp:function::  virtual std::string serial_number () const =0
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_pkcs_oaep_wrap (RSAPublicKeyPtr wrapping_key, const std::vector< uint8_t > &unwrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_pkcs_oaep_wrap (const Pem &wrapping_key, const std::vector< uint8_t > &unwrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_pkcs_oaep_unwrap (RSAKeyPairPtr wrapping_key, const std::vector< uint8_t > &wrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_pkcs_oaep_unwrap (const Pem &wrapping_key, const std::vector< uint8_t > &wrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_aes_key_wrap_pad (const std::vector< uint8_t > &wrapping_key, const std::vector< uint8_t > &unwrapped)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_aes_key_unwrap_pad ( const std::vector< uint8_t > &wrapping_key, const std::vector< uint8_t > &wrapped)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_aes_key_wrap (size_t aes_key_size, RSAPublicKeyPtr wrapping_key, const std::vector< uint8_t > &unwrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_aes_key_wrap (size_t aes_key_size, const Pem &wrapping_key, const std::vector< uint8_t > &unwrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_aes_key_unwrap (RSAKeyPairPtr wrapping_key, const std::vector< uint8_t > &wrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:function::  std::vector< uint8_t > crypto::ckm_rsa_aes_key_unwrap (const Pem &wrapping_key, const std::vector< uint8_t > &wrapped, const std::vector< uint8_t > &label)
Running directive: .. cpp:class::  kv::Store : public kv::AbstractStore , public kv::StoreState , public kv::ExecutionWrapperStore                                                                                                          
Running directive: .. cpp:type::  kv::Version = uint64_t
Running directive: .. cpp:var::  static constexpr Version kv::NoVersion   = 0u

@jakobandersen
Copy link
Contributor

Thanks for the call stack. It confirms my suspicion that it's not on the Sphinx side that things go wrong. Please open an issue over at Breathe, then we can continue the discussion there.

@achamayou
Copy link

@jakobandersen I've built a copy of doxygen 1.9.1 locally, and using that with the latest sphinx + breathe does work correctly. I presume that this is a bug in doxygen that was fixed between 1.8.13 and 1.9.1.

We will upgrade, sorry about the noise.

@jakobandersen
Copy link
Contributor

No problem, it's tricky to see what is going on, and in this case Breathe should have caught the exception and done something else. I'm not completely sure if a newer Doxygen will fix it, and it may be that breathe-doc/breathe#711 is needed. But feel free to open issues.

@achamayou
Copy link

@jakobandersen thank you for the breathe_debug_trace_directives pointer, that helps narrow down to the type that causes the error at least. There doesn't appear to be issues with doxygen 1.9.1 on our code at the moment, but we will report to the breathe repo anything we find.

@jumaffre
Copy link
Author

@jakobandersen Thanks for the quick response! As @achamayou has already mentioned, we had merged microsoft/CCF#2787 by the time you'd tested it. We'll move further comments about this to the Breathe project 👍

njzjz added a commit to njzjz/deepmd-kit that referenced this issue Jul 14, 2021
amcadmus pushed a commit to deepmodeling/deepmd-kit that referenced this issue Jul 15, 2021
claremacrae added a commit to approvals/ApprovalTests.cpp that referenced this issue Jul 26, 2021
see sphinx-doc/sphinx#9433

Co-Authored-By: Llewellyn Falco <isidore@users.noreply.github.com>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 12, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants