[cfe-dev] Clang python bindings tests failing on Windows7/MSVC10

Matthieu Monrocq matthieu.monrocq at gmail.com
Mon Apr 16 10:41:30 PDT 2012


Le 16 avril 2012 11:08, Evan P <hiwrac at gmail.com> a écrit :

> When running the tests for the clang python bindings on windows 7 (x64,
> clang built with MSVC 10).   This failure does not occur on Linux (Mint 12,
> clang built with gcc 4.6.1)
>
>
> ======================================================================
>  FAIL: tests.cindex.test_cursor.test_enum_type
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "C:\Python27\lib\site-packages\nose-1.1.2-py2.7.egg\nose\case.py",
> line 1
> 97, in runTest
>     self.test(*self.arg)
>   File
> "E:\Dev\Projects\llvm\llvm\tools\clang\bindings\python\tests\cindex\test_
> cursor.py", line 110, in test_enum_type
>     assert enum_type.kind == TypeKind.UINT
> AssertionError
>
>
> The full test:
>
> def test_enum_type():
>     tu = get_tu('enum TEST { FOO=1, BAR=2 };')
>     enum = get_cursor(tu, 'TEST')
>     assert enum is not None
>
>     assert enum.kind == CursorKind.ENUM_DECL
>     enum_type = enum.enum_type
>     assert enum_type.kind == TypeKind.UINT
>
> The assert is failing because the version compiled under MSVC
> enum_type.kind is TypeKind.INT instead of TypeKind.UINT
>
> I see 2 possibilities, and I am not sure which is correct (possibly both):
>
> 1) This is simply an overzealous test, according to
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf (7.2.6)
> (pg 156) an unscoped enum does not required a fixed type and can be any
> integral type that can accommodate all enum values with the exception it is
> not larger than int/unsigned int unless it has to be to  accommodate all
> values.
>
> 2) There is an inconsistency in the way clang handles enum definitions
> when built with MSVC10 vs GCC4.6.
>
> Can anyone shed some light on this, and point me in a direction to help
> resolve this?
>
> Thanks
> -Evan
>
>
>
I think it is an intentional inconsistency in the way Clang handles enums
when generating code for enums.

If I remember correctly gcc defaults to unsigned while MSVC defaults to
int; Clang then just emulate their behavior in an attempt to be as close as
possible to the code they emit.

I do not know how to "force" the target triplet in python tests, but this
is generally the way used to get a platform independent test.

-- Matthieu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120416/8429cb8f/attachment.html>


More information about the cfe-dev mailing list