ualberta-smr/varclang

False errors when include a system header file in ifdef

Closed this issue · 2 comments

For example:

#ifdef A
#include <iostream>
#endif

Output:

In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:38:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/x86_64-pc-linux-gnu/bits/c++config.h:236:1: error: expected unqualified-id
namespace std
^
In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ostream:38:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ios:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/exception:144:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/nested_exception.h:40:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/move.h:55:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/type_traits:277:14: error: true_type is not defined in context ~A
    : public true_type { };
             ^
In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ostream:38:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ios:42:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/ios_base.h:41:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/locale_classes.h:40:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/string:52:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/basic_string.h:6626:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:169:3: error: __hash_base is not defined in context ~A
  _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0)
  ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:31: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
    struct hash<_Tp> : public __hash_base<size_t, _Tp>  \
                              ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:169:3: error: size_t is not defined in context ~A
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:43: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
    struct hash<_Tp> : public __hash_base<size_t, _Tp>  \
                                          ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:170:3: error: __hash_base is not defined in context ~A
  _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned)
  ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:31: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
    struct hash<_Tp> : public __hash_base<size_t, _Tp>  \
                              ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:170:3: error: size_t is not defined in context ~A
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:43: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
    struct hash<_Tp> : public __hash_base<size_t, _Tp>  \
                                          ^
6 errors generated.

There should be no errors since all of <iostream> is included in the same context.

Update: issue #48 was causing all these errors except the first one which is probably related to issue #45

Fixed

See pull requests #50 and #51

Now the example at the top produces no errors.