[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-12-12 Thread Jonas Hahnfeld via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL289422: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC) 
(authored by Hahnfeld).

Changed prior to commit:
  https://reviews.llvm.org/D25669?vs=74948=81053#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D25669

Files:
  cfe/trunk/lib/Driver/ToolChain.cpp


Index: cfe/trunk/lib/Driver/ToolChain.cpp
===
--- cfe/trunk/lib/Driver/ToolChain.cpp
+++ cfe/trunk/lib/Driver/ToolChain.cpp
@@ -542,7 +542,7 @@
   const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
   StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
 
-  // "platform" is only used in tests to override CLANG_DEFAULT_RTLIB
+  // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB!
   if (LibName == "compiler-rt")
 return ToolChain::RLT_CompilerRT;
   else if (LibName == "libgcc")
@@ -556,43 +556,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) 
const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
-
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
+
+  // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB!
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if (A)
+getDriver().Diag(diag::err_drv_invalid_stdlib_name) << 
A->getAsString(Args);
 
-  return Type;
+  return GetDefaultCXXStdlibType();
 }
 
 /// \brief Utility function to add a system include directory to CC1 arguments.


Index: cfe/trunk/lib/Driver/ToolChain.cpp
===
--- cfe/trunk/lib/Driver/ToolChain.cpp
+++ cfe/trunk/lib/Driver/ToolChain.cpp
@@ -542,7 +542,7 @@
   const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
   StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
 
-  // "platform" is only used in tests to override CLANG_DEFAULT_RTLIB
+  // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB!
   if (LibName == "compiler-rt")
 return ToolChain::RLT_CompilerRT;
   else if (LibName == "libgcc")
@@ -556,43 +556,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
-
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
+
+  // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB!
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if 

[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-12-06 Thread Lei Zhang via Phabricator via cfe-commits
zlei added a comment.

LGTM


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-12-05 Thread Jonas Hahnfeld via Phabricator via cfe-commits
Hahnfeld added a comment.

Ping!


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-11-23 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

ping


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-11-09 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

ping


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-11-03 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

Can I commit this as-is for now and we can think about `StringSwitch` in the 
driver later on?


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-26 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added inline comments.



Comment at: lib/Driver/ToolChain.cpp:553-559
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();

ABataev wrote:
> Hahnfeld wrote:
> > mgorny wrote:
> > > ABataev wrote:
> > > > I believe you can use StringSwitch here
> > > I think you are changing the meaning of this comment. The original 
> > > sounded like a request not to use this type anywhere else. Your version 
> > > only explains where it's used (right now).
> > I'm uncertain how to apply it while also preserving the `Diag` for an 
> > invalid argument: I would probably need an additional `CST_Unknown` which I 
> > don't like more...
> I think you can try something like this:
> ```
> llvm::Optional Res = 
> StringSwitch llvm::NoneType>(LibName).Case("libc++", 
> ToolChain::CST_Libcxx).Case("libstdc++", 
> ToolChain::CST_Libstdcxx).Case("platform", 
> GetDefaultCXXStdlibType()).Default(llvm::None);
> if (Res)
>   return Res.getValue();
> ```
Does that really improve readability? `StringSwitch` is currently never used in 
`ToolChain.cpp` and the cascade with `if`s is one line shorter in this case...


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-26 Thread Alexey Bataev via cfe-commits
ABataev added inline comments.



Comment at: lib/Driver/ToolChain.cpp:553-559
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();

Hahnfeld wrote:
> mgorny wrote:
> > ABataev wrote:
> > > I believe you can use StringSwitch here
> > I think you are changing the meaning of this comment. The original sounded 
> > like a request not to use this type anywhere else. Your version only 
> > explains where it's used (right now).
> I'm uncertain how to apply it while also preserving the `Diag` for an invalid 
> argument: I would probably need an additional `CST_Unknown` which I don't 
> like more...
I think you can try something like this:
```
llvm::Optional Res = 
StringSwitch(LibName).Case("libc++", 
ToolChain::CST_Libcxx).Case("libstdc++", 
ToolChain::CST_Libstdcxx).Case("platform", 
GetDefaultCXXStdlibType()).Default(llvm::None);
if (Res)
  return Res.getValue();
```


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-26 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

gentle ping


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-18 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added inline comments.



Comment at: lib/Driver/ToolChain.cpp:553-559
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();

mgorny wrote:
> ABataev wrote:
> > I believe you can use StringSwitch here
> I think you are changing the meaning of this comment. The original sounded 
> like a request not to use this type anywhere else. Your version only explains 
> where it's used (right now).
I'm uncertain how to apply it while also preserving the `Diag` for an invalid 
argument: I would probably need an additional `CST_Unknown` which I don't like 
more...


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-18 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld updated this revision to Diff 74948.
Hahnfeld marked an inline comment as done.
Hahnfeld added a comment.

Update comments to express that `platform` should only be used in tests


https://reviews.llvm.org/D25669

Files:
  lib/Driver/ToolChain.cpp


Index: lib/Driver/ToolChain.cpp
===
--- lib/Driver/ToolChain.cpp
+++ lib/Driver/ToolChain.cpp
@@ -532,7 +532,7 @@
   const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
   StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
 
-  // "platform" is only used in tests to override CLANG_DEFAULT_RTLIB
+  // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB!
   if (LibName == "compiler-rt")
 return ToolChain::RLT_CompilerRT;
   else if (LibName == "libgcc")
@@ -546,43 +546,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) 
const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
 
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB!
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if (A)
+getDriver().Diag(diag::err_drv_invalid_stdlib_name) << 
A->getAsString(Args);
 
