diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 5ab508c43840321872f122086039ab2307576d97..92f2ac95a7c30283981b47b0fc9ad56a4ca4bebd 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -5918,6 +5918,9 @@ parser_logop( struct cbl_field_t *tgt,
       gg_assign(tgt->var_decl_node, boolean_true_node);
       break;
 
+    case false_op:
+      gg_assign(tgt->var_decl_node, boolean_false_node);
+      break;
     }
 
   TRACE1
@@ -14522,9 +14525,31 @@ parser_local_add(struct cbl_field_t *new_var )
 void
 parser_symbol_add(struct cbl_field_t *new_var )
   {
-  if(new_var->var_decl_node)
+  if( new_var->var_decl_node )
     {
-    fprintf(stderr, "possible reuse\n");
+    if( new_var->type != FldConditional )
+      {
+      // There is a possibility when re-using variables that a temporary that
+      // was created at compile time might not have a data pointer at run time.
+      if( new_var->attr & (temporary_e | intermediate_e) )
+        {
+        IF( member(new_var->var_decl_node, "allocated"),
+            lt_op,
+            member(new_var->var_decl_node, "capacity") )
+          {
+          gg_free(member(new_var, "data"));
+          gg_assign(member(new_var, "data"),
+                    gg_cast(UCHAR_P, gg_malloc(new_var->data.capacity)));
+          gg_assign(member(new_var, "allocated"),
+                    build_int_cst_type(SIZE_T, new_var->data.capacity));
+          }
+        ELSE
+          {
+          }
+        ENDIF
+        }
+      }
+    return;
     }
 
   if( !(new_var->attr & initialized_e) )
diff --git a/gcc/cobol/genapi.h b/gcc/cobol/genapi.h
index 69113aab2693d962ebb7010b86802bcac6a3d83c..3b17f977d1698a18f12acda0f7677a6e59705362 100644
--- a/gcc/cobol/genapi.h
+++ b/gcc/cobol/genapi.h
@@ -589,9 +589,9 @@ tree parser_cast_long(tree N);
 void parser_print_long(tree N);
 void parser_print_long(const char *fmt, tree N);
 void parser_print_long(long N);
-void parser_print_long(const char *fmt, long N); // fmt needs to have a %s in it
+void parser_print_long(const char *fmt, long N); // fmt needs to have a %ls in it
 void parser_print_string(const char *ach);
-void parser_print_string(const char *fmt, const char *ach); // fmt needs to have a %ld in it
+void parser_print_string(const char *fmt, const char *ach); // fmt needs to have a %s in it
 void parser_set_statement(const char *statement);
 
 char *initial_from_float128(cbl_field_t *field, _Float128 value);
diff --git a/gcc/cobol/gengen.cc b/gcc/cobol/gengen.cc
index 370ea00abbe3b11559d36be968731d7281356e3f..950f20e92b9dd1563d12f0245d4e29aebf6dbff4 100644
--- a/gcc/cobol/gengen.cc
+++ b/gcc/cobol/gengen.cc
@@ -1875,6 +1875,7 @@ gg_build_logical_expression(tree operand_a,
 
     case xnor_op:
     case true_op:
+    case false_op:
       // This is handled elsewhere
       break;
     }
diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 783f01343fc8e713635c00cf9f9013ee9c84bc81..edb2371d6e5b6a29e7b7c90a9f944f17ffb3bec9 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -800,6 +800,8 @@ static int prior_statement;
 
 static void
 statement_begin( const YYLTYPE& loc, int token ) {
+    // The following statement generates a message at run-time
+    // parser_print_string("statement_begin()\n");
     location_set(loc);
     prior_statement = token;
 
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index bd7f26b0cfc3f0088718aa310b45afc928e7d0af..02f1e6dea69986ad149603b3a8fda3d40a43ba19 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -749,6 +749,7 @@ enum logop_t {
   xor_op,
   xnor_op,
   true_op,
+  false_op,
 };
 
 #define SETOP_START 200
@@ -785,6 +786,7 @@ logop_str( enum logop_t logop ) {
   case xor_op: return "xor";
   case xnor_op: return "xnor";
   case true_op: return "true";
+  case false_op: return "false";
   }
   return "???";
 }
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index dfbbc7a89020f2adbf1a9b7f3f5feb30d061d956..733a71efec121cf96eab257258169d5bc2c20b50 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -156,6 +156,8 @@ cbl_logop_str( enum logop_t op )
     return "xnor_op";
   case true_op:
     return "true_op";
+  case false_op:
+    return "false_op";
   }
   warnx("%s:%d: invalid logop_t %d", __func__, __LINE__, op);
   return "???";