diff options
author | ctice <ctice@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-09-08 23:35:14 +0000 |
---|---|---|
committer | ctice <ctice@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-09-08 23:35:14 +0000 |
commit | 786f817740a7dca966e5f49b0b4976b32d0be744 (patch) | |
tree | 7aed39930d05ef1f28db4df7227d5b55ec792763 | |
parent | 1eadcdffcb14af40bebaec65de4bf7ef75756164 (diff) | |
download | gcc-786f817740a7dca966e5f49b0b4976b32d0be744.tar.gz |
Update libvtv testsuite so that most of the tests now run under
the dejagnu test harness.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202373 138bc75d-0d04-0410-961f-82ee72b054a4
66 files changed, 2132 insertions, 201 deletions
diff --git a/libvtv/ChangeLog b/libvtv/ChangeLog index 265a861e8f9..20092f4d0a3 100644 --- a/libvtv/ChangeLog +++ b/libvtv/ChangeLog @@ -1,3 +1,84 @@ +2013-09-08 Caroline Tice <cmtice@google.com> + + * testsuite/event-main.cc: Move to libvtv.cc subdirectory. + * testsuite/environment.cc: Ditto. + * testsuite/template-list2.cc: Ditto. + * testsuite/event.h: Ditto. + * testsuite/dataentry.cc: Ditto. + * testsuite/event-private.h: Ditto. + * testsuite/virtual_inheritance.cc: Ditto. + * testsuite/povray-derived.cc: Ditto. + * testsuite/nested_vcall_test.cc: Ditto. + * testsuite/template-list-iostream.cc: Ditto. + * testsuite/parts-test-extra-parts-views.h: Ditto. + * testsuite/virtfunc-test.cc: Ditto. + * testsuite/parts-test-extra-parts.h: Ditto. + * testsuite/const_vtable.cc: Ditto. + * testsuite/template-list.cc: Ditto. + * testsuite/dup_name.cc: Ditto. + * testsuite/thunk.cc: Ditto. + * testsuite/parts-test-main.h: Ditto. + * testsuite/mul_inh.cc: Ditto. + * testsuite/test1.cc: Ditto. + * testsuite/bb_tests.cc: Ditto. + * testsuite/v8-test-2.cc: Ditto. + * testsuite/thunk_vtable_map_attack.cc: Ditto. + * testsuite/xlan-test.cc: Ditto. + * testsuite/parts-test-main.cpp: Move to libvtv.cc subdirectory and + change file extension from .cc to .cpp. + * testsuite/event-definitions.cpp: Ditto. + * testsuite/event-main.cpp: Ditto. + * testsuite/derived-main.cpp: Ditto. + * testsuite/derived-lib.cpp: Ditto. + * testsuite/event-private.cpp: Ditto. + * testsuite/parts-test-extra-parts-views.cpp: Ditto. + * testsuite/parts-test-extra-parts.cpp: Ditto. + * testsuite/parts-test.list: Move to libvtv.cc subdirectory. Change + file extensions inside file from .cc to .cpp. + * testsuite/event.list: Ditto. + * testsuite/derived.list: Ditto. + * testsuite/register_pair.cc: Move to libvtv.cc; rename file to + register_set_pair.cc; include stdlib.h, stdio.h stdint.h string.h + (KEY_TYPE_FIXED_SIZE): New define. + (key_buffer, name_string, fake_names): New global variables. + (generate_names): New function. + (vtv_string_hans): New function. + (main): Add call to generate_names. Update middle for-loop to + initialize new parameters for __VLTRegisterPair... calls; move calls + to __VLTRegisterPair... to middle for-loop. Add calls to + __VLTRegisterSet... + * testsuite/register_pair_mt.cc: Ditto; renamed to + register_set_pair_mt.cc + * testsuite/libvtv.cc/vtv.exp: New file. + * testsuite/libvtv.mempool.cc/mempool.exp: New file. + * testsuite/libvtv.mt.cc/mt.exp: New file. + * testsuite/lib/libvtv.exp: New file. + * testsuite/lib/libvtv-dg.exp: New file. + * testsuite/config/default.exp: New file. + * testsuite/Makefile.am: New file. (Old file was moved to other-tests + subdirectory.) + * testsuite/Makefile.in: New file (generated). + * testsuite/mempool_negative.c: Change to C++ file; move to + libvtv.mempool.cc; include vtv-change-permission.h. + (main): Add call to __VLTChangePermission. + * testsuite/mempool_positive.c: Change to C++ file; move to + libvtv.mempool.cc; include vtv-change-permission.h. + (main): Add call to __VLTChangePermission. + * testsuite/temp_deriv3.cc: Move to other-tests subdirectory. + * testsuite/environment-fail-64.s: Ditto. + * testsutite/dlopen.cc: Ditto. + * testsuite/so.cc: Ditto. + * testsuite/temp_deriv2.cc: Ditto. + * testsuite/field-test.cc: Ditto. + * testsuite/dlopen_mt.cc: Ditto. + * testsuite/environment-fail-32.s: Ditto. + * testsuite/temp_deriv.cc: Ditto. + * testsuite/replace-fail.cc: Ditto. + * testsuite/other-tests/Makefile.am: New file. Copied from the + Makefile.am that used to be in testsuite directory. + * testsuite/other-tests/Makefile.in: Generated. (New file). + * testsuite/other-tests/README: New file. + 2013-09-07 Paolo Carlini <paolo.carlini@oracle.com> * testsuite/Makefile.am: Remove #if ENABLE_VTABLE_VERIFY check around diff --git a/libvtv/testsuite/Makefile.am b/libvtv/testsuite/Makefile.am index 56f76a79f5b..a2c1e9f4ea3 100644 --- a/libvtv/testsuite/Makefile.am +++ b/libvtv/testsuite/Makefile.am @@ -1,52 +1,11 @@ -## Makefile for the testsuite subdirectory of the VTV library. -## -## Copyright (C) 2013 Free Software Foundation, Inc. -## -## Process this file with automake to produce Makefile.in. -## -## This file is part of the Vtable Verification (VTV) Library. This -## library is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 3, or (at your option) -## any later version. +## Process this with automake to create Makefile.in -## This library is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. +AUTOMAKE_OPTIONS = foreign dejagnu -## You should have received a copy of the GNU General Public License -## along with this library; see the file COPYING3. If not see -## <http://www.gnu.org/licenses/>. +EXPECT = `if [ -f ../../expect/expect ] ; then \ + echo ../../expect/expect ; \ + else echo expect ; fi` -AUTOMAKE_OPTIONS = nostdinc - -# Runs the testsuite via a script. - -# Create subdirectories. -stamp-subdir: - if test ! -d lib64; then \ - mkdir -p lib64; \ - fi; \ - if test ! -d lib32; then \ - mkdir -p lib32; \ - fi; \ - echo `date` > stamp-subdir; - - -testing_script=${libvtv_srcdir}/scripts/run-testsuite.sh -check-script: ${testing_script} stamp-subdir - -@(chmod +x ${testing_script}; \ - ${testing_script} ${libvtv_srcdir} ${libvtv_builddir}) - -check-am: - $(MAKE) $(AM_MAKEFLAGS) check-script - -.PHONY: check-script - -# By adding these files here, automake will remove them for 'make clean' -CLEANFILES = *.out environment-fail-* stamp-* replace-fail-* - -# To remove directories. -clean-local: - rm -rf lib* +RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \ + echo ${srcdir}/../../dejagnu/runtest ; \ + else echo runtest ; fi` diff --git a/libvtv/testsuite/Makefile.in b/libvtv/testsuite/Makefile.in index 66a75e16ea6..ba28e744f95 100644 --- a/libvtv/testsuite/Makefile.in +++ b/libvtv/testsuite/Makefile.in @@ -53,6 +53,8 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = +DEJATOOL = $(PACKAGE) +RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ @@ -190,11 +192,15 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ toplevel_builddir = @toplevel_builddir@ toplevel_srcdir = @toplevel_srcdir@ -AUTOMAKE_OPTIONS = nostdinc -testing_script = ${libvtv_srcdir}/scripts/run-testsuite.sh +AUTOMAKE_OPTIONS = foreign dejagnu +EXPECT = `if [ -f ../../expect/expect ] ; then \ + echo ../../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \ + echo ${srcdir}/../../dejagnu/runtest ; \ + else echo runtest ; fi` -# By adding these files here, automake will remove them for 'make clean' -CLEANFILES = *.out environment-fail-* stamp-* replace-fail-* all: all-am .SUFFIXES: @@ -240,7 +246,46 @@ TAGS: ctags: CTAGS CTAGS: + +check-DEJAGNU: site.exp + srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ + if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ + then :; else exit_status=1; fi; \ + done; \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi; \ + exit $$exit_status +site.exp: Makefile + @echo 'Making a new site.exp file...' + @echo '## these variables are automatically generated by make ##' >site.tmp + @echo '# Do not edit here. If you wish to override these values' >>site.tmp + @echo '# edit the last section' >>site.tmp + @echo 'set srcdir $(srcdir)' >>site.tmp + @echo "set objdir `pwd`" >>site.tmp + @echo 'set build_alias "$(build_alias)"' >>site.tmp + @echo 'set build_triplet $(build_triplet)' >>site.tmp + @echo 'set host_alias "$(host_alias)"' >>site.tmp + @echo 'set host_triplet $(host_triplet)' >>site.tmp + @echo 'set target_alias "$(target_alias)"' >>site.tmp + @echo 'set target_triplet $(target_triplet)' >>site.tmp + @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp + @test ! -f site.exp || \ + sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp + @-rm -f site.bak + @test ! -f site.exp || mv site.exp site.bak + @mv site.tmp site.exp + +distclean-DEJAGNU: + -rm -f site.exp site.bak + -l='$(DEJATOOL)'; for tool in $$l; do \ + rm -f $$tool.sum $$tool.log; \ + done check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-am all-am: Makefile installdirs: @@ -261,7 +306,6 @@ install-strip: mostlyclean-generic: clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -272,11 +316,11 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-libtool clean-local mostlyclean-am +clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic +distclean-am: clean-am distclean-DEJAGNU distclean-generic dvi: dvi-am @@ -336,43 +380,20 @@ ps-am: uninstall-am: -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - clean-local distclean distclean-generic distclean-libtool dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Runs the testsuite via a script. - -# Create subdirectories. -stamp-subdir: - if test ! -d lib64; then \ - mkdir -p lib64; \ - fi; \ - if test ! -d lib32; then \ - mkdir -p lib32; \ - fi; \ - echo `date` > stamp-subdir; -check-script: ${testing_script} stamp-subdir - -@(chmod +x ${testing_script}; \ - ${testing_script} ${libvtv_srcdir} ${libvtv_builddir}) - -check-am: - $(MAKE) $(AM_MAKEFLAGS) check-script +.MAKE: check-am install-am install-strip -.PHONY: check-script +.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \ + clean-libtool distclean distclean-DEJAGNU distclean-generic \ + distclean-libtool dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am -# To remove directories. -clean-local: - rm -rf lib* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libvtv/testsuite/config/default.exp b/libvtv/testsuite/config/default.exp new file mode 100644 index 00000000000..6d5eba84f10 --- /dev/null +++ b/libvtv/testsuite/config/default.exp @@ -0,0 +1,17 @@ +# Copyright (C) 2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +load_lib "standard.exp" diff --git a/libvtv/testsuite/event.list b/libvtv/testsuite/event.list deleted file mode 100644 index 83226fdd03f..00000000000 --- a/libvtv/testsuite/event.list +++ /dev/null @@ -1 +0,0 @@ -event-main.cc event-definitions.cc event-private.cc
\ No newline at end of file diff --git a/libvtv/testsuite/lib/libvtv-dg.exp b/libvtv/testsuite/lib/libvtv-dg.exp new file mode 100644 index 00000000000..b140c194cdc --- /dev/null +++ b/libvtv/testsuite/lib/libvtv-dg.exp @@ -0,0 +1,21 @@ +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +proc libvtv-dg-test { prog do_what extra_tool_flags } { + return [gcc-dg-test-1 libvtv_target_compile $prog $do_what $extra_tool_flags] +} + +proc libvtv-dg-prune { system text } { + return [gcc-dg-prune $system $text] +} diff --git a/libvtv/testsuite/lib/libvtv.exp b/libvtv/testsuite/lib/libvtv.exp new file mode 100644 index 00000000000..83674be29a2 --- /dev/null +++ b/libvtv/testsuite/lib/libvtv.exp @@ -0,0 +1,220 @@ +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Damn dejagnu for not having proper library search paths for load_lib. +# We have to explicitly load everything that gcc-dg.exp wants to load. + +proc load_gcc_lib { filename } { + global srcdir loaded_libs + + load_file $srcdir/../../gcc/testsuite/lib/$filename + set loaded_libs($filename) "" +} + +load_lib dg.exp +load_gcc_lib file-format.exp +load_gcc_lib target-supports.exp +load_gcc_lib target-supports-dg.exp +load_gcc_lib scanasm.exp +load_gcc_lib scandump.exp +load_gcc_lib scanrtl.exp +load_gcc_lib scantree.exp +load_gcc_lib scanipa.exp +load_gcc_lib prune.exp +load_gcc_lib target-libpath.exp +load_gcc_lib wrapper.exp +load_gcc_lib gcc-defs.exp +load_gcc_lib torture-options.exp +load_gcc_lib timeout.exp +load_gcc_lib timeout-dg.exp +load_gcc_lib fortran-modules.exp +load_gcc_lib gcc-dg.exp + +set dg-do-what-default run + +# +# GCC_UNDER_TEST is the compiler under test. +# + +set libvtv_compile_options "" + +# +# libvtv_init +# + +if [info exists TOOL_OPTIONS] { + set multilibs [get_multilibs $TOOL_OPTIONS] +} else { + set multilibs [get_multilibs] +} + +proc libvtv_init { args } { + global srcdir blddir objdir tool_root_dir + global libvtv_initialized + global tmpdir + global blddir + global gluefile wrap_flags + global ALWAYS_CFLAGS + global CFLAGS + global TOOL_EXECUTABLE TOOL_OPTIONS + global GCC_UNDER_TEST + global TESTING_IN_BUILD_TREE + global target_triplet + global always_ld_library_path + + set blddir [lookfor_file [get_multilibs] libvtv] + + # We set LC_ALL and LANG to C so that we get the same error + # messages as expected. + setenv LC_ALL C + setenv LANG C + + if ![info exists GCC_UNDER_TEST] then { + if [info exists TOOL_EXECUTABLE] { + set GCC_UNDER_TEST $TOOL_EXECUTABLE + } else { + set GCC_UNDER_TEST "[find_gcc]" + } + } + + if ![info exists tmpdir] { + set tmpdir "/tmp" + } + + if [info exists gluefile] { + unset gluefile + } + + if {![info exists CFLAGS]} { + set CFLAGS "" + } + + # Locate libgcc.a so we don't need to account for different values of + # SHLIB_EXT on different platforms + set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] + if {$gccdir != ""} { + set gccdir [file dirname $gccdir] + } + + # Compute what needs to be put into LD_LIBRARY_PATH + set always_ld_library_path ".:${blddir}/.libs" + + # Compute what needs to be added to the existing LD_LIBRARY_PATH. + if {$gccdir != ""} { + # Add AIX pthread directory first. + if { [llength [glob -nocomplain ${gccdir}/pthread/libgcc_s*.a]] >= 1 } { + append always_ld_library_path ":${gccdir}/pthread" + } + append always_ld_library_path ":${gccdir}" + set compiler [lindex $GCC_UNDER_TEST 0] + + if { [is_remote host] == 0 && [which $compiler] != 0 } { + foreach i "[exec $compiler --print-multi-lib]" { + set mldir "" + regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir + set mldir [string trimright $mldir "\;@"] + if { "$mldir" == "." } { + continue + } + if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { + append always_ld_library_path ":${gccdir}/${mldir}" + } + } + } + } + + set ALWAYS_CFLAGS "" + if { $blddir != "" } { + lappend ALWAYS_CFLAGS "additional_flags=-B${blddir}/" + lappend ALWAYS_CFLAGS "additional_flags=-I${blddir}" + lappend ALWAYS_CFLAGS "ldflags=-L${blddir}/.libs" + } + lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/.." + + if [istarget *-*-darwin*] { + lappend ALWAYS_CFLAGS "additional_flags=-shared-libgcc" + } + + if [info exists TOOL_OPTIONS] { + lappend ALWAYS_CFLAGS "additional_flags=$TOOL_OPTIONS" + } + + # Make sure that lines are not wrapped. That can confuse the + # error-message parsing machinery. + lappend ALWAYS_CFLAGS "additional_flags=-fmessage-length=0" + + # Turn on vtable verification + lappend ALWAYS_CFLAGS "-fvtable-verify=std" + # lappend ALWAYS_CFLAGS "ldflags=-lvtv" +} + +# +# libvtv_target_compile -- compile a source file +# + +proc libvtv_target_compile { source dest type options } { + global blddir + global libvtv_compile_options + global gluefile wrap_flags + global ALWAYS_CFLAGS + global GCC_UNDER_TEST + global lang_test_file + global lang_library_path + global lang_link_flags + + if { [info exists lang_test_file] } { + if { $blddir != "" } { + lappend options "ldflags=-L${blddir}/${lang_library_path}" + } + lappend options "ldflags=${lang_link_flags}" + } + + if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } { + lappend options "libs=${gluefile}" + lappend options "ldflags=${wrap_flags}" + } + + lappend options "additional_flags=[libio_include_flags]" + lappend options "timeout=[timeout_value]" + lappend options "compiler=$GCC_UNDER_TEST" + + set options [concat $libvtv_compile_options $options] + + if [info exists ALWAYS_CFLAGS] { + set options [concat "$ALWAYS_CFLAGS" $options] + } + + set options [dg-additional-files-options $options $source] + + set result [target_compile $source $dest $type $options] + + return $result +} + +proc libvtv_option_help { } { + send_user " --additional_options,OPTIONS\t\tUse OPTIONS to compile the testcase files. OPTIONS should be comma-separated.\n" +} + +proc libvtv_option_proc { option } { + if [regexp "^--additional_options," $option] { + global libvtv_compile_options + regsub "--additional_options," $option "" option + foreach x [split $option ","] { + lappend libvtv_compile_options "additional_flags=$x" + } + return 1 + } else { + return 0 + } +} diff --git a/libvtv/testsuite/libvtv.cc/bb_tests.cc b/libvtv/testsuite/libvtv.cc/bb_tests.cc new file mode 100644 index 00000000000..2a2447d02c8 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/bb_tests.cc @@ -0,0 +1,53 @@ +// { dg-do run } +struct base +{ + int total; + virtual void add (int i) { total += i; } + virtual void sub (int i) { total -= i; } + virtual void init (void) { total = 73; } +}; + +struct derived : public base +{ + int total; + virtual void add (int i) { total += 10 * i; } + virtual void sub (int i) { total -= 2 * i; } + virtual void init (void) { total = 0; } +}; + +bool +get_cond_value (int x) +{ + if ((x % 3) > 0) + return true; + else + return false; + + return false; +} + +int +main (int argc, char **argv) +{ + base *a; + bool cond_value = get_cond_value (10); + int x; + + if (cond_value) + a = new base (); + else + a = new derived (); + + cond_value = get_cond_value (47); + x = 0; + if (!cond_value) + x = 17; + + a->init (); + + for ( ; x < 10; ++x) + { + a->add(50); + a->sub(25); + } +} diff --git a/libvtv/testsuite/const_vtable.cc b/libvtv/testsuite/libvtv.cc/const_vtable.cc index a0946abf4fe..3229f008308 100644 --- a/libvtv/testsuite/const_vtable.cc +++ b/libvtv/testsuite/libvtv.cc/const_vtable.cc @@ -1,3 +1,4 @@ +// { dg-do run } extern "C" int printf(const char *,...); struct V1 { int v; diff --git a/libvtv/testsuite/dataentry.cc b/libvtv/testsuite/libvtv.cc/dataentry.cc index fa027d5bc71..6246136e521 100644 --- a/libvtv/testsuite/dataentry.cc +++ b/libvtv/testsuite/libvtv.cc/dataentry.cc @@ -1,3 +1,5 @@ +// { dg-do run } + template<int patch_dim, int patch_space_dim> class DataOutInterface { diff --git a/libvtv/testsuite/libvtv.cc/derived-lib.cpp b/libvtv/testsuite/libvtv.cc/derived-lib.cpp new file mode 100644 index 00000000000..375dbe41bde --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/derived-lib.cpp @@ -0,0 +1,18 @@ +#include "lib.h" + +struct Derived_Private : public Base +{ + virtual ~Derived_Private() + { printf("in Derived_Private destructor\n"); } +}; + +Base * GetPrivate() +{ + return new Derived_Private(); +} + +void Destroy(Base * pb) +{ + delete pb; // Virtual call #1 +} + diff --git a/libvtv/testsuite/libvtv.cc/derived-main.cpp b/libvtv/testsuite/libvtv.cc/derived-main.cpp new file mode 100644 index 00000000000..0933ff69621 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/derived-main.cpp @@ -0,0 +1,18 @@ +// { dg-do run } + +#include "lib.h" + +struct Derived: public Base +{ + virtual ~Derived() + { printf("In Derived destructor\n"); } +}; + +int main() +{ + Derived * d = new Derived; + Destroy(d); + Base * pp = GetPrivate(); + delete pp; // Virtual call #2 +} + diff --git a/libvtv/testsuite/libvtv.cc/derived.list b/libvtv/testsuite/libvtv.cc/derived.list new file mode 100644 index 00000000000..6ea3b9cf603 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/derived.list @@ -0,0 +1 @@ +derived-main.cpp derived-lib.cpp diff --git a/libvtv/testsuite/dup_name.cc b/libvtv/testsuite/libvtv.cc/dup_name.cc index f0f1c2a8136..d9d02512630 100644 --- a/libvtv/testsuite/dup_name.cc +++ b/libvtv/testsuite/libvtv.cc/dup_name.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> extern "C" int printf(const char *, ...); diff --git a/libvtv/testsuite/environment.cc b/libvtv/testsuite/libvtv.cc/environment.cc index 83adf53b601..af1a8775298 100644 --- a/libvtv/testsuite/environment.cc +++ b/libvtv/testsuite/libvtv.cc/environment.cc @@ -1,3 +1,4 @@ +// { dg-do run } extern "C" int printf(const char *, ...); diff --git a/libvtv/testsuite/event-definitions.cc b/libvtv/testsuite/libvtv.cc/event-defintions.cpp index ba9efe11a4d..ba9efe11a4d 100644 --- a/libvtv/testsuite/event-definitions.cc +++ b/libvtv/testsuite/libvtv.cc/event-defintions.cpp diff --git a/libvtv/testsuite/event-main.cc b/libvtv/testsuite/libvtv.cc/event-main.cpp index b0312848934..95c4640313a 100644 --- a/libvtv/testsuite/event-main.cc +++ b/libvtv/testsuite/libvtv.cc/event-main.cpp @@ -1,3 +1,5 @@ +// { dg-do run } + #include "event-private.h" template<typename T> void derefIfNotNull(T* ptr) diff --git a/libvtv/testsuite/event-private.cc b/libvtv/testsuite/libvtv.cc/event-private.cpp index a27f4697a25..a27f4697a25 100644 --- a/libvtv/testsuite/event-private.cc +++ b/libvtv/testsuite/libvtv.cc/event-private.cpp diff --git a/libvtv/testsuite/event-private.h b/libvtv/testsuite/libvtv.cc/event-private.h index 678ab5f68af..678ab5f68af 100644 --- a/libvtv/testsuite/event-private.h +++ b/libvtv/testsuite/libvtv.cc/event-private.h diff --git a/libvtv/testsuite/event.h b/libvtv/testsuite/libvtv.cc/event.h index 61e1d7c9172..61e1d7c9172 100644 --- a/libvtv/testsuite/event.h +++ b/libvtv/testsuite/libvtv.cc/event.h diff --git a/libvtv/testsuite/libvtv.cc/event.list b/libvtv/testsuite/libvtv.cc/event.list new file mode 100644 index 00000000000..77606f8c122 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/event.list @@ -0,0 +1 @@ +event-main.cpp event-definitions.cpp event-private.cpp
\ No newline at end of file diff --git a/libvtv/testsuite/libvtv.cc/mul_inh.cc b/libvtv/testsuite/libvtv.cc/mul_inh.cc new file mode 100644 index 00000000000..b32b710c835 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/mul_inh.cc @@ -0,0 +1,27 @@ +// { dg-do run } + +extern "C" int printf(const char *, ...); + +struct A { + virtual ~A() {} +}; + +struct B { + virtual ~B() {} +}; + +struct C: public A { + virtual ~C() {} +}; + +struct D: public C, B { + virtual ~D() {} +}; + +D d; + +int main() +{ + printf ("%p\n", &d); + return 0; +} diff --git a/libvtv/testsuite/nested_vcall_test.cc b/libvtv/testsuite/libvtv.cc/nested_vcall_test.cc index 13d7143edf8..9d1a9c692da 100644 --- a/libvtv/testsuite/nested_vcall_test.cc +++ b/libvtv/testsuite/libvtv.cc/nested_vcall_test.cc @@ -1,3 +1,4 @@ +// { dg-do run } class EtherCtrl { protected: diff --git a/libvtv/testsuite/parts-test-extra-parts-views.cc b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts-views.cpp index 13d7fdc6e4f..13d7fdc6e4f 100644 --- a/libvtv/testsuite/parts-test-extra-parts-views.cc +++ b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts-views.cpp diff --git a/libvtv/testsuite/parts-test-extra-parts-views.h b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts-views.h index 0784c0ecdaa..0784c0ecdaa 100644 --- a/libvtv/testsuite/parts-test-extra-parts-views.h +++ b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts-views.h diff --git a/libvtv/testsuite/parts-test-extra-parts.cc b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts.cpp index dbd3dbfd8f5..dbd3dbfd8f5 100644 --- a/libvtv/testsuite/parts-test-extra-parts.cc +++ b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts.cpp diff --git a/libvtv/testsuite/parts-test-extra-parts.h b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts.h index 4ed2a4ce1a0..4ed2a4ce1a0 100644 --- a/libvtv/testsuite/parts-test-extra-parts.h +++ b/libvtv/testsuite/libvtv.cc/parts-test-extra-parts.h diff --git a/libvtv/testsuite/parts-test-main.cc b/libvtv/testsuite/libvtv.cc/parts-test-main.cpp index c90901e7919..a0cc721abf5 100644 --- a/libvtv/testsuite/parts-test-main.cc +++ b/libvtv/testsuite/libvtv.cc/parts-test-main.cpp @@ -1,3 +1,5 @@ +// { dg-do run } + #include "parts-test-main.h" #include "parts-test-extra-parts-views.h" diff --git a/libvtv/testsuite/parts-test-main.h b/libvtv/testsuite/libvtv.cc/parts-test-main.h index fb631dec340..fb631dec340 100644 --- a/libvtv/testsuite/parts-test-main.h +++ b/libvtv/testsuite/libvtv.cc/parts-test-main.h diff --git a/libvtv/testsuite/libvtv.cc/parts-test.list b/libvtv/testsuite/libvtv.cc/parts-test.list new file mode 100644 index 00000000000..11a959a62d1 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/parts-test.list @@ -0,0 +1 @@ +parts-test-main.cpp parts-test-extra-parts.cpp parts-test-extra-parts-views.cpp diff --git a/libvtv/testsuite/povray-derived.cc b/libvtv/testsuite/libvtv.cc/povray-derived.cc index 4f56a3d730f..9005826dff4 100644 --- a/libvtv/testsuite/povray-derived.cc +++ b/libvtv/testsuite/libvtv.cc/povray-derived.cc @@ -1,3 +1,5 @@ +// { dg-do run } + // Small test case from povray, see if it reproduces. #include <stdio.h> diff --git a/libvtv/testsuite/libvtv.cc/register_set_pair.cc b/libvtv/testsuite/libvtv.cc/register_set_pair.cc new file mode 100644 index 00000000000..b7f08331d68 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/register_set_pair.cc @@ -0,0 +1,101 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + +#include "vtv_utils.h" +#include "vtv_rts.h" + +/* This configuration will test mostly inserting of elements that are already inserted since + the number of repeats is 200 */ + +#define NUM_MAPS 4000 +#define ELEMENTS_PER_MAP 100 +#define NUM_REPEATS 200 + +#define KEY_TYPE_FIXED_SIZE 8 +void *key_buffer = malloc (17); +typedef char * name_string; +name_string fake_names[NUM_MAPS]; + +/* This variable has to be put in rel.ro */ +void * maps[NUM_MAPS] VTV_PROTECTED_VAR; + +struct fake_vt { + void * fake_vfp [4]; +}; +void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; + +void +generate_names (void) +{ + int i; + + for (i = 0; i < NUM_MAPS; ++i) + { + fake_names[i] = (char *) malloc (9 * sizeof (char)); + snprintf (fake_names[i], 9, "name%d", i); + } +} + +static uint32_t +vtv_string_hash(const char *in) +{ + const char *s = in; + uint32_t h = 0; + + for ( ; *s; ++s) + h = 5 * h + *s; + return h; +} + +int main() +{ + __VLTChangePermission(__VLTP_READ_WRITE); + + generate_names (); + + for (int k = 0; k < NUM_REPEATS; k++) + { + int curr_fake_vt = 0; + for (int i = 0; i < NUM_MAPS; i++) + { + uint32_t *value_ptr = (uint32_t *) key_buffer; + uint32_t len1 = strlen (fake_names[i]); + uint32_t hash_value = vtv_string_hash (fake_names[i]); + void *temp_array[ELEMENTS_PER_MAP]; + + *value_ptr = len1; + value_ptr++; + *value_ptr = hash_value; + + memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i], + len1); + + +#ifdef VTV_DEBUG + __VLTRegisterPairDebug (&maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt], "", ""); +#else + __VLTRegisterPair (&maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt]); +#endif + for (int j = 0; j < ELEMENTS_PER_MAP; j++) + { + temp_array[j] = &fake_vts[curr_fake_vt]; + curr_fake_vt++; + } +#ifdef VTV_DEBUG + __VLTRegisterSetDebug (&maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#else + __VLTRegisterSet (&maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#endif + } + } + + __VLTChangePermission(__VLTP_READ_ONLY); + + return 0; +} diff --git a/libvtv/testsuite/libvtv.cc/register_set_pair_inserts.cc b/libvtv/testsuite/libvtv.cc/register_set_pair_inserts.cc new file mode 100644 index 00000000000..297e8756797 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/register_set_pair_inserts.cc @@ -0,0 +1,106 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + +#include "vtv_utils.h" +#include "vtv_rts.h" + +/* This configuration will test mostly inserting of new elements since + the number of repeats is 1. It should also do a lot of rehashing */ + +/* This test case may fail depending on the system configuration. + Check the value of /proc/sys/vm/max_map_count and fix by doing + Ex: sudo sh -c "echo 131060 > /proc/sys/vm/max_map_count" */ + +#define NUM_MAPS 40000 +#define ELEMENTS_PER_MAP 100 +#define NUM_REPEATS 1 + +#define KEY_TYPE_FIXED_SIZE 8 +void *key_buffer = malloc (17); +typedef char * name_string; +name_string fake_names[NUM_MAPS]; + +/* This variable has to be put in rel.ro */ +void * maps[NUM_MAPS] VTV_PROTECTED_VAR; + +struct fake_vt { + void * fake_vfp [4]; +}; +void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; + + +void +generate_names (void) +{ + int i; + + for (i = 0; i < NUM_MAPS; ++i) + { + fake_names[i] = (char *) malloc (9 * sizeof (char)); + snprintf (fake_names[i], 9, "name%d", i); + } +} + +static uint32_t +vtv_string_hash(const char *in) +{ + const char *s = in; + uint32_t h = 0; + + for ( ; *s; ++s) + h = 5 * h + *s; + return h; +} + +int main() +{ + __VLTChangePermission(__VLTP_READ_WRITE); + + generate_names(); + + for (int k = 0; k < NUM_REPEATS; k++) + { + int curr_fake_vt = 0; + for (int i = 0; i < NUM_MAPS; i++) + { + uint32_t *value_ptr = (uint32_t *) key_buffer; + uint32_t len1 = strlen (fake_names[i]); + uint32_t hash_value = vtv_string_hash (fake_names[i]); + void *temp_array[ELEMENTS_PER_MAP]; + + *value_ptr = len1; + value_ptr++; + *value_ptr = hash_value; + + memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i], + len1); + + +#ifdef VTV_DEBUG + __VLTRegisterPairDebug (&maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt], "", ""); +#else + __VLTRegisterPair (&maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt]); +#endif + for (int j = 0; j < ELEMENTS_PER_MAP; j++) + { + temp_array[j] = &fake_vts[curr_fake_vt]; + curr_fake_vt++; + } +#ifdef VTV_DEBUG + __VLTRegisterSetDebug (&maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#else + __VLTRegisterSet (&maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#endif + } + } + + __VLTChangePermission(__VLTP_READ_ONLY); + + return 0; +} diff --git a/libvtv/testsuite/template-list-iostream.cc b/libvtv/testsuite/libvtv.cc/template-list-iostream.cc index a35fd308382..06ec3b01e10 100644 --- a/libvtv/testsuite/template-list-iostream.cc +++ b/libvtv/testsuite/libvtv.cc/template-list-iostream.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> #include <iostream> #include <fstream> diff --git a/libvtv/testsuite/template-list.cc b/libvtv/testsuite/libvtv.cc/template-list.cc index 95233f87765..aeb2db9e526 100644 --- a/libvtv/testsuite/template-list.cc +++ b/libvtv/testsuite/libvtv.cc/template-list.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> extern "C" int printf(const char *, ...); diff --git a/libvtv/testsuite/template-list2.cc b/libvtv/testsuite/libvtv.cc/template-list2.cc index f8ec739b6d5..3df8d372418 100644 --- a/libvtv/testsuite/template-list2.cc +++ b/libvtv/testsuite/libvtv.cc/template-list2.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> extern "C" int printf(const char *, ...); diff --git a/libvtv/testsuite/libvtv.cc/test1.cc b/libvtv/testsuite/libvtv.cc/test1.cc new file mode 100644 index 00000000000..9005826dff4 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/test1.cc @@ -0,0 +1,74 @@ +// { dg-do run } + +// Small test case from povray, see if it reproduces. + +#include <stdio.h> + +class POVMS_MessageReceiver +{ + +private: + int x; + class Handler + { + public: + virtual void print() = 0; + }; +protected: + template<class T> class MemberHandler : public Handler + { + public: + MemberHandler(T *xx) + { + x = xx; + } + + ~MemberHandler() {} + + void print() + { + printf("In print\n"); + } + private: + T *x; + }; + +private: + struct HandlerNode + { + Handler *handler; + }; + + HandlerNode *receiver; +public: + POVMS_MessageReceiver(int xx) : x(xx) {} + ~POVMS_MessageReceiver() {} + + void foo(int *xx); + void try_call(); +}; + +void POVMS_MessageReceiver::foo(int *xx) +{ + receiver = new HandlerNode; + + receiver->handler = new MemberHandler<int>(xx); +} + +void POVMS_MessageReceiver::try_call() +{ + receiver->handler->print(); +} + + +int main() +{ + int loc = 34; + POVMS_MessageReceiver a_test(100); + + a_test.foo(&loc); + a_test.try_call(); +} + + + diff --git a/libvtv/testsuite/thunk.cc b/libvtv/testsuite/libvtv.cc/thunk.cc index 6ab81a0dfd4..bec1057f564 100644 --- a/libvtv/testsuite/thunk.cc +++ b/libvtv/testsuite/libvtv.cc/thunk.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> struct A { A():value(123) {} diff --git a/libvtv/testsuite/thunk_vtable_map_attack.cc b/libvtv/testsuite/libvtv.cc/thunk_vtable_map_attack.cc index 84d4bbf3257..51f974ee4e7 100644 --- a/libvtv/testsuite/thunk_vtable_map_attack.cc +++ b/libvtv/testsuite/libvtv.cc/thunk_vtable_map_attack.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> #include <signal.h> #include <setjmp.h> diff --git a/libvtv/testsuite/libvtv.cc/v8-test-2.cc b/libvtv/testsuite/libvtv.cc/v8-test-2.cc new file mode 100644 index 00000000000..6bfda56e8c6 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/v8-test-2.cc @@ -0,0 +1,97 @@ +// { dg-do run } + +#include <stdlib.h> +#include <string> + +class Literal; +class CallRuntime; + +class AstNode { +public: + + enum Type { + kLiteral, kCallRuntime, + kInvalid = -1 + }; + + AstNode() { } + + virtual ~AstNode() { } + + virtual Type node_type() const = 0; + + bool + IsLiteral() { return node_type() == AstNode::kLiteral; } + + Literal * + AsLiteral() { return IsLiteral() ? reinterpret_cast<Literal*>(this) + : NULL; } + + bool + IsCallRuntime() { return node_type() == AstNode::kCallRuntime; } + + CallRuntime * + AsCallRuntime() { return IsCallRuntime() ? reinterpret_cast<CallRuntime*>(this) + : NULL; } + +}; + +class Expression: public AstNode { +public: +private: + int id_; +}; + +class Literal: public Expression { +public: + + virtual AstNode::Type node_type() const { return AstNode::kLiteral; } + + private: + std::string ToString(); + +}; + +class CallRuntime: public Expression { +public: + + virtual AstNode::Type node_type() const { return AstNode::kCallRuntime; } + + private: + std::string name_; +}; + +Expression * +ExpressionCheck (bool *ok) +{ + if (*ok == true) + return new CallRuntime(); + else + return new Literal (); + + return NULL; +} + +Expression * +GetExpression (bool *ok) +{ + Expression *expression = ExpressionCheck (ok); + Expression *return_expr = NULL; + + if (expression != NULL && expression->AsLiteral() != NULL) + return_expr = new Literal(); + else if (expression != NULL && expression->AsCallRuntime() != NULL) + return_expr = expression; + + return return_expr; +} + +int +main (int argc, char **argv) +{ + bool a_bool = true; + + AstNode *node = GetExpression (&a_bool); + + return 0; +} diff --git a/libvtv/testsuite/libvtv.cc/virtfunc-test.cc b/libvtv/testsuite/libvtv.cc/virtfunc-test.cc new file mode 100644 index 00000000000..3ad12b896c1 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/virtfunc-test.cc @@ -0,0 +1,222 @@ +// { dg-do run } + +/* This test script is part of GDB, the GNU debugger. + + Copyright 1993, 1994, 1997, 1998, 1999, 2003, 2004, + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +// Pls try the following program on virtual functions and try to do print on +// most of the code in main(). Almost none of them works ! + +// +// The inheritance structure is: +// +// V : VA VB +// A : (V) +// B : A +// D : AD (V) +// C : (V) +// E : B (V) D C +// + +class VA +{ +public: + int va; +}; + +class VB +{ +public: + int vb; + int fvb(); + virtual int vvb(); +}; + +class V : public VA, public VB +{ +public: + int f(); + virtual int vv(); + int w; +}; + +class A : virtual public V +{ +public: + virtual int f(); +private: + int a; +}; + +class B : public A +{ +public: + int f(); +private: + int b; +}; + +class C : public virtual V +{ +public: + int c; +}; + +class AD +{ +public: + virtual int vg() = 0; +}; + +class D : public AD, virtual public V +{ +public: + static void s(); + virtual int vg(); + virtual int vd(); + int fd(); + int d; +}; + +class E : public B, virtual public V, public D, public C +{ +public: + int f(); + int vg(); + int vv(); + int e; +}; + +D dd; +D* ppd = ⅆ +AD* pAd = ⅆ + +A a; +B b; +C c; +D d; +E e; +V v; +VB vb; + + +A* pAa = &a; +A* pAe = &e; + +B* pBe = &e; + +D* pDd = &d; +D* pDe = &e; + +V* pVa = &a; +V* pVv = &v; +V* pVe = &e; +V* pVd = &d; + +AD* pADe = &e; + +E* pEe = &e; + +VB* pVB = &vb; + +void init() +{ + a.vb = 1; + b.vb = 2; + c.vb = 3; + d.vb = 4; + e.vb = 5; + v.vb = 6; + vb.vb = 7; + + d.d = 1; + e.d = 2; +} + +extern "C" int printf(const char *, ...); + +int all_count = 0; +int failed_count = 0; + +#define TEST(EXPR, EXPECTED) \ + ret = EXPR; \ + if (ret != EXPECTED) {\ + printf("Failed %s is %d, should be %d!\n", #EXPR, ret, EXPECTED); \ + failed_count++; } \ + all_count++; + +int ret; + +void test_calls() +{ + TEST(pAe->f(), 20); + TEST(pAa->f(), 1); + + TEST(pDe->vg(), 202); + TEST(pADe->vg(), 202); + TEST(pDd->vg(), 101); + + TEST(pEe->vvb(), 411); + + TEST(pVB->vvb(), 407); + + TEST(pBe->vvb(), 411); + TEST(pDe->vvb(), 411); + + TEST(pEe->vd(), 282); + TEST(pEe->fvb(), 311); + + TEST(pEe->D::vg(), 102); + printf("Did %d tests, of which %d failed.\n", all_count, failed_count); +} +#ifdef usestubs +extern "C" { + void set_debug_traps(); + void breakpoint(); +}; +#endif + +int main() +{ +#ifdef usestubs + set_debug_traps(); + breakpoint(); +#endif + init(); + + e.w = 7; + e.vb = 11; + + test_calls(); + return 0; + +} + +int A::f() {return 1;} +int B::f() {return 2;} +void D::s() {} +int E::f() {return 20;} +int D::vg() {return 100+d;} +int E::vg() {return 200+d;} +int V::f() {return 600+w;} +int V::vv() {return 400+w;} +int E::vv() {return 450+w;} +int D::fd() {return 250+d;} +int D::vd() {return 280+d;} +int VB::fvb() {return 300+vb;} +int VB::vvb() {return 400+vb;} diff --git a/libvtv/testsuite/virtual_inheritance.cc b/libvtv/testsuite/libvtv.cc/virtual_inheritance.cc index 89fe388a856..1c49c966453 100644 --- a/libvtv/testsuite/virtual_inheritance.cc +++ b/libvtv/testsuite/libvtv.cc/virtual_inheritance.cc @@ -1,3 +1,5 @@ +// { dg-do run } + #include <assert.h> struct V { V(): virtual_value(-123) {} diff --git a/libvtv/testsuite/libvtv.cc/vtv.exp b/libvtv/testsuite/libvtv.cc/vtv.exp new file mode 100644 index 00000000000..12ed77431a8 --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/vtv.exp @@ -0,0 +1,83 @@ +load_lib libvtv-dg.exp +load_gcc_lib gcc-dg.exp + +global VTV_FLAGS +set VTV_FLAGS [list {-O0} {-O2}] + +libvtv_init c++ + +set shlib_ext [get_shlib_extension] +set lang_link_flags "-shared-libgcc -lstdc++" +set lang_test_file_found 0 +set lang_library_path "../libstdc++-v3/src/.libs" + +dg-init + +set blddir [lookfor_file [get_multilibs] libvtv] + +# Find the correct libstdc++ library to use. + +if { $blddir != "" } { + # Look for a static libstdc++ first. + if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] { + set lang_test_file "${lang_library_path}/libstdc++.a" + set lang_test_file_found 1 + # We may have a shared only build, so look for a shared libstdc++. + } elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] { + set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}" + set lang_test_file_found 1 + } else { + puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}" + puts "No libstdc++ library found, will not execute c++ tests" + } +} elseif { [info exists GXX_UNDER_TEST] } { + set lang_test_file_found 1 + # Needs to exist for libvtv.exp. + set lang_test_file "" +} else { + puts "GXX_UNDER_TEST not defined, will not execute c++ tests" +} + + +global srcdir + +if { $lang_test_file_found } { + # Set the path for finding libstdc++. + if { $blddir != "" } { + set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}" + } else { + set ld_library_path "$always_ld_library_path" + } + append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST] + set_ld_library_path_env_vars + + # Make sure we can find the libstdc++ header files. + set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags" + if { [file exists $flags_file] } { + set libstdcxx_includes [exec sh $flags_file --build-includes] + } else { + set libstdcxx_includes "" + } + + # Run the tests with -fvtable-verify=std + foreach flags $VTV_FLAGS { + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/*.cc]] { + dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes + } + + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/@*.list]] { + dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes + } + } + + # Run the tests with -fvtable-verify=preinit + foreach flags $VTV_FLAGS { + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/*.cc]] { + dg-runtest $srcfile "$flags -fvtable-verify=preinit" $libstdcxx_includes + } + + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/@*.list]] { + dg-runtest $srcfile "$flags -fvtable-verify=preinit" $libstdcxx_includes + } + } +} diff --git a/libvtv/testsuite/libvtv.cc/xlan-test.cc b/libvtv/testsuite/libvtv.cc/xlan-test.cc new file mode 100644 index 00000000000..213ed613fbb --- /dev/null +++ b/libvtv/testsuite/libvtv.cc/xlan-test.cc @@ -0,0 +1,185 @@ +// { dg-do run } + +#include <stdio.h> +#include <stdlib.h> + +class XMemory +{ +public: + void * operator new (size_t size); + void operator delete (void *p); + +protected: + XMemory () {} + + virtual ~XMemory() {} +}; + +class XSerializable +{ +public: + virtual ~XSerializable () {}; + + virtual bool isSerializable() const = 0; + virtual void serialize () = 0; + +protected: + XSerializable() {}; + +}; + +class Grammar: public XSerializable, public XMemory +{ +public: + enum GrammarType { + DTDGrammarType, + SchemaGrammarType, + OtherGrammarType, + Unknown + }; + + virtual ~Grammar() {} + + virtual GrammarType getGrammarType() const = 0; + virtual bool getValidated() const = 0; + + virtual bool isSerializable() const; + virtual void serialize (); + +protected: + Grammar() {}; + +}; + +class SchemaGrammar : public Grammar +{ +public: + + SchemaGrammar () : Grammar(), elemID(10) { fValidated = true; } + + virtual ~SchemaGrammar() {} + + virtual Grammar::GrammarType getGrammarType() const; + virtual bool getValidated() const; + + virtual bool isSerializable () const; + virtual void serialize (); + +private: + const unsigned int elemID; + bool fValidated; + +}; + +class OtherGrammar : public Grammar +{ +public: + + OtherGrammar () : Grammar(), elemID(10) { fValidated = true; } + + virtual ~OtherGrammar() {} + + virtual Grammar::GrammarType getGrammarType() const; + virtual bool getValidated() const; + + virtual bool isSerializable () const; + virtual void serialize (); + +private: + const unsigned int elemID; + bool fValidated; + +}; + +void +Grammar::serialize () +{ + printf ("in Grammar::serialize\n"); +} + +bool +Grammar::isSerializable () const +{ + return true; +} + +bool +SchemaGrammar::isSerializable () const +{ + return true; +} + +void +SchemaGrammar::serialize () +{ + printf ("in SchemaGrammar::serialize\n"); +} + +Grammar::GrammarType +SchemaGrammar::getGrammarType() const { + return Grammar::SchemaGrammarType; +} + +bool +SchemaGrammar::getValidated () const +{ + return fValidated; +} + +void * +XMemory::operator new (size_t size) +{ + return malloc (size); +} + +void +XMemory::operator delete (void *p) +{ +} + +bool +OtherGrammar::isSerializable () const +{ + return false; +} + +void +OtherGrammar::serialize () +{ + printf ("in OtherGrammar::serialize\n"); +} + +Grammar::GrammarType +OtherGrammar::getGrammarType() const { + return Grammar::OtherGrammarType; +} + +bool +OtherGrammar::getValidated () const +{ + return fValidated; +} + +int +main (int argc, char **argv) +{ + SchemaGrammar sPtr; + OtherGrammar oPtr; + Grammar &sGrammar = sPtr; + + for (int i = 0; i < 2; ++i) + { + if (i == 0) + sGrammar = oPtr; + else + sGrammar = sPtr; + + if (sGrammar.getGrammarType() != Grammar::SchemaGrammarType || + sGrammar.getValidated ()) + printf ("if condition was true.\n"); + else + printf ("if condition was false.\n"); + } + + return 0; +} diff --git a/libvtv/testsuite/libvtv.mempool.cc/mempool.exp b/libvtv/testsuite/libvtv.mempool.cc/mempool.exp new file mode 100644 index 00000000000..9565eae711a --- /dev/null +++ b/libvtv/testsuite/libvtv.mempool.cc/mempool.exp @@ -0,0 +1,68 @@ +load_lib libvtv-dg.exp +load_gcc_lib gcc-dg.exp + +global VTV_FLAGS +set VTV_FLAGS [list {-O0} {-O2}] + +libvtv_init c++ + +set shlib_ext [get_shlib_extension] +set lang_link_flags "-shared-libgcc -lstdc++" +set lang_test_file_found 0 +set lang_library_path "../libstdc++-v3/src/.libs" + +dg-init + +set blddir [lookfor_file [get_multilibs] libvtv] + +# Find the correct libstdc++ library to use. + +if { $blddir != "" } { + # Look for a static libstdc++ first. + if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] { + set lang_test_file "${lang_library_path}/libstdc++.a" + set lang_test_file_found 1 + # We may have a shared only build, so look for a shared libstdc++. + } elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] { + set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}" + set lang_test_file_found 1 + } else { + puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}" + puts "No libstdc++ library found, will not execute c++ tests" + } +} elseif { [info exists GXX_UNDER_TEST] } { + set lang_test_file_found 1 + # Needs to exist for libvtv.exp. + set lang_test_file "" +} else { + puts "GXX_UNDER_TEST not defined, will not execute c++ tests" +} + + +global srcdir + +if { $lang_test_file_found } { + # Set the path for finding libstdc++. + if { $blddir != "" } { + set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}" + } else { + set ld_library_path "$always_ld_library_path" + } + append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST] + set_ld_library_path_env_vars + + # Make sure we can find the libstdc++ header files. + set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags" + if { [file exists $flags_file] } { + set libstdcxx_includes [exec sh $flags_file --build-includes] + } else { + set libstdcxx_includes "" + } + + # Run the tests with -fvtable-verify=std + foreach flags $VTV_FLAGS { + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.mempool.cc/*.cc]] { + dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes + } + } +} diff --git a/libvtv/testsuite/mempool_negative.c b/libvtv/testsuite/libvtv.mempool.cc/mempool_negative.cc index 50ed53109bd..2d5e1d0b531 100644 --- a/libvtv/testsuite/mempool_negative.c +++ b/libvtv/testsuite/libvtv.mempool.cc/mempool_negative.cc @@ -5,26 +5,21 @@ #include <setjmp.h> #include "vtv_malloc.h" +#include "../../../include/vtv-change-permission.h" volatile static int signal_count = 0; sigjmp_buf before_segv; -bool vtv_debug = false; +unsigned int vtv_debug = 0; static void handler(int sig, siginfo_t *si, void *unused) { - /* - printf("Got SIGSEGV at address: 0x%lx\n", - (long) si->si_addr); - */ - signal_count++; /* You are not supposed to longjmp out of a signal handler but it seems to work for this test case and it simplifies it */ siglongjmp(before_segv, 1); - /* exit(1); */ } /* Try to modify the memory pointed by "s" but dont actually change the values. @@ -38,13 +33,13 @@ void mempoke(void * s, size_t n) ret = sigsetjmp(before_segv, 1); if (ret == 0) p[0] = p[0]; - /* printf("after first setjmp ret=%d\n", ret); */ + assert(ret == 1 && signal_count == 1); ret = sigsetjmp(before_segv, 1); if (ret == 0) p[n - 1] = p[n - 1]; - /* printf("after second setjmp ret=%d\n", ret); */ + assert(ret == 1 && signal_count == 2); } @@ -61,6 +56,8 @@ int main() if (sigaction(SIGSEGV, &sa, NULL) == -1) assert(0); + /* Make the 'bookkeeping' vars read-write. */ + __VLTChangePermission (__VLTP_READ_WRITE); __vtv_malloc_init(); size = 10; diff --git a/libvtv/testsuite/mempool_positive.c b/libvtv/testsuite/libvtv.mempool.cc/mempool_positive.cc index 511f50a1040..5e60df9b686 100644 --- a/libvtv/testsuite/mempool_positive.c +++ b/libvtv/testsuite/libvtv.mempool.cc/mempool_positive.cc @@ -4,8 +4,9 @@ #include <stdio.h> #include "vtv_malloc.h" +#include "../../../include/vtv-change-permission.h" -bool vtv_debug = false; +unsigned int vtv_debug = 0; static void handler(int sig, siginfo_t *si, void *unused) @@ -37,6 +38,8 @@ int main() if (sigaction(SIGSEGV, &sa, NULL) == -1) assert(0); + /* Make the 'bookkeeping' vars read-write. */ + __VLTChangePermission (__VLTP_READ_WRITE); __vtv_malloc_init(); size = 10; diff --git a/libvtv/testsuite/libvtv.mt.cc/mt.exp b/libvtv/testsuite/libvtv.mt.cc/mt.exp new file mode 100644 index 00000000000..e2ee43577a3 --- /dev/null +++ b/libvtv/testsuite/libvtv.mt.cc/mt.exp @@ -0,0 +1,68 @@ +load_lib libvtv-dg.exp +load_gcc_lib gcc-dg.exp + +global VTV_FLAGS +set VTV_FLAGS [list {-O0} {-O2}] + +libvtv_init c++ + +set shlib_ext [get_shlib_extension] +set lang_link_flags "-shared-libgcc -lstdc++" +set lang_test_file_found 0 +set lang_library_path "../libstdc++-v3/src/.libs" + +dg-init + +set blddir [lookfor_file [get_multilibs] libvtv] + +# Find the correct libstdc++ library to use. + +if { $blddir != "" } { + # Look for a static libstdc++ first. + if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] { + set lang_test_file "${lang_library_path}/libstdc++.a" + set lang_test_file_found 1 + # We may have a shared only build, so look for a shared libstdc++. + } elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] { + set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}" + set lang_test_file_found 1 + } else { + puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}" + puts "No libstdc++ library found, will not execute c++ tests" + } +} elseif { [info exists GXX_UNDER_TEST] } { + set lang_test_file_found 1 + # Needs to exist for libvtv.exp. + set lang_test_file "" +} else { + puts "GXX_UNDER_TEST not defined, will not execute c++ tests" +} + + +global srcdir + +if { $lang_test_file_found } { + # Set the path for finding libstdc++. + if { $blddir != "" } { + set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}" + } else { + set ld_library_path "$always_ld_library_path" + } + append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST] + set_ld_library_path_env_vars + + # Make sure we can find the libstdc++ header files. + set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags" + if { [file exists $flags_file] } { + set libstdcxx_includes [exec sh $flags_file --build-includes] + } else { + set libstdcxx_includes "" + } + + # Run the tests with -fvtable-verify=std + foreach flags $VTV_FLAGS { + foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.mt.cc/*.cc]] { + dg-runtest $srcfile "$flags -fvtable-verify=std -lpthread" $libstdcxx_includes + } + } +} diff --git a/libvtv/testsuite/register_pair_inserts_mt.cc b/libvtv/testsuite/libvtv.mt.cc/register_set_pair_inserts_mt.cc index a79dc1f9196..6df197343f7 100644 --- a/libvtv/testsuite/register_pair_inserts_mt.cc +++ b/libvtv/testsuite/libvtv.mt.cc/register_set_pair_inserts_mt.cc @@ -1,7 +1,11 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + #include "vtv_utils.h" #include "vtv_rts.h" #include "pthread.h" -#include <stdio.h> /* Multi-threaded test for calls to RegisterPair */ @@ -19,6 +23,11 @@ #define NUM_THREADS 9 +#define KEY_TYPE_FIXED_SIZE 8 +void *key_buffer = malloc (17); +typedef char * name_string; +name_string fake_names[NUM_MAPS]; + /* This variable has to be put in rel.ro */ void * volatile maps[NUM_MAPS] VTV_PROTECTED_VAR; @@ -30,6 +39,29 @@ void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; volatile int current_map = -1; volatile int threads_completed_it = 0; +void +generate_names (void) +{ + int i; + + for (i = 0; i < NUM_MAPS; ++i) + { + fake_names[i] = (char *) malloc (9 * sizeof (char)); + snprintf (fake_names[i], 9, "name%d", i); + } +} + +static uint32_t +vtv_string_hash(const char *in) +{ + const char *s = in; + uint32_t h = 0; + + for ( ; *s; ++s) + h = 5 * h + *s; + return h; +} + void * do_register_pairs(void *) { for (int k = 0; k < NUM_REPEATS; k++) @@ -37,22 +69,44 @@ void * do_register_pairs(void *) int curr_fake_vt = 0; for (int i = 0; i < NUM_MAPS; i++) { + uint32_t *value_ptr = (uint32_t *) key_buffer; + uint32_t len1 = strlen (fake_names[i]); + uint32_t hash_value = vtv_string_hash (fake_names[i]); + void *temp_array[ELEMENTS_PER_MAP]; + while (current_map < (k*NUM_MAPS + i)) ; __VLTChangePermission(__VLTP_READ_WRITE); - for (int j = 0; j < ELEMENTS_PER_MAP; j++) - { + *value_ptr = len1; + value_ptr++; + *value_ptr = hash_value; + + memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i], + len1); + + #ifdef VTV_DEBUG - __VLTRegisterPairDebug((void **) &maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0); + __VLTRegisterPairDebug ((void **) &maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt], "", ""); #else - __VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt]); + __VLTRegisterPair ((void **) &maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt]); #endif - __VLTVerifyVtablePointer((void **) &maps[i], &fake_vts[curr_fake_vt]); + for (int j = 0; j < ELEMENTS_PER_MAP; j++) + { + temp_array[j] = &fake_vts[curr_fake_vt]; curr_fake_vt++; } +#ifdef VTV_DEBUG + __VLTRegisterSetDebug ((void **) &maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#else + __VLTRegisterSet ((void **) &maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#endif __VLTChangePermission(__VLTP_READ_ONLY); int old_value; @@ -78,6 +132,8 @@ int main() { pthread_t thread_ids[NUM_THREADS]; + generate_names(); + for (int t = 0; t < NUM_THREADS; t++ ) if (pthread_create(&thread_ids[t], NULL, do_register_pairs, NULL) != 0) { diff --git a/libvtv/testsuite/register_pair_mt.cc b/libvtv/testsuite/libvtv.mt.cc/register_set_pair_mt.cc index e421c4f0d2b..1d480a1e3b8 100644 --- a/libvtv/testsuite/register_pair_mt.cc +++ b/libvtv/testsuite/libvtv.mt.cc/register_set_pair_mt.cc @@ -1,7 +1,11 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + #include "vtv_utils.h" #include "vtv_rts.h" #include "pthread.h" -#include <stdio.h> /* Multi-threaded test for calls to RegisterPair */ @@ -19,6 +23,11 @@ #define NUM_THREADS 9 +#define KEY_TYPE_FIXED_SIZE 8 +void *key_buffer = malloc (17); +typedef char * name_string; +name_string fake_names[NUM_MAPS]; + /* This variable has to be put in rel.ro */ void * volatile maps[NUM_MAPS] VTV_PROTECTED_VAR; @@ -30,6 +39,29 @@ void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; volatile int current_map = -1; volatile int threads_completed_it = 0; +void +generate_names (void) +{ + int i; + + for (i = 0; i < NUM_MAPS; ++i) + { + fake_names[i] = (char *) malloc (9 * sizeof (char)); + snprintf (fake_names[i], 9, "name%d", i); + } +} + +static uint32_t +vtv_string_hash(const char *in) +{ + const char *s = in; + uint32_t h = 0; + + for ( ; *s; ++s) + h = 5 * h + *s; + return h; +} + void * do_register_pairs(void *) { for (int k = 0; k < NUM_REPEATS; k++) @@ -37,22 +69,44 @@ void * do_register_pairs(void *) int curr_fake_vt = 0; for (int i = 0; i < NUM_MAPS; i++) { + uint32_t *value_ptr = (uint32_t *) key_buffer; + uint32_t len1 = strlen (fake_names[i]); + uint32_t hash_value = vtv_string_hash (fake_names[i]); + void *temp_array[ELEMENTS_PER_MAP]; + while (current_map < (k*NUM_MAPS + i)) ; - + __VLTChangePermission(__VLTP_READ_WRITE); + + *value_ptr = len1; + value_ptr++; + *value_ptr = hash_value; + + memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i], + len1); + - for (int j = 0; j < ELEMENTS_PER_MAP; j++) - { #ifdef VTV_DEBUG - __VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0); + __VLTRegisterPairDebug ((void **) &maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt], "", ""); #else - __VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt]); + __VLTRegisterPair ((void **) &maps[i], (char *) key_buffer, 128, + &fake_vts[curr_fake_vt]); #endif - __VLTVerifyVtablePointer((void **) &maps[i], &fake_vts[curr_fake_vt]); + for (int j = 0; j < ELEMENTS_PER_MAP; j++) + { + temp_array[j] = &fake_vts[curr_fake_vt]; curr_fake_vt++; } +#ifdef VTV_DEBUG + __VLTRegisterSetDebug ((void **) &maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#else + __VLTRegisterSet ((void **) &maps[i], (char *) key_buffer, 128, 100, + (void **) &temp_array); +#endif __VLTChangePermission(__VLTP_READ_ONLY); int old_value; @@ -77,6 +131,8 @@ void * do_register_pairs(void *) int main() { pthread_t thread_ids[NUM_THREADS]; + + generate_names (); for (int t = 0; t < NUM_THREADS; t++ ) if (pthread_create(&thread_ids[t], NULL, do_register_pairs, NULL) != 0) diff --git a/libvtv/testsuite/other-tests/Makefile.am b/libvtv/testsuite/other-tests/Makefile.am new file mode 100644 index 00000000000..56f76a79f5b --- /dev/null +++ b/libvtv/testsuite/other-tests/Makefile.am @@ -0,0 +1,52 @@ +## Makefile for the testsuite subdirectory of the VTV library. +## +## Copyright (C) 2013 Free Software Foundation, Inc. +## +## Process this file with automake to produce Makefile.in. +## +## This file is part of the Vtable Verification (VTV) Library. This +## library is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3, or (at your option) +## any later version. + +## This library is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. + +## You should have received a copy of the GNU General Public License +## along with this library; see the file COPYING3. If not see +## <http://www.gnu.org/licenses/>. + +AUTOMAKE_OPTIONS = nostdinc + +# Runs the testsuite via a script. + +# Create subdirectories. +stamp-subdir: + if test ! -d lib64; then \ + mkdir -p lib64; \ + fi; \ + if test ! -d lib32; then \ + mkdir -p lib32; \ + fi; \ + echo `date` > stamp-subdir; + + +testing_script=${libvtv_srcdir}/scripts/run-testsuite.sh +check-script: ${testing_script} stamp-subdir + -@(chmod +x ${testing_script}; \ + ${testing_script} ${libvtv_srcdir} ${libvtv_builddir}) + +check-am: + $(MAKE) $(AM_MAKEFLAGS) check-script + +.PHONY: check-script + +# By adding these files here, automake will remove them for 'make clean' +CLEANFILES = *.out environment-fail-* stamp-* replace-fail-* + +# To remove directories. +clean-local: + rm -rf lib* diff --git a/libvtv/testsuite/other-tests/Makefile.in b/libvtv/testsuite/other-tests/Makefile.in new file mode 100644 index 00000000000..66a75e16ea6 --- /dev/null +++ b/libvtv/testsuite/other-tests/Makefile.in @@ -0,0 +1,379 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ + $(top_srcdir)/../config/multi.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ +LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XCFLAGS = @XCFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_shared = @enable_shared@ +enable_static = @enable_static@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libtool_VERSION = @libtool_VERSION@ +libvtv_builddir = @libvtv_builddir@ +libvtv_srcdir = @libvtv_srcdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +multi_basedir = @multi_basedir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_noncanonical = @target_noncanonical@ +target_os = @target_os@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +toplevel_builddir = @toplevel_builddir@ +toplevel_srcdir = @toplevel_srcdir@ +AUTOMAKE_OPTIONS = nostdinc +testing_script = ${libvtv_srcdir}/scripts/run-testsuite.sh + +# By adding these files here, automake will remove them for 'make clean' +CLEANFILES = *.out environment-fail-* stamp-* replace-fail-* +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local distclean distclean-generic distclean-libtool dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Runs the testsuite via a script. + +# Create subdirectories. +stamp-subdir: + if test ! -d lib64; then \ + mkdir -p lib64; \ + fi; \ + if test ! -d lib32; then \ + mkdir -p lib32; \ + fi; \ + echo `date` > stamp-subdir; +check-script: ${testing_script} stamp-subdir + -@(chmod +x ${testing_script}; \ + ${testing_script} ${libvtv_srcdir} ${libvtv_builddir}) + +check-am: + $(MAKE) $(AM_MAKEFLAGS) check-script + +.PHONY: check-script + +# To remove directories. +clean-local: + rm -rf lib* + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libvtv/testsuite/other-tests/README b/libvtv/testsuite/other-tests/README new file mode 100644 index 00000000000..a64047460a6 --- /dev/null +++ b/libvtv/testsuite/other-tests/README @@ -0,0 +1,8 @@ +This directory contains tests that have not yet been converted to +proper dejagnu tests. If you look at the run_testsuite script in +libvtv/scripts, you should get a fair idea as to how to run these +tests. The plan is to convert these tests into proper dejangnu tests +sometime in the near future. + + +Aug. 30, 2013
\ No newline at end of file diff --git a/libvtv/testsuite/dlopen.cc b/libvtv/testsuite/other-tests/dlopen.cc index 4ffbe83acf7..4ffbe83acf7 100644 --- a/libvtv/testsuite/dlopen.cc +++ b/libvtv/testsuite/other-tests/dlopen.cc diff --git a/libvtv/testsuite/dlopen_mt.cc b/libvtv/testsuite/other-tests/dlopen_mt.cc index 772e8a733ed..772e8a733ed 100644 --- a/libvtv/testsuite/dlopen_mt.cc +++ b/libvtv/testsuite/other-tests/dlopen_mt.cc diff --git a/libvtv/testsuite/environment-fail-32.s b/libvtv/testsuite/other-tests/environment-fail-32.s index cac501652a7..cac501652a7 100644 --- a/libvtv/testsuite/environment-fail-32.s +++ b/libvtv/testsuite/other-tests/environment-fail-32.s diff --git a/libvtv/testsuite/environment-fail-64.s b/libvtv/testsuite/other-tests/environment-fail-64.s index d75db248b07..d75db248b07 100644 --- a/libvtv/testsuite/environment-fail-64.s +++ b/libvtv/testsuite/other-tests/environment-fail-64.s diff --git a/libvtv/testsuite/field-test.cc b/libvtv/testsuite/other-tests/field-test.cc index b6f34bca02c..b6f34bca02c 100644 --- a/libvtv/testsuite/field-test.cc +++ b/libvtv/testsuite/other-tests/field-test.cc diff --git a/libvtv/testsuite/replace-fail.cc b/libvtv/testsuite/other-tests/replace-fail.cc index 2b4070eec77..2b4070eec77 100644 --- a/libvtv/testsuite/replace-fail.cc +++ b/libvtv/testsuite/other-tests/replace-fail.cc diff --git a/libvtv/testsuite/so.cc b/libvtv/testsuite/other-tests/so.cc index 3f0a346f1e8..3f0a346f1e8 100644 --- a/libvtv/testsuite/so.cc +++ b/libvtv/testsuite/other-tests/so.cc diff --git a/libvtv/testsuite/temp_deriv.cc b/libvtv/testsuite/other-tests/temp_deriv.cc index ca360c0bc91..ca360c0bc91 100644 --- a/libvtv/testsuite/temp_deriv.cc +++ b/libvtv/testsuite/other-tests/temp_deriv.cc diff --git a/libvtv/testsuite/temp_deriv2.cc b/libvtv/testsuite/other-tests/temp_deriv2.cc index 78b43f8b08b..78b43f8b08b 100644 --- a/libvtv/testsuite/temp_deriv2.cc +++ b/libvtv/testsuite/other-tests/temp_deriv2.cc diff --git a/libvtv/testsuite/temp_deriv3.cc b/libvtv/testsuite/other-tests/temp_deriv3.cc index 924c47e9628..924c47e9628 100644 --- a/libvtv/testsuite/temp_deriv3.cc +++ b/libvtv/testsuite/other-tests/temp_deriv3.cc diff --git a/libvtv/testsuite/parts-test.list b/libvtv/testsuite/parts-test.list deleted file mode 100644 index fdf95a8876c..00000000000 --- a/libvtv/testsuite/parts-test.list +++ /dev/null @@ -1 +0,0 @@ -parts-test-main.cc parts-test-extra-parts.cc parts-test-extra-parts-views.cc diff --git a/libvtv/testsuite/register_pair.cc b/libvtv/testsuite/register_pair.cc deleted file mode 100644 index 0759c472df1..00000000000 --- a/libvtv/testsuite/register_pair.cc +++ /dev/null @@ -1,39 +0,0 @@ -#include "vtv_utils.h" -#include "vtv_rts.h" - -/* This configuration will test mostly inserting of elements that are already inserted since - the number of repeats is 200 */ - -#define NUM_MAPS 4000 -#define ELEMENTS_PER_MAP 100 -#define NUM_REPEATS 200 - -/* This variable has to be put in rel.ro */ -void * maps[NUM_MAPS] VTV_PROTECTED_VAR; - -struct fake_vt { - void * fake_vfp [4]; -}; -void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; - -int main() -{ - __VLTChangePermission(__VLTP_READ_WRITE); - - for (int k = 0; k < NUM_REPEATS; k++) - { - int curr_fake_vt = 0; - for (int i = 0; i < NUM_MAPS; i++) - for (int j = 0; j < ELEMENTS_PER_MAP; j++) - { -#ifdef VTV_DEBUG - __VLTRegisterPairDebug(&maps[i], &fake_vts[curr_fake_vt]); -#endif - curr_fake_vt++; - } - } - - __VLTChangePermission(__VLTP_READ_ONLY); - - return 0; -} diff --git a/libvtv/testsuite/register_pair_inserts.cc b/libvtv/testsuite/register_pair_inserts.cc deleted file mode 100644 index 72d6d968465..00000000000 --- a/libvtv/testsuite/register_pair_inserts.cc +++ /dev/null @@ -1,46 +0,0 @@ -#include "vtv_utils.h" -#include "vtv_rts.h" - -/* This configuration will test mostly inserting of new elements since - the number of repeats is 1. It should also do a lot of rehashing */ - -/* This test case may fail depending on the system configuration. - Check the value of /proc/sys/vm/max_map_count and fix by doing - Ex: sudo sh -c "echo 131060 > /proc/sys/vm/max_map_count" */ - -#define NUM_MAPS 40000 -#define ELEMENTS_PER_MAP 100 -#define NUM_REPEATS 1 - -/* This variable has to be put in rel.ro */ -void * maps[NUM_MAPS] VTV_PROTECTED_VAR; - -struct fake_vt { - void * fake_vfp [4]; -}; -void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP]; - - -int main() -{ - __VLTChangePermission(__VLTP_READ_WRITE); - - for (int k = 0; k < NUM_REPEATS; k++) - { - int curr_fake_vt = 0; - for (int i = 0; i < NUM_MAPS; i++) - for (int j = 0; j < ELEMENTS_PER_MAP; j++) - { -#ifdef VTV_DEBUG - __VLTRegisterPairDebug(&maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0); -#else - __VLTRegisterPair(&maps[i], &fake_vts[curr_fake_vt]); -#endif - curr_fake_vt++; - } - } - - __VLTChangePermission(__VLTP_READ_ONLY); - - return 0; -} |