Current Issues

You can report an issue with Tigress by submitting to our github issues page or by sending us a message on our contact page.



Known Bugs

18

On some platforms there is a parsing error for some complex numbers. Example:

_Complex v = 3.0 + 1.0iF;

52

There is a parsing error when loading stdatomic.h.

55

Tigress is slow on huge programs.

56

_thread is incorrectly put after the identifier in declarations instead of before. This is a regression: it works in Tigress 3.3.3 but fails in 4.x.

57

Tigress fails on this code:

typedef int __attribute__ ((mode (__pointer__))) intptr_t;

58

On some versions of Darwin x86 (e.g., "x86_64-apple-darwin19.6.0") one may receive a parsing error from Tigress when including sys/event.h. The preprocessed version of the code where the error occurs looks like: struct klist { struct knote *slh_first; } ; int main(){} The known issue is Tigress' handling of the case in which a pragma appears between the struct definition and its terminating semi-colon. The original code appears at line 372 in sys/event.h where a macro is applied. The macro definition is in sys/queue.h, line 236: __MISMATCH_TAGS_PUSH \ __NULLABILITY_COMPLETENESS_PUSH \ struct name { \ struct type *slh_first; /* first element */ \ } \ __NULLABILITY_COMPLETENESS_POP \ __MISMATCH_TAGS_POP To work around the problem, add a semicolon to the end of the struct definition. Clang, GCC, and Tigress can all handle the presence of an extra semicolon, so the semicolons at the ends of the macro applications do not need to be removed.


Limitations

44

Variable length arrays in structures are supported by gcc but are rejected by Clang. Tigress currently fails on this code and we are unlikely to support it in the future:

void foo(int n) {
   struct S {int i[n];}
}


Common Concerns

A

If you see syntax errors while loading standard include files, make sure you've included tigress.h at the top of every file. Example:

/usr/include/bits/mathcalls-helper-functions.h[21:12-28] : syntax error

B

Tigress supports the C99 language. Depending on your compiler, you may have to add a switch (such as -std=c99 for gcc) to indicate this.

C

If you see something like this:

test_max_align.c:8:11: error: unknown type name ‘max_align_t’
    8 |   union { max_align_t __align; char __c[1024]; } __space;

it could be because you set -std=c99