[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) {