[gomp] initial c++ support
Richard Henderson
rth@redhat.com
Thu Oct 13 01:22:00 GMT 2005
There are many things missing yet for full support:
* I still don't parse "for (int i = 0; ...)". I'll have to poke about
to see what I can do reusing existing parser bits, but still retain
enough control to reliably extract "i" and "0" after the fact.
* Don't handle types with constructors in data clauses.
* Don't handle templates.
But this is good enough to run many of the C tests.
r~
gcc/
* c-omp.c (c_finish_omp_critical): Return statement.
(c_finish_omp_for): Accept explicit incoming locus. Be careful
with expressions with no locus.
* c-common.h: Update.
* c-parser.c (c_parser_omp_for_loop): Pass for locus to
c_finish_omp_for. Don't build a compound statement here.
* c-omp (fopenmp): Accept for C++ and ObjC/++.
gcc/cp/
* Make-lang.in (CXX_C_OBJS): Add c-omp.o.
* cp-tree.h (begin_omp_parallel, finish_omp_parallel): Declare.
(finish_omp_threadprivate): Declare.
* parser.c (struct cp_lexer): Add in_pragma.
(cp_lexer_consume_token): Don't consume a PRAGMA_EOL when in_pragma.
(cp_parser_skip_to_closing_parenthesis): Stop at PRAGMA_EOL.
(cp_parser_skip_to_end_of_statement): Likewise.
(cp_parser_skip_to_end_of_block_or_statement): Likewise.
(cp_parser_skip_to_closing_brace): Likewise.
(cp_parser_skip_to_pragma_eol): Reset in_pragma.
(cp_parser_require_pragma_eol): New.
(cp_parser_statement): Add in_compound argument; update all callers.
Restart if a non-statement pragma seen outside a compound.
(cp_parser_statement_seq_opt): Stop at PRAGMA_EOL.
(cp_parser_declaration_seq_opt): Likewise.
(cp_parser_member_specification_opt): Likewise.
(cp_parser_function_definition_after_decl): Likewise.
(cp_parser_skip_until_found): Likewise.
(cp_parser_cache_group): Likewise.
(enum pragma_omp_clause, cp_parser_omp_clause_name,
check_no_duplicate_clause, cp_parser_omp_var_list_no_open,
cp_parser_omp_var_list, cp_parser_omp_clause_copyin,
cp_parser_omp_clause_default, cp_parser_omp_clause_if,
cp_parser_omp_clause_nowait, cp_parser_omp_clause_num_threads,
cp_parser_omp_clause_ordered, cp_parser_omp_clause_reduction,
cp_parser_omp_clause_schedule, cp_parser_omp_all_clauses,
cp_parser_omp_structured_block, cp_parser_omp_atomic,
cp_parser_omp_barrier, cp_parser_omp_critical, cp_parser_omp_flush,
cp_parser_omp_for_loop, cp_parser_omp_for, cp_parser_omp_master,
cp_parser_omp_ordered, cp_parser_omp_sections_scope,
cp_parser_omp_sections, cp_parser_omp_parallel, cp_parser_omp_single,
cp_parser_omp_threadprivate, cp_parser_omp_construct): New.
(cp_parser_pragma): Handle OpenMP pragmas.
* semantics.c (finish_omp_threadprivate): New.
(begin_omp_parallel, finish_omp_parallel): New.
gcc/testsuite/
* g++.dg/dg.exp: Don't run gomp tests.
* g++.dg/gomp/atomic-1.C, g++.dg/gomp/atomic-2.C,
g++.dg/gomp/atomic-3.C, g++.dg/gomp/atomic-4.C, g++.dg/gomp/atomic-5.C,
g++.dg/gomp/atomic-6.C, g++.dg/gomp/atomic-7.C, g++.dg/gomp/atomic-8.C,
g++.dg/gomp/atomic-9.C, g++.dg/gomp/barrier-1.C,
g++.dg/gomp/barrier-2.C, g++.dg/gomp/copyin-1.C,
g++.dg/gomp/critical-1.C, g++.dg/gomp/critical-2.C,
g++.dg/gomp/flush-1.C, g++.dg/gomp/flush-2.C, g++.dg/gomp/for-1.C,
g++.dg/gomp/for-10.C, g++.dg/gomp/for-11.C, g++.dg/gomp/for-12.C,
g++.dg/gomp/for-13.C, g++.dg/gomp/for-14.C, g++.dg/gomp/for-2.C,
g++.dg/gomp/for-3.C, g++.dg/gomp/for-4.C, g++.dg/gomp/for-5.C,
g++.dg/gomp/for-6.C, g++.dg/gomp/for-7.C, g++.dg/gomp/for-8.C,
g++.dg/gomp/for-9.C, g++.dg/gomp/gomp.exp, g++.dg/gomp/macro-1.C,
g++.dg/gomp/macro-2.C, g++.dg/gomp/master-1.C, g++.dg/gomp/master-2.C,
g++.dg/gomp/master-3.C, g++.dg/gomp/ordered-1.C,
g++.dg/gomp/ordered-2.C, g++.dg/gomp/parallel-1.C,
g++.dg/gomp/parallel-2.C, g++.dg/gomp/parallel-3.C,
g++.dg/gomp/parallel-4.C, g++.dg/gomp/sections-1.C,
g++.dg/gomp/sections-2.C, g++.dg/gomp/tls-1.C: New files.
libgomp/
* testsuite/lib/libgomp-dg.exp: Set blddir at toplevel.
(libgomp_init): Use lang_test_file, lang_library_path, and
lang_link_flags, set by the subdirectory files. Add -fopenmp here.
* testsuite/libgomp.fortran/fortran.exp (lang_library_path): New.
(lang_test_file, lang_link_flags): New.
(DEFAULT_FFLAGS, ALWAYS_CFLAGS, multilibs, blddir): Remove.
* testsuite/libgomp.c++/c++.exp, testsuite/libgomp.c++/loop-1.C,
testsuite/libgomp.c++/loop-2.C, testsuite/libgomp.c++/loop-3.C,
testsuite/libgomp.c++/loop-4.C, testsuite/libgomp.c++/nested-1.C,
testsuite/libgomp.c++/parallel-1.C,
testsuite/libgomp.c++/reduction-1.C,
testsuite/libgomp.c++/reduction-2.C,
testsuite/libgomp.c++/reduction-3.C,
testsuite/libgomp.c++/sections-1.C, testsuite/libgomp.c++/shared-1.C,
testsuite/libgomp.c++/shared-2.C, testsuite/libgomp.c++/single-1.C,
testsuite/libgomp.c++/single-2.C, testsuite/libgomp.c++/single-3.C:
New files, largely cribbed from the C testsuite.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: d-gomp-c++.gz
Type: application/x-gzip
Size: 21575 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20051013/943f1faa/attachment.bin>
More information about the Gcc-patches
mailing list