diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 104c1f2f5065c6927c8723da4fc8775b978ec11a..fe2744d1e202804ebbdc2388bc22d65652c4b145 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.1.1.1 1996/07/09 06:21:25 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.2 1996/09/16 05:33:20 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -172,8 +172,24 @@ ExecEvalAggreg(Aggreg *agg, ExprContext *econtext, bool *isNull)
  *    
  *    	Returns a Datum whose value is the value of a range
  *	variable with respect to given expression context.
- * ----------------------------------------------------------------
- */
+ *
+ *
+ *      As an entry condition, we expect that the the datatype the
+ *      plan expects to get (as told by our "variable" argument) is in
+ *      fact the datatype of the attribute the plan says to fetch (as
+ *      seen in the current context, identified by our "econtext"
+ *      argument).
+ * 
+ *      If we fetch a Type A attribute and Caller treats it as if it
+ *      were Type B, there will be undefined results (e.g. crash).
+ *      One way these might mismatch now is that we're accessing a
+ *      catalog class and the type information in the pg_attribute
+ *      class does not match the hardcoded pg_attribute information
+ *      (in pg_attribute.h) for the class in question.
+ *     
+ *      We have an Assert to make sure this entry condition is met.
+ * 
+ * ---------------------------------------------------------------- */
 Datum
 ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull)
 {
@@ -211,8 +227,12 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull)
     heapTuple =  slot->val;
     tuple_type = slot->ttc_tupleDescriptor;
     buffer =	 slot->ttc_buffer;
-    
+
     attnum =  	variable->varattno;
+
+    /* (See prolog for explanation of this Assert) */
+    Assert(attnum < 0 ||
+           variable->vartype == tuple_type->attrs[attnum-1]->atttypid)
     
     /*
      * If the attribute number is invalid, then we are supposed to
diff --git a/src/include/access/tupdesc.h b/src/include/access/tupdesc.h
index 75945b625d67c70845cc87ad9c03dbdebfd5294e..b6cb6f447e7fbce261fc5767a056827b70be4781 100644
--- a/src/include/access/tupdesc.h
+++ b/src/include/access/tupdesc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tupdesc.h,v 1.1 1996/08/27 21:50:26 scrappy Exp $
+ * $Id: tupdesc.h,v 1.2 1996/09/16 05:33:13 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,21 +18,16 @@
 #include "nodes/pg_list.h"	/* for List */
 #include "catalog/pg_attribute.h"
 
-/*
- * a TupleDesc is an array of AttributeTupleForms, each of which is a
- * pointer to a AttributeTupleForm
- */
-/* typedef AttributeTupleForm      *TupleDesc; */
-
-/* a TupleDesc is a pointer to a structure which includes an array of */
-/* AttributeTupleForms, i.e. pg_attribute information, and the size of */
-/* the array, i.e. the number of attributes */
-/* in short, a TupleDesc completely captures the attribute information */
-/* for a tuple */
 
 typedef struct tupleDesc {
-    int  natts;
+/*------------------------------------------------------------------------ 
+  This structure contains all the attribute information (i.e. from Class 
+  pg_attribute) for a tuple. 
+-------------------------------------------------------------------------*/
+    int  natts;      
+      /* Number of attributes in the tuple */
     AttributeTupleForm *attrs;
+      /* attrs[N] is a pointer to the description of Attribute Number N+1.  */
 } *TupleDesc;
 
 extern TupleDesc CreateTemplateTupleDesc(int natts);