Skip to content

Errors with "circular" includes #150

Description

@Reen
  • cppast version: e5fa6b7
  • parser: libclang_parser
  • clang version: 14.0.0

Hi Jonathan,
thanks for making such a great library. I'm trying to get it running with my code base, but encountered another error.
I have two classes that reference each other. Parsing these files with cppast gives errors as below

Input:

N/A.hpp:

#pragma once

#include <cmath>
#include <cstdint>

namespace N{

struct B;

struct A {
	float a;
	N::B make_b() const;
};

}

#include <N/B.hpp>

inline N::B N::A::make_b() const{
	return {};
}

N/B.hpp

#pragma once

#include <cmath>
#include <cassert>

namespace N{

struct A;

struct B{
    float b;
    N::A make_a() const;
};
}

#include <N/A.hpp>

inline N::A N::B::make_a() const
{
    return {};
}

Input flags: -v -I /abs/path/to/base_of_N/ /abs/path/to/N/A.hpp

Output:

[preprocessor] [debug] /home/.../N/A.hpp:3: parsing include 'cmath'
[preprocessor] [debug] /home/.../N/A.hpp:4: parsing include 'cstdint'
[preprocessor] [debug] /home/.../N/A.hpp:17: parsing include 'N/B.hpp'
[preprocessor] [debug] /home/.../N/A.hpp:4: parsing include 'cstdint'
[preprocessor] [debug] /home/.../N/A.hpp:17: parsing include 'N/B.hpp'
[preprocessor] [warning] /home/.../N/A.hpp:4: unable to retrieve full path for include 'cstdint' (please file a bug report)
[preprocessor] [warning] /home/.../N/A.hpp:17: unable to retrieve full path for include 'N/B.hpp' (please file a bug report)
[libclang] [error] ./N/A.hpp:10: redefinition of 'A'
[libclang] [error] ./N/A.hpp:10: redefinition of 'A'
[libclang] [error] ./N/A.hpp:19: redefinition of 'make_b'
[libclang] [error] ./N/B.hpp:18: redefinition of 'make_a'
[libclang] [error] ./N/A.hpp:10: redefinition of 'A'
AST for './N/A.hpp':

The output differs if I pass a relative path to the input file:

Input flags: -v -I /abs/path/to/base_of_N/ N/A.hpp

Output:

[preprocessor] [debug] N/A.hpp:3: parsing include 'cmath'
[preprocessor] [debug] N/A.hpp:4: parsing include 'cstdint'
[preprocessor] [debug] N/A.hpp:17: parsing include 'N/B.hpp'
[libclang] [error] ./N/A.hpp:10: redefinition of 'A'
AST for './N/A.hpp':

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions