[phc-internals] [phc commit] r1490 - in trunk: . plugins/tests test/framework

codesite-noreply at google.com codesite-noreply at google.com
Thu Jul 31 17:16:10 IST 2008


Author: paul.biggar
Date: Thu Jul 31 09:15:29 2008
New Revision: 1490

Added:
   trunk/plugins/tests/inconsistent_st_attr.cpp
      - copied, changed from r1487, /trunk/plugins/tests/lost_attributes.cpp
Removed:
   trunk/plugins/tests/lost_attributes.cpp
Modified:
   trunk/Makefile.am
   trunk/Makefile.in
   trunk/test/framework/driver.php

Log:
Remove the lost attributes plugin, as its not really useful. Replace it 
with a more useful check - that every instance of the same variable in 
the MIR has the same value in the phc.codegen.st_entry_not_required 
attribute. When they don't it manifests in unusual bugs, principally 
that variables are sometimes NULL when they shouldnt be. This shows 
quite a lot of bugs in Prune_symbol_table.


Modified: trunk/Makefile.am
==============================================================================
--- trunk/Makefile.am	(original)
+++ trunk/Makefile.am	Thu Jul 31 09:15:29 2008
@@ -343,9 +343,9 @@
 plugins_tests_linear_la_SOURCES = plugins/tests/linear.cpp plugins/tests/Collect_all_pointers.h
 plugins_tests_linear_la_LDFLAGS = ${PLUGIN_LDFLAGS}

-nobase_pkglib_LTLIBRARIES += plugins/tests/lost_attributes.la
-plugins_tests_lost_attributes_la_SOURCES = plugins/tests/lost_attributes.cpp
-plugins_tests_lost_attributes_la_LDFLAGS = ${PLUGIN_LDFLAGS}
+nobase_pkglib_LTLIBRARIES += plugins/tests/inconsistent_st_attr.la
+plugins_tests_inconsistent_st_attr_la_SOURCES = plugins/tests/inconsistent_st_attr.cpp
+plugins_tests_inconsistent_st_attr_la_LDFLAGS = ${PLUGIN_LDFLAGS}

 nobase_pkglib_LTLIBRARIES += plugins/tests/strip_includes.la
 plugins_tests_strip_includes_la_SOURCES = plugins/tests/strip_includes.cpp

Modified: trunk/Makefile.in
==============================================================================
--- trunk/Makefile.in	(original)
+++ trunk/Makefile.in	Thu Jul 31 09:15:29 2008
@@ -129,6 +129,16 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(AM_CXXFLAGS) $(CXXFLAGS) $(plugins_tests_cloning_la_LDFLAGS) \
 	$(LDFLAGS) -o $@
+plugins_tests_inconsistent_st_attr_la_LIBADD =
+am_plugins_tests_inconsistent_st_attr_la_OBJECTS =  \
+	inconsistent_st_attr.lo
+plugins_tests_inconsistent_st_attr_la_OBJECTS =  \
+	$(am_plugins_tests_inconsistent_st_attr_la_OBJECTS)
+plugins_tests_inconsistent_st_attr_la_LINK = $(LIBTOOL) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) \
+	$(plugins_tests_inconsistent_st_attr_la_LDFLAGS) $(LDFLAGS) -o \
+	$@
 plugins_tests_line_numbers_la_LIBADD =
 am_plugins_tests_line_numbers_la_OBJECTS = line_numbers.lo
 plugins_tests_line_numbers_la_OBJECTS =  \
@@ -145,14 +155,6 @@
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(plugins_tests_linear_la_LDFLAGS) $(LDFLAGS) -o \
 	$@
-plugins_tests_lost_attributes_la_LIBADD =
-am_plugins_tests_lost_attributes_la_OBJECTS = lost_attributes.lo
-plugins_tests_lost_attributes_la_OBJECTS =  \
-	$(am_plugins_tests_lost_attributes_la_OBJECTS)
-plugins_tests_lost_attributes_la_LINK = $(LIBTOOL) --tag=CXX \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
-	$(AM_CXXFLAGS) $(CXXFLAGS) \
-	$(plugins_tests_lost_attributes_la_LDFLAGS) $(LDFLAGS) -o $@
 plugins_tests_pre_vs_post_count_la_LIBADD =
 am_plugins_tests_pre_vs_post_count_la_OBJECTS = pre_vs_post_count.lo
 plugins_tests_pre_vs_post_count_la_OBJECTS =  \
@@ -334,9 +336,9 @@
 SOURCES = $(libphc_la_SOURCES) \
 	$(plugins_tests_canonical_unparser_la_SOURCES) \
 	$(plugins_tests_cloning_la_SOURCES) \
+	$(plugins_tests_inconsistent_st_attr_la_SOURCES) \
 	$(plugins_tests_line_numbers_la_SOURCES) \
 	$(plugins_tests_linear_la_SOURCES) \
-	$(plugins_tests_lost_attributes_la_SOURCES) \
 	$(plugins_tests_pre_vs_post_count_la_SOURCES) \
 	$(plugins_tests_source_vs_semantic_values_la_SOURCES) \
 	$(plugins_tests_strip_includes_la_SOURCES) \
@@ -358,9 +360,9 @@
 DIST_SOURCES = $(libphc_la_SOURCES) \
 	$(plugins_tests_canonical_unparser_la_SOURCES) \
 	$(plugins_tests_cloning_la_SOURCES) \
+	$(plugins_tests_inconsistent_st_attr_la_SOURCES) \
 	$(plugins_tests_line_numbers_la_SOURCES) \
 	$(plugins_tests_linear_la_SOURCES) \
-	$(plugins_tests_lost_attributes_la_SOURCES) \
 	$(plugins_tests_pre_vs_post_count_la_SOURCES) \
 	$(plugins_tests_source_vs_semantic_values_la_SOURCES) \
 	$(plugins_tests_strip_includes_la_SOURCES) \
@@ -857,7 +859,7 @@

 nobase_pkglib_LTLIBRARIES = plugins/tests/canonical_unparser.la \
 	plugins/tests/cloning.la plugins/tests/linear.la \
-	plugins/tests/lost_attributes.la \
+	plugins/tests/inconsistent_st_attr.la \
 	plugins/tests/strip_includes.la plugins/tests/line_numbers.la \
 	plugins/tests/pre_vs_post_count.la \
 	plugins/tests/source_vs_semantic_values.la \
@@ -878,8 +880,8 @@
 plugins_tests_cloning_la_LDFLAGS = ${PLUGIN_LDFLAGS}
 plugins_tests_linear_la_SOURCES = plugins/tests/linear.cpp plugins/tests/Collect_all_pointers.h
 plugins_tests_linear_la_LDFLAGS = ${PLUGIN_LDFLAGS}
-plugins_tests_lost_attributes_la_SOURCES = plugins/tests/lost_attributes.cpp
-plugins_tests_lost_attributes_la_LDFLAGS = ${PLUGIN_LDFLAGS}
+plugins_tests_inconsistent_st_attr_la_SOURCES = plugins/tests/inconsistent_st_attr.cpp
+plugins_tests_inconsistent_st_attr_la_LDFLAGS = ${PLUGIN_LDFLAGS}
 plugins_tests_strip_includes_la_SOURCES = plugins/tests/strip_includes.cpp
 plugins_tests_strip_includes_la_LDFLAGS = ${PLUGIN_LDFLAGS}
 plugins_tests_line_numbers_la_SOURCES = plugins/tests/line_numbers.cpp
@@ -1055,12 +1057,12 @@
  	$(plugins_tests_canonical_unparser_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_canonical_unparser_la_OBJECTS) 
$(plugins_tests_canonical_unparser_la_LIBADD) $(LIBS)
  plugins/tests/cloning.la: $(plugins_tests_cloning_la_OBJECTS) 
