I am trying understand more about how GCC compiles OpenMP directives and clauses by studying gcc/gcc/omp-low.c . I've run across the macro OMP_CLAUSE_DECL, which is tree.h defines: #define OMP_CLAUSE_DECL(NODE) \ OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE), \ OMP_CLAUSE_PRIVATE, \ OMP_CLAUSE_COPYPRIVATE), 0) Now, for OMP_CLAUSE_OPERAND, tree.h has #define OMP_CLAUSE_OPERAND(NODE, I) \ OMP_CLAUSE_ELT_CHECK (NODE, I) And for OMP_CLAUSE_ELT_CHECK, it has #define OMP_CLAUSE_ELT_CHECK(T, I) __extension__ \ (*({__typeof (T) const __t = (T); \ const int __i = (I); \ if (TREE_CODE (__t) != OMP_CLAUSE) \ tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ OMP_CLAUSE, 0); \ if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code]) \ omp_clause_operand_check_failed (__i, __t, __FILE__, __LINE__, \ __FUNCTION__); \ &__t->omp_clause.ops[__i]; })) Similarly, tree.h defines OMP_CLAUSE_RANGE_CHECK: #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) __extension__ \ ({ __typeof (T) const __t = (T); \ if (TREE_CODE (__t) != OMP_CLAUSE) \ tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ OMP_CLAUSE, 0); \ if ((int) __t->omp_clause.code < (int) (CODE1) \ || (int) __t->omp_clause.code > (int) (CODE2)) \ omp_clause_range_check_failed (__t, __FILE__, __LINE__, \ __FUNCTION__, (CODE1), (CODE2)); \ __t; }) But I cannot find any definition for OMP_CLAUSE_CHECK. Where does GCC define this macro? Thanks. Amittai Amittai Aviram PhD Student in Computer Science Yale University 646 483 2639 amittai.aviram@xxxxxxxx http://www.amittai.com