[C++] Honor "override" when setting global variable

Regression when compared to GNU make behaviour.

Test case:

 $ cat Makefile.override-failure
 $(info VAR: '$(VAR)')
 override VAR := test
 $(info VAR: '$(VAR)')
 override VAR := test-new
 $(info VAR: '$(VAR)')
 VAR := test-should-not-work
 $(info VAR: '$(VAR)')

 $ make -f Makefile.override-failure
 VAR: ''
 VAR: 'test'
 VAR: 'test-new'
 VAR: 'test-new'
 make: *** No targets.  Stop.

 $ ckati -c --warn -f Makefile.override-failure
 VAR: ''
 VAR: 'test'
 VAR: 'test'
 VAR: 'test'
 *** No targets.

Fixes https://github.com/google/kati/issues/50

Change-Id: I9c4185c30cfcf5602da7e0ac98b7e9c420788005
diff --git a/symtab.cc b/symtab.cc
index fb81bfe..edb6752 100644
--- a/symtab.cc
+++ b/symtab.cc
@@ -18,6 +18,8 @@
 
 #include "symtab.h"
 
+#include <iostream>
+
 #ifdef ENABLE_TID_CHECK
 #include <pthread.h>
 #endif
@@ -59,13 +61,14 @@
   return v;
 }
 
-void Symbol::SetGlobalVar(Var* v) const {
+void Symbol::SetGlobalVar(Var* v, bool is_override) const {
   if (static_cast<size_t>(v_) >= g_symbol_data.size()) {
     g_symbol_data.resize(v_ + 1);
   }
   Var* orig = g_symbol_data[v_].gv;
-  if (orig->Origin() == VarOrigin::OVERRIDE ||
-      orig->Origin() == VarOrigin::ENVIRONMENT_OVERRIDE) {
+  if (!is_override &&
+      (orig->Origin() == VarOrigin::OVERRIDE ||
+       orig->Origin() == VarOrigin::ENVIRONMENT_OVERRIDE)) {
     return;
   }
   if (orig->Origin() == VarOrigin::AUTOMATIC) {