$(plugins_tests_cloning_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
  	$(plugins_tests_cloning_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_cloning_la_OBJECTS) $(plugins_tests_cloning_la_LIBADD) $(LIBS)
+plugins/tests/inconsistent_st_attr.la: 
$(plugins_tests_inconsistent_st_attr_la_OBJECTS) 
$(plugins_tests_inconsistent_st_attr_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
+	$(plugins_tests_inconsistent_st_attr_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_inconsistent_st_attr_la_OBJECTS) 
$(plugins_tests_inconsistent_st_attr_la_LIBADD) $(LIBS)
  plugins/tests/line_numbers.la: 
$(plugins_tests_line_numbers_la_OBJECTS) 
$(plugins_tests_line_numbers_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
  	$(plugins_tests_line_numbers_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_line_numbers_la_OBJECTS) 
$(plugins_tests_line_numbers_la_LIBADD) $(LIBS)
  plugins/tests/linear.la: $(plugins_tests_linear_la_OBJECTS) 
$(plugins_tests_linear_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
  	$(plugins_tests_linear_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_linear_la_OBJECTS) $(plugins_tests_linear_la_LIBADD) $(LIBS)
-plugins/tests/lost_attributes.la: 
$(plugins_tests_lost_attributes_la_OBJECTS) 
$(plugins_tests_lost_attributes_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
-	$(plugins_tests_lost_attributes_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_lost_attributes_la_OBJECTS) 
$(plugins_tests_lost_attributes_la_LIBADD) $(LIBS)
  plugins/tests/pre_vs_post_count.la: 
$(plugins_tests_pre_vs_post_count_la_OBJECTS) 
$(plugins_tests_pre_vs_post_count_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
  	$(plugins_tests_pre_vs_post_count_la_LINK) -rpath $(pkglibdir) 
$(plugins_tests_pre_vs_post_count_la_OBJECTS) 
$(plugins_tests_pre_vs_post_count_la_LIBADD) $(LIBS)
  plugins/tests/source_vs_semantic_values.la: 
$(plugins_tests_source_vs_semantic_values_la_OBJECTS) 
$(plugins_tests_source_vs_semantic_values_la_DEPENDENCIES) plugins/tests/$(am__dirstamp)
@@ -1266,10 +1268,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getopt.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getopt1.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/helloworld.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inconsistent_st_attr.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lex.yy.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/line_numbers.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linear.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lost_attributes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/parse.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/phc.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/php_parser.tab.Plo at am__quote@
@@ -1876,6 +1878,13 @@
  @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
  @am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o 
cloning.lo `test -f 'plugins/tests/cloning.cpp' || echo '$(srcdir)/'`plugins/tests/cloning.cpp

+inconsistent_st_attr.lo: plugins/tests/inconsistent_st_attr.cpp
+ at am__fastdepCXX_TRUE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT 
inconsistent_st_attr.lo -MD -MP -MF $(DEPDIR)/inconsistent_st_attr.Tpo 
-c -o inconsistent_st_attr.lo `test 
-f 'plugins/tests/inconsistent_st_attr.cpp' || echo '$(srcdir)/'`plugins/tests/inconsistent_st_attr.cpp
+ at am__fastdepCXX_TRUE@	mv -f $(DEPDIR)/inconsistent_st_attr.Tpo $(DEPDIR)/inconsistent_st_attr.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	
source='plugins/tests/inconsistent_st_attr.cpp' 
object='inconsistent_st_attr.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o 
inconsistent_st_attr.lo `test 
-f 'plugins/tests/inconsistent_st_attr.cpp' || echo '$(srcdir)/'`plugins/tests/inconsistent_st_attr.cpp
+
 line_numbers.lo: plugins/tests/line_numbers.cpp
  @am__fastdepCXX_TRUE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT 
line_numbers.lo -MD -MP -MF $(DEPDIR)/line_numbers.Tpo -c -o 
line_numbers.lo `test -f 'plugins/tests/line_numbers.cpp' || echo '$(srcdir)/'`plugins/tests/line_numbers.cpp
 @am__fastdepCXX_TRUE@	mv -f $(DEPDIR)/line_numbers.Tpo $(DEPDIR)/line_numbers.Plo
@@ -1889,13 +1898,6 @@
  @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='plugins/tests/linear.cpp' 
object='linear.lo' libtool=yes @AMDEPBACKSLASH@
  @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
  @am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o 
linear.lo `test -f 'plugins/tests/linear.cpp' || echo '$(srcdir)/'`plugins/tests/linear.cpp
-
-lost_attributes.lo: plugins/tests/lost_attributes.cpp
- at am__fastdepCXX_TRUE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT 
lost_attributes.lo -MD -MP -MF $(DEPDIR)/lost_attributes.Tpo -c -o 
lost_attributes.lo `test -f 'plugins/tests/lost_attributes.cpp' || echo '$(srcdir)/'`plugins/tests/lost_attributes.cpp
- at am__fastdepCXX_TRUE@	mv -f $(DEPDIR)/lost_attributes.Tpo $(DEPDIR)/lost_attributes.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	
source='plugins/tests/lost_attributes.cpp' object='lost_attributes.lo' 
libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o 
lost_attributes.lo `test -f 'plugins/tests/lost_attributes.cpp' || echo '$(srcdir)/'`plugins/tests/lost_attributes.cpp

 pre_vs_post_count.lo: plugins/tests/pre_vs_post_count.cpp
  @am__fastdepCXX_TRUE@	$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) 
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT 
pre_vs_post_count.lo -MD -MP -MF $(DEPDIR)/pre_vs_post_count.Tpo -c -o 
pre_vs_post_count.lo `test -f 'plugins/tests/pre_vs_post_count.cpp' || echo '$(srcdir)/'`plugins/tests/pre_vs_post_count.cpp

Copied: trunk/plugins/tests/inconsistent_st_attr.cpp (from r1487, /trunk/plugins/tests/lost_attributes.cpp)
==============================================================================
--- /trunk/plugins/tests/lost_attributes.cpp	(original)
+++ trunk/plugins/tests/inconsistent_st_attr.cpp	Thu Jul 31 09:15:29 2008
@@ -2,67 +2,71 @@
  * phc -- the open source PHP compiler
  * See doc/license/README.license for licensing information
  *
- * Test whether we create nodes without attributes.
+ * Check that each variable is consistenly either in the symbol table, 
or not.
  */

 #include "process_ir/General.h"
 #include "pass_manager/Plugin_pass.h"
-#include "AST_visitor.h"
-#include "HIR_visitor.h"
 #include "MIR_visitor.h"

-template <class Node, class Visitor>
-class Lost_attributes : public Visitor
+using namespace MIR;
+
+bool success = true;
+
+class Inconstent_st_attr : public Visitor
 {
 private:
-	bool init;
+	map<string, bool> var_map;
+	bool check; // only check with methods
+

 public:
-	Lost_attributes (bool init = false) : init (init) { }
+	Inconstent_st_attr () : check(false) {}

-	void pre_node (Node* in)
+	// Only check within methods
+	void children_method (Method* in)
 	{
-		if (init)
-		{
-			in->attrs->set_true ("phc.lost_attributes.test");
-		}
-		else if (!in->attrs->is_true ("phc.lost_attributes.test"))
-		{
-			debug (in);
-			xadebug (in);
-			cout << "Failure" << endl;
-			exit (-1);
-		}
+		var_map.clear (); // This is per-method only
+		check = true;
+		visit_statement_list (in->statements);
+		check = false;
 	}
-};

-extern "C" void run_ast (AST::PHP_script* in, Pass_manager*, String* option)
-{
-	static bool first = true;
-	if (first)
+	void pre_variable_name (VARIABLE_NAME* in)
 	{
-		in->visit (new Lost_attributes<AST::Node, AST::Visitor> (true));
-		first = false;
-	}
-	in->visit (new Lost_attributes<AST::Node, AST::Visitor>);
-}
+		if (!check)
+			return;

-extern "C" void run_hir (HIR::PHP_script* in, Pass_manager*, String* option)
-{
-	in->visit (new Lost_attributes<HIR::Node, HIR::Visitor>);
-}
+		if (var_map.find(*in->value) != var_map.end()) // already exists
+		{
+			if (var_map[*in->value] != in->attrs->is_true ("phc.codegen.st_entry_not_required"))
+			{
+				success = false;
+				cout << "Failure" << endl;
+
+				cdebug << "Variable: ";
+				debug (in);
+				cdebug << " expected " << var_map[*in->value] << " st entry, but 
got " << in->attrs->is_true ("phc.codegen.st_entry_not_required") << endl;
+				xadebug (in);
+			}
+		}
+		else
+			var_map [*in->value] = in->attrs->is_true ("phc.codegen.st_entry_not_required");
+	}
+};

 extern "C" void run_mir (MIR::PHP_script* in, Pass_manager*, String* option)
 {
-	in->visit (new Lost_attributes<MIR::Node, MIR::Visitor>);
+	in->visit (new Inconstent_st_attr);
 }

 extern "C" void load (Pass_manager* pm, Plugin_pass* pass)
 {
-	pm->add_after_each_pass (pass);
+	pm->add_after_each_mir_pass (pass);
 }

 extern "C" void unload ()
 {
-	printf("Success\n");
+	if (success)
+		cout << "Success" << endl;
 }

Modified: trunk/test/framework/driver.php
==============================================================================
--- trunk/test/framework/driver.php	(original)
+++ trunk/test/framework/driver.php	Thu Jul 31 09:15:29 2008
@@ -88,7 +88,7 @@
 require_once ("compile_optimized.php");
 require_once ("refcounts.php");
 require_once ("demi_eval.php");
-$tests[] = new PluginTest ("lost_attributes");
+$tests[] = new PluginTest ("inconsistent_st_attr");
 $tests[] = new PluginTest ("linear");
 $tests[] = new PluginTest ("cloning");
 $tests[] = new PluginTest ("pre_vs_post_count");


More information about the phc-internals mailing list