浏览代码

Warn on set(PARENT_SCOPE) at top scope

Previously we silently ignored such calls and set nothing.  The commit
"Initialize directory scope with closure of parent" inroduced a bad test
for the top scope.  This commit fixes the test to avoid dereferencing a
null pointer, and adds a warning when the case is encountered.
Brad King 16 年之前
父节点
当前提交
59f6f383e9
共有 1 个文件被更改,包括 8 次插入2 次删除
  1. 8 2
      Source/cmMakefile.cxx

+ 8 - 2
Source/cmMakefile.cxx

@@ -3388,14 +3388,20 @@ void cmMakefile::RaiseScope(const char *var, const char *varDef)
     // Now update the definition in the parent scope.
     up->Set(var, varDef);
     }
-  else if(cmMakefile* parent =
-          this->LocalGenerator->GetParent()->GetMakefile())
+  else if(cmLocalGenerator* plg = this->LocalGenerator->GetParent())
     {
     // Update the definition in the parent directory top scope.  This
     // directory's scope was initialized by the closure of the parent
     // scope, so we do not need to localize the definition first.
+    cmMakefile* parent = plg->GetMakefile();
     parent->Internal->VarStack.top().Set(var, varDef);
     }
+  else
+    {
+    cmOStringStream m;
+    m << "Cannot set \"" << var << "\": current scope has no parent.";
+    this->IssueMessage(cmake::AUTHOR_WARNING, m.str());
+    }
 }