-  return Type;
+  return GetDefaultCXXStdlibType();
 }
 
 /// \brief Utility function to add a system include directory to CC1 arguments.


Index: lib/Driver/ToolChain.cpp
===
--- lib/Driver/ToolChain.cpp
+++ lib/Driver/ToolChain.cpp
@@ -532,7 +532,7 @@
   const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
   StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
 
-  // "platform" is only used in tests to override CLANG_DEFAULT_RTLIB
+  // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB!
   if (LibName == "compiler-rt")
 return ToolChain::RLT_CompilerRT;
   else if (LibName == "libgcc")
@@ -546,43 +546,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
 
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB!
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if (A)
+getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);
 
-  return Type;
+  return GetDefaultCXXStdlibType();
 }
 
 /// \brief 

[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-17 Thread Michał Górny via cfe-commits
mgorny added a comment.

Thanks for working on this. Your code is much cleaner ;-).




Comment at: lib/Driver/ToolChain.cpp:553
 
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")

ABataev wrote:
> I believe you can use StringSwitch here
I think you are changing the meaning of this comment. The original sounded like 
a request not to use this type anywhere else. Your version only explains where 
it's used (right now).


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-17 Thread Alexey Bataev via cfe-commits
ABataev added inline comments.



Comment at: lib/Driver/ToolChain.cpp:553-559
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();

I believe you can use StringSwitch here


https://reviews.llvm.org/D25669



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25669: [Driver] Simplify ToolChain::GetCXXStdlibType (NFC)

2016-10-17 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld created this revision.
Hahnfeld added reviewers: mgorny, ddunbar, phosek.
Hahnfeld added subscribers: cfe-commits, zlei.

I made the wrong assumption that execution would continue after an error Diag 
which led to unneeded complex code.
This patch aligns with the better implementation of 
`ToolChain::GetRuntimeLibType`.


https://reviews.llvm.org/D25669

Files:
  lib/Driver/ToolChain.cpp


Index: lib/Driver/ToolChain.cpp
===
--- lib/Driver/ToolChain.cpp
+++ lib/Driver/ToolChain.cpp
@@ -546,43 +546,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) 
const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
 
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if (A)
+getDriver().Diag(diag::err_drv_invalid_stdlib_name) << 
A->getAsString(Args);
 
-  return Type;
+  return GetDefaultCXXStdlibType();
 }
 
 /// \brief Utility function to add a system include directory to CC1 arguments.


Index: lib/Driver/ToolChain.cpp
===
--- lib/Driver/ToolChain.cpp
+++ lib/Driver/ToolChain.cpp
@@ -546,43 +546,22 @@
   return GetDefaultRuntimeLibType();
 }
 
-static bool ParseCXXStdlibType(const StringRef& Name,
-   ToolChain::CXXStdlibType& Type) {
-  if (Name == "libc++")
-Type = ToolChain::CST_Libcxx;
-  else if (Name == "libstdc++")
-Type = ToolChain::CST_Libstdcxx;
-  else
-return false;
-
-  return true;
-}
-
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList ) const{
-  ToolChain::CXXStdlibType Type;
-  bool HasValidType = false;
-  bool ForcePlatformDefault = false;
-
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
-  if (A) {
-StringRef Value = A->getValue();
-HasValidType = ParseCXXStdlibType(Value, Type);
-
-// Only use in tests to override CLANG_DEFAULT_CXX_STDLIB!
-if (Value == "platform")
-  ForcePlatformDefault = true;
-else if (!HasValidType)
-  getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-<< A->getAsString(Args);
-  }
+  StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
 
-  // If no argument was provided or its value was invalid, look for the
-  // default unless forced or configured to take the platform default.
-  if (!HasValidType && (ForcePlatformDefault ||
-  !ParseCXXStdlibType(CLANG_DEFAULT_CXX_STDLIB, Type)))
-Type = GetDefaultCXXStdlibType();
+  // "platform" is only used in tests to override CLANG_DEFAULT_CXX_STDLIB
+  if (LibName == "libc++")
+return ToolChain::CST_Libcxx;
+  else if (LibName == "libstdc++")
+return ToolChain::CST_Libstdcxx;
+  else if (LibName == "platform")
+return GetDefaultCXXStdlibType();
+
+  if (A)
+getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);
 
-  return Type;
+  return GetDefaultCXXStdlibType();
 }
 
 /// \brief Utility function to add a system include directory to CC1 arguments.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits