Community
Participate
Working Groups
Build Identifier: I20100520-1744 A syntax error is reported for the macro container_of_var defined like this: #define check_types_match(expr1, expr2) \ ((typeof(expr1) *)0 != (typeof(expr2) *)0) #define container_of(member_ptr, containing_type, member) \ ((containing_type *) \ ((char *)(member_ptr) - offsetof(containing_type, member)) \ - check_types_match(*(member_ptr), ((containing_type *)0)->member)) #define container_of_var(member_ptr, var, member) \ container_of(member_ptr, typeof(*var), member) Reproducible: Always Steps to Reproduce: An example of the use of container_of_var() to reproduce the bug could be this: struct node { struct node *prev; struct node *next; }; struct list { struct node *head; }; struct number { int value; struct node node; }; int main(void) { struct number num; struct number *num_ptr; struct node *n = &num.node; num_ptr = container_of_var(n, num_ptr, node); return 0; }
Correcting the subject. Does not appear to have anything to do with error parsers (which are responsible for build output parsing).
(In reply to comment #1) > Correcting the subject. Does not appear to have anything to do with error > parsers (which are responsible for build output parsing). Sorry, I actually meant it like: "Parsing error", but having seen the reports with that tag I thought it was the common way to report this kind of bugs. I didn't think at all about error parsers.
Notice that to make the code example compile you need to include <stddef.h>
The syntax error is not caused by the macro expansion, rather than that the result of the expansion cannot be parsed. To see what the parser is looking at you can select the line with the syntax error and use 'Explore Macro Expansion' from the context menu. In any way your example works for me, as long as the macro 'offsetof' is defined (by including stddef.h). In your case, most likely the include paths are not set up correctly, such that the parser cannot find the header 'stddef.h'. Another possibility is that the parser cannot handle the specific definition of 'offsetof' supplied by your stddef.h header. To find out try the following: * Replace the #include <stddef.h> with the following line, making this a self- contained example: #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) This should make the example free of syntax errors. * Use the definition of your stddef.h to create a self-contained example. If that triggers the syntax error, provide your definition of offsetof. * Otherwise, create a parser log (Context menu of file in project explorer - Index - Create Parser Log), it will tell whether the includes are found or not.
It's true, the direct inclusion of: #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) cancels the syntax error report, but the include paths to <stddef.h> seem to be correct and the definition of offsetof found there is the exact same. Also I've noticed that the syntax error reported by the parser is still present in the very short example I proposed here, but it doesn't mess up the macro expansion, so it isn't even reported in the editor. Instead, in the more complex code where I first found the problem, it's reported in the editor and it messes up the macro expansion. That is, the problem is reported by the parser log in both examples, but, in the simple one, the editor doesn't report it and it doesn't mess up the rest of the parsing(and if you leave the cursor over it, it gets expanded correctly), in the more complex example it confuses the parser, so, for example, the parser cannot assist the use of -> in the pointer returned and leaving the cursor over container_of_var() doesn't present its expansion. I'm gonna post some code examples and their relative parser logs: ###1° example #include <stddef.h> #define check_types_match(expr1, expr2) \ ((typeof(expr1) *)0 != (typeof(expr2) *)0) #define container_of(member_ptr, containing_type, member) \ ((containing_type *) \ ((char *)(member_ptr) - offsetof(containing_type, member)) \ - check_types_match(*(member_ptr), ((containing_type *)0)->member)) #define container_of_var(member_ptr, var, member) \ container_of(member_ptr, typeof(*var), member) struct node { struct node *prev; struct node *next; }; struct number { int value; struct node node; }; static void test_container_of_var(void) { struct number num; struct number *num_ptr; struct node *n = &num.node; num_ptr = container_of_var(n, num_ptr, node); } int main(void) { test_container_of_var(); return 0; } Parser log file: Project: eclipse_parse_test Index Version: 6422528 Build Configuration: Debug File: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Context: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Language: GNU C Include Search Path (option -I): /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include-fixed /usr/include/x86_64-linux-gnu /usr/include Local Include Search Path (option -iquote): Preincluded files (option -include): Preincluded macro files (option -imacros): Macro definitions (option -D): linux=1 unix=1 _LP64=1 __amd64=1 __amd64__=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short unsigned int __CHAR32_TYPE__=unsigned int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=4 __GNUC__=4 __gnu_linux__=1 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long int __INT_MAX__=2147483647 __k8=1 __k8__=1 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __linux=1 __linux__=1 __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __NO_INLINE__=1 __PTRDIFF_TYPE__=long int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long unsigned int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long unsigned int __unix=1 __unix__=1 __USER_LABEL_PREFIX__= __VERSION__="4.4.4" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned int __x86_64=1 __x86_64__=1 Macro definitions (from configuration + headers in index): __builtin_constant_p(exp)=0 __builtin_offsetof(T,m)=((size_t) &((T *)0)->m) __builtin_types_compatible_p(x,y)=__builtin_types_compatible_p(sizeof(x),sizeof(y)) __builtin_va_arg(ap,type)=*(typeof(type) *)ap __CDT_PARSER__=1 __complex__=_Complex __DATE__="May 27 2010" __extension__= __FILE__="file" __imag__=(int) __LINE__=1 __null=(void *)0 __offsetof__(x)=(x) __real__=(int) __stdcall= __STDC_VERSION__=199901L __thread= __TIME__="13:15:26" Macro definitions (from files actually parsed): check_types_match(expr1,expr2)=((typeof(expr1) *)0 != (typeof(expr2) *)0) container_of(member_ptr,containing_type,member)=((containing_type *) ((char *)(member_ptr) - offsetof(containing_type, member)) - check_types_match(*(member_ptr), ((containing_type *)0)->member)) container_of_var(member_ptr,var,member)=container_of(member_ptr, typeof(*var), member) Unresolved includes (from headers in index): file:/usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h is not indexed Scanner problems: Parser problems: Syntax error in file: /mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c:33 Unresolved names: Exceptions in name resolution: ###End of 1° example ###2° example #define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER) #define check_types_match(expr1, expr2) \ ((typeof(expr1) *)0 != (typeof(expr2) *)0) #define container_of(member_ptr, containing_type, member) \ ((containing_type *) \ ((char *)(member_ptr) - offsetof(containing_type, member)) \ - check_types_match(*(member_ptr), ((containing_type *)0)->member)) #define container_of_var(member_ptr, var, member) \ container_of(member_ptr, typeof(*var), member) struct node { struct node *prev; struct node *next; }; struct number { int value; struct node node; }; static void test_container_of_var(void) { struct number num; struct number *num_ptr; struct node *n = &num.node; num_ptr = container_of_var(n, num_ptr, node); } int main(void) { test_container_of_var(); return 0; } Parser log file: Project: eclipse_parse_test Index Version: 6422528 Build Configuration: Debug File: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Context: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Language: GNU C Include Search Path (option -I): /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include-fixed /usr/include/x86_64-linux-gnu /usr/include Local Include Search Path (option -iquote): Preincluded files (option -include): Preincluded macro files (option -imacros): Macro definitions (option -D): linux=1 unix=1 _LP64=1 __amd64=1 __amd64__=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short unsigned int __CHAR32_TYPE__=unsigned int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=4 __GNUC__=4 __gnu_linux__=1 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long int __INT_MAX__=2147483647 __k8=1 __k8__=1 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __linux=1 __linux__=1 __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __NO_INLINE__=1 __PTRDIFF_TYPE__=long int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long unsigned int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long unsigned int __unix=1 __unix__=1 __USER_LABEL_PREFIX__= __VERSION__="4.4.4" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned int __x86_64=1 __x86_64__=1 Macro definitions (from configuration + headers in index): __builtin_constant_p(exp)=0 __builtin_offsetof(T,m)=((size_t) &((T *)0)->m) __builtin_types_compatible_p(x,y)=__builtin_types_compatible_p(sizeof(x),sizeof(y)) __builtin_va_arg(ap,type)=*(typeof(type) *)ap __CDT_PARSER__=1 __complex__=_Complex __DATE__="May 27 2010" __extension__= __FILE__="file" __imag__=(int) __LINE__=1 __null=(void *)0 __offsetof__(x)=(x) __real__=(int) __stdcall= __STDC_VERSION__=199901L __thread= __TIME__="13:19:41" Macro definitions (from files actually parsed): check_types_match(expr1,expr2)=((typeof(expr1) *)0 != (typeof(expr2) *)0) container_of(member_ptr,containing_type,member)=((containing_type *) ((char *)(member_ptr) - offsetof(containing_type, member)) - check_types_match(*(member_ptr), ((containing_type *)0)->member)) container_of_var(member_ptr,var,member)=container_of(member_ptr, typeof(*var), member) offsetof(TYPE,MEMBER)=__builtin_offsetof(TYPE, MEMBER) Unresolved includes (from headers in index): Scanner problems: Parser problems: Unresolved names: Attempt to use symbol failed: size_t in file /mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c:33 Exceptions in name resolution: Here the error is gone, as expected(anyway, why does it try to use size_t there?(33 is the line where it's used container_of_var)). ###End of 2° example ###3° example If I put those definitions and the include of stddef.h in a header, there's no syntax error(In this example. In more complex code I talked about above, those definitions are in a header, but there's still a syntax error). file parse_test.h: #ifndef PARSE_TEST_H_ #define PARSE_TEST_H_ #include <stddef.h> #define check_types_match(expr1, expr2) \ ((typeof(expr1) *)0 != (typeof(expr2) *)0) #define container_of(member_ptr, containing_type, member) \ ((containing_type *) \ ((char *)(member_ptr) - offsetof(containing_type, member)) \ - check_types_match(*(member_ptr), ((containing_type *)0)->member)) #define container_of_var(member_ptr, var, member) \ container_of(member_ptr, typeof(*var), member) struct node { struct node *prev; struct node *next; }; #endif /* PARSE_TEST_H_ */ file eclipse_parse_test.c: #include "parse_test.h" struct number { int value; struct node node; }; static void test_container_of_var(void) { struct number num; struct number *num_ptr; struct node *n = &num.node; num_ptr = container_of_var(n, num_ptr, node); } int main(void) { test_container_of_var(); return 0; } Parser log file of parse_test.h: Project: eclipse_parse_test Index Version: 6422528 Build Configuration: Debug File: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/parse_test.h Context: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/parse_test.h Language: GNU C Include Search Path (option -I): /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include-fixed /usr/include/x86_64-linux-gnu /usr/include Local Include Search Path (option -iquote): Preincluded files (option -include): Preincluded macro files (option -imacros): Macro definitions (option -D): linux=1 unix=1 _LP64=1 __amd64=1 __amd64__=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short unsigned int __CHAR32_TYPE__=unsigned int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=4 __GNUC__=4 __gnu_linux__=1 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long int __INT_MAX__=2147483647 __k8=1 __k8__=1 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __linux=1 __linux__=1 __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __NO_INLINE__=1 __PTRDIFF_TYPE__=long int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long unsigned int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long unsigned int __unix=1 __unix__=1 __USER_LABEL_PREFIX__= __VERSION__="4.4.4" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned int __x86_64=1 __x86_64__=1 Macro definitions (from configuration + headers in index): __builtin_constant_p(exp)=0 __builtin_offsetof(T,m)=((size_t) &((T *)0)->m) __builtin_types_compatible_p(x,y)=__builtin_types_compatible_p(sizeof(x),sizeof(y)) __builtin_va_arg(ap,type)=*(typeof(type) *)ap __CDT_PARSER__=1 __complex__=_Complex __DATE__="May 27 2010" __extension__= __FILE__="file" __imag__=(int) __LINE__=1 __null=(void *)0 __offsetof__(x)=(x) __real__=(int) __stdcall= __STDC_VERSION__=199901L __thread= __TIME__="13:31:54" Macro definitions (from files actually parsed): check_types_match(expr1,expr2)=((typeof(expr1) *)0 != (typeof(expr2) *)0) container_of(member_ptr,containing_type,member)=((containing_type *) ((char *)(member_ptr) - offsetof(containing_type, member)) - check_types_match(*(member_ptr), ((containing_type *)0)->member)) container_of_var(member_ptr,var,member)=container_of(member_ptr, typeof(*var), member) PARSE_TEST_H_= Unresolved includes (from headers in index): file:/usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h is not indexed Scanner problems: Parser problems: Unresolved names: Exceptions in name resolution: Parser log file of eclipse_parse_test.c: Project: eclipse_parse_test Index Version: 6422528 Build Configuration: Debug File: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Context: file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c Language: GNU C Include Search Path (option -I): /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include /usr/lib/gcc/x86_64-linux-gnu/4.4.4/include-fixed /usr/include/x86_64-linux-gnu /usr/include Local Include Search Path (option -iquote): Preincluded files (option -include): Preincluded macro files (option -imacros): Macro definitions (option -D): linux=1 unix=1 _LP64=1 __amd64=1 __amd64__=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short unsigned int __CHAR32_TYPE__=unsigned int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=4 __GNUC__=4 __gnu_linux__=1 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long int __INT_MAX__=2147483647 __k8=1 __k8__=1 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __linux=1 __linux__=1 __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __NO_INLINE__=1 __PTRDIFF_TYPE__=long int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long unsigned int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long unsigned int __unix=1 __unix__=1 __USER_LABEL_PREFIX__= __VERSION__="4.4.4" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned int __x86_64=1 __x86_64__=1 Macro definitions (from configuration + headers in index): __builtin_constant_p(exp)=0 __builtin_offsetof(T,m)=((size_t) &((T *)0)->m) __builtin_types_compatible_p(x,y)=__builtin_types_compatible_p(sizeof(x),sizeof(y)) __builtin_va_arg(ap,type)=*(typeof(type) *)ap __CDT_PARSER__=1 __complex__=_Complex __DATE__="May 27 2010" __extension__= __FILE__="file" __imag__=(int) __LINE__=1 __null=(void *)0 __offsetof__(x)=(x) __real__=(int) __stdcall= __STDC_VERSION__=199901L __thread= __TIME__="13:31:28" Macro definitions (from files actually parsed): Unresolved includes (from headers in index): file:/mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/parse_test.h is not indexed Scanner problems: Parser problems: Unresolved names: Attempt to use symbol failed: node in file /mnt/disk-3/eclipse_workspace/eclipse_parse_test/src/eclipse_parse_test.c:33 Exceptions in name resolution: ###End of 3° example
The logs suggest that the project is not indexed. In the project properties on the indexer page select 'Enable indexer' and to be sure also select 'Index source files not included in the build'. This should fix your problem.
(In reply to comment #6) > The logs suggest that the project is not indexed. In the project properties on > the indexer page select 'Enable indexer' and to be sure also select 'Index > source files not included in the build'. This should fix your problem. I didn't set anything project specific about the indexer though and the general indexing settings are: -Enable Indexer -Index source files not included in the build -Index unused headers -Allow heuristic resolution of includes -Skip files larger than 8Mb -Files to index up-front: stdarg.h, stddef.h, sys/types.h Do I have to set project specific indexing options each time? If so, then what's the point of the general options?
(In reply to comment #7) > Do I have to set project specific indexing options each time? If so, then > what's the point of the general options? And, by the way, project specific or not doesn't change much. The indexing options are already set, they just don't seem to work.
Please check whether the file eclipse_parse_test.c is part of the index. (Context menu of editor - Show In - Include Browser). Does it open the Include Browser, what does it show. Also please reindex the project (Context menu of project - Index - Rebuild). After the indexer completes it writes a short summary in the error log. Does it output the summary what does it write? (<your_workspace>/.metadata/.log) Does the log contain any other suspicious entries?
(In reply to comment #9) > Please check whether the file eclipse_parse_test.c is part of the index. > (Context menu of editor - Show In - Include Browser). Does it open the Include > Browser, what does it show. > > Also please reindex the project (Context menu of project - Index - Rebuild). > After the indexer completes it writes a short summary in the error log. Does it > output the summary what does it write? (<your_workspace>/.metadata/.log) > > Does the log contain any other suspicious entries? I tried this for every project I was having problems with and none of the source files showed up in the include browser. Then I rebuilt the index of every project as you told me and this time the indexes were really built, so no syntax errors were reported anymore. Why did this happen though? My general index settings have always been like that and I never set anything project specific for the index. Also, the fact that a rebuild of the index works means that the settings are right, it's just that the index doesn't get built(unless I do a "rebuild it"), right? Anyway, this is the relevant part of the log you asked for: !ENTRY org.eclipse.cdt.core 1 0 2010-05-28 13:44:53.925 !MESSAGE Indexed 'eclipse_parse_test' (1 sources, 22 headers) in 0.06 sec: 267 declarations; 510 references; 0 unresolved inclusions; 0 syntax errors; 0 unresolved names (0.00%)
Hmm, please double check the indexer preference page whether the option 'automatically update the index' is selected (Window - Preferences - C/C++ - Indexer). If it is the index is the index is kept up to date automatically.
(In reply to comment #11) > If it is the index is the index is kept up to date automatically. Great English: If it is selected, then the index is kept up to date automatically.
(In reply to comment #12) > (In reply to comment #11) > > If it is the index is the index is kept up to date automatically. > Great English: If it is selected, then the index is kept up to date > automatically. Yes, both 'Automatically update the index' and 'Update index immediately after every file-save' are selected.
When you add a new header file to eclipse_parse_test.c and save the file, is the index updated? (Check by opening the include browser, does it show the additional include?)
After having rebuilt the index for those projects, I noticed that I can't reproduce the bug anymore on newer projects. All this without changing any of my settings.
(In reply to comment #14) > When you add a new header file to eclipse_parse_test.c and save the file, is > the index updated? (Check by opening the include browser, does it show the > additional include?) Yes, it does. But notice also my previous post: After having rebuilt the index for those projects, I noticed that I can't reproduce the bug anymore on newer projects. All this without changing any of my settings. I don't know, after having rebuilt those indices, now everything seems to work in new unrelated projects.
(In reply to comment #16) > (In reply to comment #14) > > When you add a new header file to eclipse_parse_test.c and save the file, is > > the index updated? (Check by opening the include browser, does it show the > > additional include?) > Yes, it does. But notice also my previous post: > After having rebuilt the index for those projects, I noticed that I can't > reproduce the bug anymore on newer projects. All this without changing any of > my settings. > > I don't know, after having rebuilt those indices, now everything seems to work > in new unrelated projects. Ok, looks like your index(es) got out of sync with the file-system. After fixing that by rebuilding the index things seem to work fine. There are multiple possibilities on how to get the index out of sync including: * manual cancellation of the indexer job. * changing configuration (source roots, filters, include paths, etc.) * changing workspace external files (found via inclusions). In these cases you need to rebuild the index.
(In reply to comment #17) > (In reply to comment #16) > > (In reply to comment #14) > > > When you add a new header file to eclipse_parse_test.c and save the file, is > > > the index updated? (Check by opening the include browser, does it show the > > > additional include?) > > Yes, it does. But notice also my previous post: > > After having rebuilt the index for those projects, I noticed that I can't > > reproduce the bug anymore on newer projects. All this without changing any of > > my settings. > > > > I don't know, after having rebuilt those indices, now everything seems to work > > in new unrelated projects. > > Ok, looks like your index(es) got out of sync with the file-system. After > fixing that by rebuilding the index things seem to work fine. There are > multiple possibilities on how to get the index out of sync including: > * manual cancellation of the indexer job. > * changing configuration (source roots, filters, include paths, etc.) > * changing workspace external files (found via inclusions). > In these cases you need to rebuild the index. Ok. I don't want to add noise by posting a useless comment, but I wanted to thank you for your help with this problem, so thank you.