[Options] Store the owning OptTable in Option so it can construct Group and Alias.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165150 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/OptTable.cpp b/lib/Driver/OptTable.cpp
index a6d3cb3..680ea99 100644
--- a/lib/Driver/OptTable.cpp
+++ b/lib/Driver/OptTable.cpp
@@ -134,13 +134,7 @@
 }
 
 Option *OptTable::CreateOption(unsigned id) const {
-  const Info &info = getInfo(id);
-  const Option *Group = getOption(info.GroupID);
-  const Option *Alias = getOption(info.AliasID);
-
-  Option *Opt = new Option(&info, Group, Alias);
-
-  return Opt;
+  return new Option(&getInfo(id), this);
 }
 
 Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index) const {
diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp
index 3be141e..117021b 100644
--- a/lib/Driver/Option.cpp
+++ b/lib/Driver/Option.cpp
@@ -17,14 +17,13 @@
 #include <algorithm>
 using namespace clang::driver;
 
-Option::Option(const OptTable::Info *info,
-               const Option *_Group, const Option *_Alias)
-  : Info(info), Group(_Group), Alias(_Alias) {
+Option::Option(const OptTable::Info *info, const OptTable *owner)
+  : Info(info), Owner(owner) {
 
   // Multi-level aliases are not supported, and alias options cannot
   // have groups. This just simplifies option tracking, it is not an
   // inherent limitation.
-  assert((!Alias || (!Alias->Alias && !Group)) &&
+  assert((!getAlias() || (!getAlias()->getAlias() && !getGroup())) &&
          "Multi-level aliases and aliases with groups are unsupported.");
 }
 
@@ -50,11 +49,13 @@
 
   llvm::errs() << " Name:\"" << getName() << '"';
 
+  const Option *Group = getGroup();
   if (Group) {
     llvm::errs() << " Group:";
     Group->dump();
   }
 
+  const Option *Alias = getAlias();
   if (Alias) {
     llvm::errs() << " Alias:";
     Alias->dump();
@@ -68,6 +69,7 @@
 
 bool Option::matches(OptSpecifier Opt) const {
   // Aliases are never considered in matching, look through them.
+  const Option *Alias = getAlias();
   if (Alias)
     return Alias->matches(Opt);
 
@@ -75,6 +77,7 @@
   if (getID() == Opt.getID())
     return true;
 
+  const Option *Group = getGroup();
   if (Group)
     return Group->matches(Opt);
   return false;