[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