On Tue, Oct 27, 2015 at 8:49 PM, David Malcolm <dmalc...@redhat.com> wrote: > gcc/testsuite/ChangeLog: > * unittests/test-gimple.c: New file.
I fear that keeping tests like this up-to-date and working is more of a headache than the value we get from it. Richard. > --- > gcc/testsuite/unittests/test-gimple.c | 178 > ++++++++++++++++++++++++++++++++++ > 1 file changed, 178 insertions(+) > create mode 100644 gcc/testsuite/unittests/test-gimple.c > > diff --git a/gcc/testsuite/unittests/test-gimple.c > b/gcc/testsuite/unittests/test-gimple.c > new file mode 100644 > index 0000000..b0fa9f4 > --- /dev/null > +++ b/gcc/testsuite/unittests/test-gimple.c > @@ -0,0 +1,178 @@ > +/* Unit tests for gimple. > + Copyright (C) 2015 Free Software Foundation, Inc. > + > +This file is part of GCC. > + > +GCC 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. > + > +GCC 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/>. */ > + > +#include "config.h" > +#include "gtest/gtest.h" > +#include "system.h" > +#include "coretypes.h" > +#include "tm.h" > +#include "opts.h" > +#include "signop.h" > +#include "hash-set.h" > +#include "fixed-value.h" > +#include "alias.h" > +#include "flags.h" > +#include "symtab.h" > +#include "tree-core.h" > +#include "stor-layout.h" > +#include "tree.h" > +#include "stringpool.h" > +#include "stor-layout.h" > +#include "rtl.h" > +#include "predict.h" > +#include "vec.h" > +#include "hashtab.h" > +#include "hash-set.h" > +#include "machmode.h" > +#include "hard-reg-set.h" > +#include "input.h" > +#include "function.h" > +#include "dominance.h" > +#include "cfg.h" > +#include "cfganal.h" > +#include "basic-block.h" > +#include "tree-ssa-alias.h" > +#include "internal-fn.h" > +#include "gimple-fold.h" > +#include "gimple-expr.h" > +#include "toplev.h" > +#include "print-tree.h" > +#include "tree-iterator.h" > +#include "gimplify.h" > +#include "tree-cfg.h" > +#include "basic-block.h" > +#include "double-int.h" > +#include "alias.h" > +#include "symtab.h" > +#include "wide-int.h" > +#include "inchash.h" > +#include "tree.h" > +#include "fold-const.h" > +#include "stor-layout.h" > +#include "stmt.h" > +#include "hash-table.h" > +#include "tree-ssa-alias.h" > +#include "internal-fn.h" > +#include "gimple-expr.h" > +#include "is-a.h" > +#include "gimple.h" > +#include "tree-pass.h" > +#include "context.h" > +#include "hash-map.h" > +#include "plugin-api.h" > +#include "ipa-ref.h" > +#include "cgraph.h" > +#include "gimple-pretty-print.h" > + > +namespace { > + > +class gimple_test : public ::testing::Test > +{ > + protected: > + void > + verify_gimple_pp (const char *expected, gimple *stmt) > + { > + pretty_printer pp; > + pp_gimple_stmt_1 (&pp, stmt, 0 /* spc */, 0 /* flags */); > + EXPECT_STREQ (expected, pp_formatted_text (&pp)); > + } > +}; > + > +TEST_F (gimple_test, assign_single) > +{ > + /* Build "tmp = 5;" */ > + tree type = integer_type_node; > + tree lhs = build_decl (UNKNOWN_LOCATION, VAR_DECL, > + get_identifier ("tmp"), > + type); > + tree rhs = build_int_cst (type, 5); > + gassign *stmt = gimple_build_assign (lhs, rhs); > + verify_gimple_pp ("tmp = 5;", stmt); > + > + EXPECT_TRUE (is_gimple_assign (stmt)); > + EXPECT_EQ (lhs, gimple_assign_lhs (stmt)); > + EXPECT_EQ (lhs, gimple_get_lhs (stmt)); > + EXPECT_EQ (rhs, gimple_assign_rhs1 (stmt)); > + EXPECT_EQ (NULL, gimple_assign_rhs2 (stmt)); > + EXPECT_EQ (NULL, gimple_assign_rhs3 (stmt)); > + EXPECT_TRUE (gimple_assign_single_p (stmt)); > + EXPECT_EQ (INTEGER_CST, gimple_assign_rhs_code (stmt)); > +} > + > +TEST_F (gimple_test, assign_binop) > +{ > + /* Build "tmp = a + b;" */ > + tree type = integer_type_node; > + tree lhs = build_decl (UNKNOWN_LOCATION, VAR_DECL, > + get_identifier ("tmp"), > + type); > + tree a = build_decl (UNKNOWN_LOCATION, VAR_DECL, > + get_identifier ("a"), > + type); > + tree b = build_decl (UNKNOWN_LOCATION, VAR_DECL, > + get_identifier ("b"), > + type); > + gassign *stmt = gimple_build_assign (lhs, MULT_EXPR, a, b); > + verify_gimple_pp ("tmp = a * b;", stmt); > + > + EXPECT_TRUE (is_gimple_assign (stmt)); > + EXPECT_EQ (lhs, gimple_assign_lhs (stmt)); > + EXPECT_EQ (lhs, gimple_get_lhs (stmt)); > + EXPECT_EQ (a, gimple_assign_rhs1 (stmt)); > + EXPECT_EQ (b, gimple_assign_rhs2 (stmt)); > + EXPECT_EQ (NULL, gimple_assign_rhs3 (stmt)); > + EXPECT_FALSE (gimple_assign_single_p (stmt)); > + EXPECT_EQ (MULT_EXPR, gimple_assign_rhs_code (stmt)); > +} > + > +TEST_F (gimple_test, nop_stmt) > +{ > + gimple *stmt = gimple_build_nop (); > + verify_gimple_pp ("GIMPLE_NOP", stmt); > + EXPECT_EQ (GIMPLE_NOP, gimple_code (stmt)); > + EXPECT_EQ (NULL, gimple_get_lhs (stmt)); > + EXPECT_FALSE (gimple_assign_single_p (stmt)); > +} > + > +TEST_F (gimple_test, return_stmt) > +{ > + /* Build "return 7;" */ > + tree type = integer_type_node; > + tree val = build_int_cst (type, 7); > + greturn *stmt = gimple_build_return (val); > + verify_gimple_pp ("return 7;", stmt); > + > + EXPECT_EQ (GIMPLE_RETURN, gimple_code (stmt)); > + EXPECT_EQ (NULL, gimple_get_lhs (stmt)); > + EXPECT_EQ (val, gimple_return_retval (stmt)); > + EXPECT_FALSE (gimple_assign_single_p (stmt)); > +} > + > +TEST_F (gimple_test, return_without_value) > +{ > + greturn *stmt = gimple_build_return (NULL); > + verify_gimple_pp ("return;", stmt); > + > + EXPECT_EQ (GIMPLE_RETURN, gimple_code (stmt)); > + EXPECT_EQ (NULL, gimple_get_lhs (stmt)); > + EXPECT_EQ (NULL, gimple_return_retval (stmt)); > + EXPECT_FALSE (gimple_assign_single_p (stmt)); > +} > + > +} /* anon namespace. */ > -- > 1.8.5.3 >