[libcxx] r324309 - Revert "[libc++] Fix PR35491 - std::array of zero-size doesn't work with non-default constructible types."

2018-02-05 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Mon Feb  5 19:03:37 2018
New Revision: 324309

URL: http://llvm.org/viewvc/llvm-project?rev=324309&view=rev
Log:
Revert "[libc++] Fix PR35491 - std::array of zero-size doesn't work with 
non-default constructible types."
Revert "Fix initialization of array with GCC."
Revert "Make array non-CopyAssignable and make swap and fill 
ill-formed."

This reverts commit r324182, r324185, and r324194 which were causing issues 
with zero-length std::arrays.

Removed:

libcxx/trunk/test/std/containers/sequences/array/array.cons/implicit_copy.pass.cpp
libcxx/trunk/test/std/containers/sequences/array/array.fill/fill.fail.cpp
libcxx/trunk/test/std/containers/sequences/array/array.swap/swap.fail.cpp
Modified:
libcxx/trunk/include/array
libcxx/trunk/test/std/containers/sequences/array/array.cons/default.pass.cpp
libcxx/trunk/test/std/containers/sequences/array/array.data/data.pass.cpp

libcxx/trunk/test/std/containers/sequences/array/array.data/data_const.pass.cpp
libcxx/trunk/test/std/containers/sequences/array/begin.pass.cpp

Modified: libcxx/trunk/include/array
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/array?rev=324309&r1=324308&r2=324309&view=diff
==
--- libcxx/trunk/include/array (original)
+++ libcxx/trunk/include/array Mon Feb  5 19:03:37 2018
@@ -118,57 +118,6 @@ template  c
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template 
-struct __array_traits {
-  typedef _Tp _StorageT[_Size];
-
-  _LIBCPP_INLINE_VISIBILITY
-  static _LIBCPP_CONSTEXPR_AFTER_CXX14 typename remove_const<_Tp>::type*
-  __data(typename remove_const<_StorageT>::type& __store) {
-return __store;
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  static _LIBCPP_CONSTEXPR_AFTER_CXX14 _Tp const* __data(const _StorageT& 
__store) {
-return __store;
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  static void __swap(_StorageT& __lhs, _StorageT& __rhs) {
-std::swap_ranges(__lhs, __lhs + _Size, __rhs);
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  static void __fill(_StorageT& __arr, _Tp const& __val) {
-_VSTD::fill_n(__arr, _Size, __val);
-  }
-};
-
-template 
-struct __array_traits<_Tp, 0> {
-  typedef typename aligned_storage::value>::type
-  _NonConstStorageT[1];
-  typedef typename conditional::value, const _NonConstStorageT,
-   _NonConstStorageT>::type _StorageT;
-  typedef typename remove_const<_Tp>::type _NonConstTp;
-
-  _LIBCPP_INLINE_VISIBILITY
-  static _NonConstTp* __data(_NonConstStorageT &__store) {
-return reinterpret_cast<_NonConstTp*>(__store);
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  static const _Tp* __data(const _StorageT &__store) {
-return reinterpret_cast(__store);
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  static void __swap(_StorageT&, _StorageT&) {}
-
-  _LIBCPP_INLINE_VISIBILITY
-  static void __fill(_StorageT&, _Tp const&) {}
-};
-
-template 
 struct _LIBCPP_TEMPLATE_VIS array
 {
 // types:
@@ -185,33 +134,31 @@ struct _LIBCPP_TEMPLATE_VIS array
 typedef std::reverse_iterator   reverse_iterator;
 typedef std::reverse_iterator const_reverse_iterator;
 
-typedef __array_traits<_Tp, _Size> _Traits;
-typename _Traits::_StorageT __elems_;
+value_type __elems_[_Size > 0 ? _Size : 1];
 
 // No explicit construct/copy/destroy for aggregate type
-_LIBCPP_INLINE_VISIBILITY void fill(const value_type& __u) {
-  static_assert(_Size != 0 || !is_const<_Tp>::value,
-"cannot fill zero-sized array of type 'const T'");
-  _Traits::__fill(__elems_, __u);
-}
+_LIBCPP_INLINE_VISIBILITY void fill(const value_type& __u)
+{_VSTD::fill_n(__elems_, _Size, __u);}
+_LIBCPP_INLINE_VISIBILITY
+void swap(array& __a) _NOEXCEPT_(_Size == 0 || 
__is_nothrow_swappable<_Tp>::value)
+{ __swap_dispatch((std::integral_constant()), __a); }
+
+_LIBCPP_INLINE_VISIBILITY
+void __swap_dispatch(std::true_type, array&) {}
 
 _LIBCPP_INLINE_VISIBILITY
-void swap(array& __a)
-_NOEXCEPT_(_Size == 0 || __is_nothrow_swappable<_Tp>::value) {
-  static_assert(_Size != 0 || !is_const<_Tp>::value,
-"cannot swap zero-sized array of type 'const T'");
-  _Traits::__swap(__elems_, __a.__elems_);
-}
+void __swap_dispatch(std::false_type, array& __a)
+{ _VSTD::swap_ranges(__elems_, __elems_ + _Size, __a.__elems_);}
 
 // iterators:
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-iterator begin() _NOEXCEPT {return iterator(data());}
+iterator begin() _NOEXCEPT {return iterator(__elems_);}
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-const_iterator begin() const _NOEXCEPT {return const_iterator(data());}
+const_iterator begin() const _NOEXCEPT {return const_iterator(__elems_);}
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-iterator end() _NOEXCEPT {return iterator(data() + _Size);}
+iterator end

r351559 - Clang side support for @cc assembly operands.

2019-01-18 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Jan 18 07:57:23 2019
New Revision: 351559

URL: http://llvm.org/viewvc/llvm-project?rev=351559&view=rev
Log:
Clang side support for @cc assembly operands.

Modified:
cfe/trunk/lib/Basic/Targets/X86.cpp

Modified: cfe/trunk/lib/Basic/Targets/X86.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=351559&r1=351558&r2=351559&view=diff
==
--- cfe/trunk/lib/Basic/Targets/X86.cpp (original)
+++ cfe/trunk/lib/Basic/Targets/X86.cpp Fri Jan 18 07:57:23 2019
@@ -1554,6 +1554,42 @@ bool X86TargetInfo::validateCpuIs(String
   .Default(false);
 }
 
+
+static unsigned matchAsmCCConstraint(const char *&Name) {
+ auto RV = llvm::StringSwitch(Name)
+   .Case("@cca",  4)
+   .Case("@ccae", 5)
+   .Case("@ccb",  4)
+   .Case("@ccbe", 5)
+   .Case("@ccc",  4)
+   .Case("@cce",  4)
+   .Case("@ccz",  4)
+   .Case("@ccg",  4)
+   .Case("@ccge", 4)
+   .Case("@ccl",  4)
+   .Case("@ccle", 5)
+   .Case("@ccna", 5)
+   .Case("@ccnae",6)
+   .Case("@ccnb", 5)
+   .Case("@ccnbe",6)
+   .Case("@ccnc", 5)
+   .Case("@ccne", 5)
+   .Case("@ccnz", 5)
+   .Case("@ccng", 5)
+   .Case("@ccnge",6)
+   .Case("@ccnl", 5)
+   .Case("@ccnle",6)
+   .Case("@ccno", 5)
+   .Case("@ccnp", 5)
+   .Case("@ccns", 5)
+   .Case("@cco",  4)
+   .Case("@ccp",  4)
+   .Case("@ccs",  4)
+   .Default(0);
+ return RV;
+}
+
+
 bool X86TargetInfo::validateAsmConstraint(
 const char *&Name, TargetInfo::ConstraintInfo &Info) const {
   switch (*Name) {
@@ -1636,6 +1672,14 @@ bool X86TargetInfo::validateAsmConstrain
   case 'C': // SSE floating point constant.
   case 'G': // x87 floating point constant.
 return true;
+  case '@':
+// CC condition changes.
+if (auto Len = matchAsmCCConstraint(Name)) {
+  Name+=Len-1;
+  Info.setAllowsRegister();
+  return true;
+}
+return false;
   }
 }
 
@@ -1705,8 +1749,16 @@ bool X86TargetInfo::validateOperandSize(
   return true;
 }
 
+//niravd
 std::string X86TargetInfo::convertConstraint(const char *&Constraint) const {
   switch (*Constraint) {
+case '@':
+if (auto Len = matchAsmCCConstraint(Constraint)) {
+  std::string Converted = "{" + std::string(Constraint, Len) + "}";
+  Constraint+=Len-1;
+  return Converted;
+}
+break;
   case 'a':
 return std::string("{ax}");
   case 'b':


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


r351561 - Revert "Clang side support for @cc assembly operands."

2019-01-18 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Jan 18 08:03:08 2019
New Revision: 351561

URL: http://llvm.org/viewvc/llvm-project?rev=351561&view=rev
Log:
Revert "Clang side support for @cc assembly operands."

Modified:
cfe/trunk/lib/Basic/Targets/X86.cpp

Modified: cfe/trunk/lib/Basic/Targets/X86.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=351561&r1=351560&r2=351561&view=diff
==
--- cfe/trunk/lib/Basic/Targets/X86.cpp (original)
+++ cfe/trunk/lib/Basic/Targets/X86.cpp Fri Jan 18 08:03:08 2019
@@ -1554,42 +1554,6 @@ bool X86TargetInfo::validateCpuIs(String
   .Default(false);
 }
 
-
-static unsigned matchAsmCCConstraint(const char *&Name) {
- auto RV = llvm::StringSwitch(Name)
-   .Case("@cca",  4)
-   .Case("@ccae", 5)
-   .Case("@ccb",  4)
-   .Case("@ccbe", 5)
-   .Case("@ccc",  4)
-   .Case("@cce",  4)
-   .Case("@ccz",  4)
-   .Case("@ccg",  4)
-   .Case("@ccge", 4)
-   .Case("@ccl",  4)
-   .Case("@ccle", 5)
-   .Case("@ccna", 5)
-   .Case("@ccnae",6)
-   .Case("@ccnb", 5)
-   .Case("@ccnbe",6)
-   .Case("@ccnc", 5)
-   .Case("@ccne", 5)
-   .Case("@ccnz", 5)
-   .Case("@ccng", 5)
-   .Case("@ccnge",6)
-   .Case("@ccnl", 5)
-   .Case("@ccnle",6)
-   .Case("@ccno", 5)
-   .Case("@ccnp", 5)
-   .Case("@ccns", 5)
-   .Case("@cco",  4)
-   .Case("@ccp",  4)
-   .Case("@ccs",  4)
-   .Default(0);
- return RV;
-}
-
-
 bool X86TargetInfo::validateAsmConstraint(
 const char *&Name, TargetInfo::ConstraintInfo &Info) const {
   switch (*Name) {
@@ -1672,14 +1636,6 @@ bool X86TargetInfo::validateAsmConstrain
   case 'C': // SSE floating point constant.
   case 'G': // x87 floating point constant.
 return true;
-  case '@':
-// CC condition changes.
-if (auto Len = matchAsmCCConstraint(Name)) {
-  Name+=Len-1;
-  Info.setAllowsRegister();
-  return true;
-}
-return false;
   }
 }
 
@@ -1749,16 +1705,8 @@ bool X86TargetInfo::validateOperandSize(
   return true;
 }
 
-//niravd
 std::string X86TargetInfo::convertConstraint(const char *&Constraint) const {
   switch (*Constraint) {
-case '@':
-if (auto Len = matchAsmCCConstraint(Constraint)) {
-  std::string Converted = "{" + std::string(Constraint, Len) + "}";
-  Constraint+=Len-1;
-  return Converted;
-}
-break;
   case 'a':
 return std::string("{ax}");
   case 'b':


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


r354053 - [X86] Add clang support for X86 flag output parameters.

2019-02-14 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Thu Feb 14 11:27:25 2019
New Revision: 354053

URL: http://llvm.org/viewvc/llvm-project?rev=354053&view=rev
Log:
[X86] Add clang support for X86 flag output parameters.

Summary:
Add frontend support and expected flags for X86 inline assembly flag
parameters.

Reviewers: craig.topper, rnk, echristo

Subscribers: eraman, nickdesaulniers, void, llvm-commits

Differential Revision: https://reviews.llvm.org/D57394

Added:
cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c
cfe/trunk/test/Preprocessor/x86_asm_flag_output.c
Modified:
cfe/trunk/lib/Basic/Targets/X86.cpp
cfe/trunk/test/Preprocessor/predefined-win-macros.c

Modified: cfe/trunk/lib/Basic/Targets/X86.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=354053&r1=354052&r2=354053&view=diff
==
--- cfe/trunk/lib/Basic/Targets/X86.cpp (original)
+++ cfe/trunk/lib/Basic/Targets/X86.cpp Thu Feb 14 11:27:25 2019
@@ -864,6 +864,9 @@ bool X86TargetInfo::handleTargetFeatures
 /// definitions for this particular subtarget.
 void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
  MacroBuilder &Builder) const {
+  // Inline assembly supports X86 flag outputs. 
+  Builder.defineMacro("__GCC_ASM_FLAG_OUTPUTS__");
+
   std::string CodeModel = getTargetOpts().CodeModel;
   if (CodeModel == "default")
 CodeModel = "small";
@@ -1553,6 +1556,40 @@ bool X86TargetInfo::validateCpuIs(String
   .Default(false);
 }
 
+static unsigned matchAsmCCConstraint(const char *&Name) {
+  auto RV = llvm::StringSwitch(Name)
+.Case("@cca", 4)
+.Case("@ccae", 5)
+.Case("@ccb", 4)
+.Case("@ccbe", 5)
+.Case("@ccc", 4)
+.Case("@cce", 4)
+.Case("@ccz", 4)
+.Case("@ccg", 4)
+.Case("@ccge", 5)
+.Case("@ccl", 4)
+.Case("@ccle", 5)
+.Case("@ccna", 5)
+.Case("@ccnae", 6)
+.Case("@ccnb", 5)
+.Case("@ccnbe", 6)
+.Case("@ccnc", 5)
+.Case("@ccne", 5)
+.Case("@ccnz", 5)
+.Case("@ccng", 5)
+.Case("@ccnge", 6)
+.Case("@ccnl", 5)
+.Case("@ccnle", 6)
+.Case("@ccno", 5)
+.Case("@ccnp", 5)
+.Case("@ccns", 5)
+.Case("@cco", 4)
+.Case("@ccp", 4)
+.Case("@ccs", 4)
+.Default(0);
+  return RV;
+}
+
 bool X86TargetInfo::validateAsmConstraint(
 const char *&Name, TargetInfo::ConstraintInfo &Info) const {
   switch (*Name) {
@@ -1635,6 +1672,14 @@ bool X86TargetInfo::validateAsmConstrain
   case 'C': // SSE floating point constant.
   case 'G': // x87 floating point constant.
 return true;
+  case '@':
+// CC condition changes.
+if (auto Len = matchAsmCCConstraint(Name)) {
+  Name += Len - 1;
+  Info.setAllowsRegister();
+  return true;
+}
+return false;
   }
 }
 
@@ -1706,6 +1751,13 @@ bool X86TargetInfo::validateOperandSize(
 
 std::string X86TargetInfo::convertConstraint(const char *&Constraint) const {
   switch (*Constraint) {
+  case '@':
+if (auto Len = matchAsmCCConstraint(Constraint)) {
+  std::string Converted = "{" + std::string(Constraint, Len) + "}";
+  Constraint += Len - 1;
+  return Converted;
+}
+return std::string(1, *Constraint);
   case 'a':
 return std::string("{ax}");
   case 'b':

Added: cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c?rev=354053&view=auto
==
--- cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c (added)
+++ cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c Thu Feb 14 11:27:25 2019
@@ -0,0 +1,365 @@
+// RUN: %clang_cc1 -O2 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | 
FileCheck %s
+
+int test_cca(long nr, volatile long *addr) {
+  //CHECK-LABEL: @test_cca
+  //CHECK: = tail call i32 asm "cmp $2,$1", 
"={@cca},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr)
+  int x;
+  asm("cmp %2,%1"
+  : "=@cca"(x), "=m"(*(volatile long *)(addr))
+  : "r"(nr)
+  : "cc");
+  if (x)
+return 0;
+  return 1;
+}
+
+int test_ccae(long nr, volatile long *addr) {
+  //CHECK-LABEL: @test_ccae
+  //CHECK: = tail call i32 asm "cmp $2,$1", 
"={@ccae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr)
+  int x;
+  asm("cmp %2,%1"
+  : "=@ccae"(x), "=m"(*(volatile long *)(addr))
+  : "r"(nr)
+  : "cc");
+  if (x)
+return 0;
+  return 1;
+}
+
+int test_ccb(long nr, volatile long *addr) {
+  //CHECK-LABEL: @test_ccb
+  //CHECK: = tail call i32 asm "cmp $2,$1

r354211 - [X86] Prevent clang clobber checking for asm flag constraints.

2019-02-16 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Sat Feb 16 19:53:23 2019
New Revision: 354211

URL: http://llvm.org/viewvc/llvm-project?rev=354211&view=rev
Log:
[X86] Prevent clang clobber checking for asm flag constraints.

Update getConstraintRegister as X86 Asm flag output constraints are no
longer fully alphanumeric,

Modified:
cfe/trunk/lib/Basic/Targets/X86.h
cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c

Modified: cfe/trunk/lib/Basic/Targets/X86.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.h?rev=354211&r1=354210&r2=354211&view=diff
==
--- cfe/trunk/lib/Basic/Targets/X86.h (original)
+++ cfe/trunk/lib/Basic/Targets/X86.h Sat Feb 16 19:53:23 2019
@@ -198,7 +198,7 @@ public:
   StringRef Expression) const override {
 StringRef::iterator I, E;
 for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) {
-  if (isalpha(*I))
+  if (isalpha(*I) || *I == '@')
 break;
 }
 if (I == E)

Modified: cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c?rev=354211&r1=354210&r2=354211&view=diff
==
--- cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c (original)
+++ cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c Sat Feb 16 19:53:23 2019
@@ -363,3 +363,14 @@ int test_ccs(long nr, volatile long *add
 return 0;
   return 1;
 }
+
+_Bool check_no_clobber_conflicts() {
+  //CHECK-LABEL: @check_no_clobber_conflicts
+  //CHECK:  = tail call i8 asm "", 
"={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"()
+  _Bool b;
+  asm(""
+  : "=@cce"(b)
+  :
+  : "cx");
+  return b;
+}


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


r331048 - [MC] Modify MCAsmStreamer to always build MCAssembler. NFCI.

2018-04-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Apr 27 08:45:54 2018
New Revision: 331048

URL: http://llvm.org/viewvc/llvm-project?rev=331048&view=rev
Log:
[MC] Modify MCAsmStreamer to always build MCAssembler. NFCI.

Modified:
cfe/trunk/tools/driver/cc1as_main.cpp

Modified: cfe/trunk/tools/driver/cc1as_main.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331048&r1=331047&r2=331048&view=diff
==
--- cfe/trunk/tools/driver/cc1as_main.cpp (original)
+++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 08:45:54 2018
@@ -398,17 +398,19 @@ static bool ExecuteAssembler(AssemblerIn
   if (Opts.OutputType == AssemblerInvocation::FT_Asm) {
 MCInstPrinter *IP = TheTarget->createMCInstPrinter(
 llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI);
-MCCodeEmitter *CE = nullptr;
-MCAsmBackend *MAB = nullptr;
-if (Opts.ShowEncoding) {
-  CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-  MCTargetOptions Options;
-  MAB = TheTarget->createMCAsmBackend(*STI, *MRI, Options);
-}
+
+std::unique_ptr CE;
+if (Opts.ShowEncoding)
+  CE.reset(TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx));
+MCTargetOptions MCOptions;
+std::unique_ptr MAB(
+TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions));
+
 auto FOut = llvm::make_unique(*Out);
 Str.reset(TheTarget->createAsmStreamer(
 Ctx, std::move(FOut), /*asmverbose*/ true,
-/*useDwarfDirectory*/ true, IP, CE, MAB, Opts.ShowInst));
+/*useDwarfDirectory*/ true, IP, std::move(CE), std::move(MAB),
+Opts.ShowInst));
   } else if (Opts.OutputType == AssemblerInvocation::FT_Null) {
 Str.reset(createNullStreamer(Ctx));
   } else {
@@ -419,13 +421,16 @@ static bool ExecuteAssembler(AssemblerIn
   Out = BOS.get();
 }
 
-MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx);
-MCTargetOptions Options;
-MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*STI, *MRI, Options);
+std::unique_ptr CE(
+TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx));
+MCTargetOptions MCOptions;
+std::unique_ptr MAB(
+TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions));
+
 Triple T(Opts.Triple);
 Str.reset(TheTarget->createMCObjectStreamer(
-T, Ctx, std::unique_ptr(MAB), *Out, 
std::unique_ptr(CE), *STI,
-Opts.RelaxAll, Opts.IncrementalLinkerCompatible,
+T, Ctx, std::move(MAB), *Out, std::move(CE), *STI, Opts.RelaxAll,
+Opts.IncrementalLinkerCompatible,
 /*DWARFMustBeAtTheEnd*/ true));
 Str.get()->InitSections(Opts.NoExecStack);
   }


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


r331052 - [MC] Provide default value for IsResolved.

2018-04-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Apr 27 09:11:24 2018
New Revision: 331052

URL: http://llvm.org/viewvc/llvm-project?rev=331052&view=rev
Log:
[MC] Provide default value for IsResolved.

Modified:
cfe/trunk/tools/driver/cc1as_main.cpp

Modified: cfe/trunk/tools/driver/cc1as_main.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331052&r1=331051&r2=331052&view=diff
==
--- cfe/trunk/tools/driver/cc1as_main.cpp (original)
+++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 09:11:24 2018
@@ -435,6 +435,9 @@ static bool ExecuteAssembler(AssemblerIn
 Str.get()->InitSections(Opts.NoExecStack);
   }
 
+  // Use Assembler information for parsing.
+  Str->setUseAssemblerInfoForParsing(true);
+
   bool Failed = false;
 
   std::unique_ptr Parser(


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


r331055 - [MC] Undo spurious commit added into r331052.

2018-04-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Apr 27 09:16:06 2018
New Revision: 331055

URL: http://llvm.org/viewvc/llvm-project?rev=331055&view=rev
Log:
[MC] Undo spurious commit added into r331052.

Modified:
cfe/trunk/tools/driver/cc1as_main.cpp

Modified: cfe/trunk/tools/driver/cc1as_main.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331055&r1=331054&r2=331055&view=diff
==
--- cfe/trunk/tools/driver/cc1as_main.cpp (original)
+++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 09:16:06 2018
@@ -435,9 +435,6 @@ static bool ExecuteAssembler(AssemblerIn
 Str.get()->InitSections(Opts.NoExecStack);
   }
 
-  // Use Assembler information for parsing.
-  Str->setUseAssemblerInfoForParsing(true);
-
   bool Failed = false;
 
   std::unique_ptr Parser(


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


r331218 - [MC] Change AsmParser to leverage Assembler during evaluation

2018-04-30 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Mon Apr 30 12:22:40 2018
New Revision: 331218

URL: http://llvm.org/viewvc/llvm-project?rev=331218&view=rev
Log:
[MC] Change AsmParser to leverage Assembler during evaluation

Teach AsmParser to check with Assembler for when evaluating constant
expressions.  This improves the handing of preprocessor expressions
that must be resolved at parse time. This idiom can be found as
assembling-time assertion checks in source-level assemblers. Note that
this relies on the MCStreamer to keep sufficient tabs on Section /
Fragment information which the MCAsmStreamer does not. As a result the
textual output may fail where the equivalent object generation would
pass. This can most easily be resolved by folding the MCAsmStreamer
and MCObjectStreamer together which is planned for in a separate
patch.

Currently, this feature is only enabled for assembly input, keeping IR
compilation consistent between assembly and object generation.

Reviewers: echristo, rnk, probinson, espindola, peter.smith

Reviewed By: peter.smith

Subscribers: eraman, peter.smith, arichardson, jyknight, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D45164

Added:
cfe/trunk/test/CodeGen/asm-parser-info.S
Modified:
cfe/trunk/tools/driver/cc1as_main.cpp

Added: cfe/trunk/test/CodeGen/asm-parser-info.S
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/asm-parser-info.S?rev=331218&view=auto
==
--- cfe/trunk/test/CodeGen/asm-parser-info.S (added)
+++ cfe/trunk/test/CodeGen/asm-parser-info.S Mon Apr 30 12:22:40 2018
@@ -0,0 +1,12 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c %s -o /dev/null
+
+// Check that cc1as can use assembler info in object generation.
+.data
+   
+foo:
+.if . - foo == 0
+.byte 0xaa
+.else
+.byte 0x00
+.endif

Modified: cfe/trunk/tools/driver/cc1as_main.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331218&r1=331217&r2=331218&view=diff
==
--- cfe/trunk/tools/driver/cc1as_main.cpp (original)
+++ cfe/trunk/tools/driver/cc1as_main.cpp Mon Apr 30 12:22:40 2018
@@ -435,6 +435,9 @@ static bool ExecuteAssembler(AssemblerIn
 Str.get()->InitSections(Opts.NoExecStack);
   }
 
+  // Assembly to object compilation should leverage assembly info.
+  Str->setUseAssemblerInfoForParsing(true);
+
   bool Failed = false;
 
   std::unique_ptr Parser(


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


r283583 - Silence Warning. NFC.

2016-10-07 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Oct  7 14:11:33 2016
New Revision: 283583

URL: http://llvm.org/viewvc/llvm-project?rev=283583&view=rev
Log:
Silence Warning. NFC.

Modified:
cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp?rev=283583&r1=283582&r2=283583&view=diff
==
--- cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp Fri Oct  7 14:11:33 2016
@@ -313,7 +313,7 @@ void CoreEngine::HandleBlockEdge(const B
 const ReturnStmt *RS = nullptr;
 if (!L.getSrc()->empty()) {
   if (Optional LastStmt = L.getSrc()->back().getAs()) {
-if (RS = dyn_cast(LastStmt->getStmt())) {
+if ((RS = dyn_cast(LastStmt->getStmt( {
   if (!RS->getRetValue())
 RS = nullptr;
 }


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


r318797 - Avoid unecessary opsize byte in segment move to memory

2017-11-21 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Nov 21 11:28:13 2017
New Revision: 318797

URL: http://llvm.org/viewvc/llvm-project?rev=318797&view=rev
Log:
Avoid unecessary opsize byte in segment move to memory

Segment moves to memory are always 16-bit. Remove invalid 32 and 64
bit variants.

Recommiting with missing clang inline assembly test change.

Fixes PR34478.

Reviewers: rnk, craig.topper

Subscribers: llvm-commits, hiraditya

Differential Revision: https://reviews.llvm.org/D39847

Modified:
cfe/trunk/test/CodeGen/ms-inline-asm.c

Modified: cfe/trunk/test/CodeGen/ms-inline-asm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/ms-inline-asm.c?rev=318797&r1=318796&r2=318797&view=diff
==
--- cfe/trunk/test/CodeGen/ms-inline-asm.c (original)
+++ cfe/trunk/test/CodeGen/ms-inline-asm.c Tue Nov 21 11:28:13 2017
@@ -577,17 +577,17 @@ void t40(float a) {
 void t41(unsigned short a) {
 // CHECK-LABEL: define void @t41(i16 zeroext %a)
   __asm mov cs, a;
-// CHECK: mov cs, word ptr $0
+// CHECK: mov cs, $0
   __asm mov ds, a;
-// CHECK: mov ds, word ptr $1
+// CHECK: mov ds, $1
   __asm mov es, a;
-// CHECK: mov es, word ptr $2
+// CHECK: mov es, $2
   __asm mov fs, a;
-// CHECK: mov fs, word ptr $3
+// CHECK: mov fs, $3
   __asm mov gs, a;
-// CHECK: mov gs, word ptr $4
+// CHECK: mov gs, $4
   __asm mov ss, a;
-// CHECK: mov ss, word ptr $5
+// CHECK: mov ss, $5
 // CHECK: "*m,*m,*m,*m,*m,*m,~{dirflag},~{fpsr},~{flags}"(i16* {{.*}}, i16* 
{{.*}}, i16* {{.*}}, i16* {{.*}}, i16* {{.*}}, i16* {{.*}})
 }
 


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


r281753 - Introduce inline assembly parsing test is PR30372.

2016-09-16 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Sep 16 12:42:02 2016
New Revision: 281753

URL: http://llvm.org/viewvc/llvm-project?rev=281753&view=rev
Log:
Introduce inline assembly parsing test is PR30372.

Added:
cfe/trunk/test/Sema/pr30372.c

Added: cfe/trunk/test/Sema/pr30372.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/pr30372.c?rev=281753&view=auto
==
--- cfe/trunk/test/Sema/pr30372.c (added)
+++ cfe/trunk/test/Sema/pr30372.c Fri Sep 16 12:42:02 2016
@@ -0,0 +1,12 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang_cc1 %s -triple i386-pc-windows-msvc18.0.0 -disable-free 
-fms-volatile -fms-extensions -fms-compatibility -fms-compatibility-version=18 
-std=c++11 -x c++
+
+// Check that the parser catching an 'error' from forward declaration of 
"location" does not lexer out it's subsequent declation.
+
+void foo() {
+  __asm {
+jl location
+ location:
+ret
+  }
+}


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


r298177 - [X86] Add NumRegisterParameters Module Flag.

2017-03-17 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Mar 17 19:43:39 2017
New Revision: 298177

URL: http://llvm.org/viewvc/llvm-project?rev=298177&view=rev
Log:
[X86] Add NumRegisterParameters Module Flag.

Reviewers: rnk, mkuper

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D27051

Added:
cfe/trunk/test/CodeGen/pr3997.c
Modified:
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
cfe/trunk/test/Headers/altivec-header.c

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=298177&r1=298176&r2=298177&view=diff
==
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Fri Mar 17 19:43:39 2017
@@ -159,6 +159,12 @@ CodeGenModule::CodeGenModule(ASTContext
   // CoverageMappingModuleGen object.
   if (CodeGenOpts.CoverageMapping)
 CoverageMapping.reset(new CoverageMappingModuleGen(*this, *CoverageInfo));
+
+  // Record mregparm value now so it is visible through rest of codegen.
+  if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86)
+getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters",
+  CodeGenOpts.NumRegisterParameters);
+
 }
 
 CodeGenModule::~CodeGenModule() {}
@@ -416,6 +422,7 @@ void CodeGenModule::Release() {
   (Context.getLangOpts().Modules || !LinkerOptionsMetadata.empty())) {
 EmitModuleLinkOptions();
   }
+
   if (CodeGenOpts.DwarfVersion) {
 // We actually want the latest version when there are conflicts.
 // We can change from Warning to Latest if such mode is supported.

Added: cfe/trunk/test/CodeGen/pr3997.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pr3997.c?rev=298177&view=auto
==
--- cfe/trunk/test/CodeGen/pr3997.c (added)
+++ cfe/trunk/test/CodeGen/pr3997.c Fri Mar 17 19:43:39 2017
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 %s -triple i386-unknown-linux-gnu -mregparm 3 -emit-llvm -o 
- | FileCheck %s
+
+void *memcpy(void *dest, const void *src, unsigned int n);
+
+void use_builtin_memcpy(void *dest, const void *src, unsigned int n) {
+  __builtin_memcpy(dest, src, n);
+}
+
+void use_memcpy(void *dest, const void *src, unsigned int n) {
+  memcpy(dest, src, n);
+}
+
+//CHECK: !{i32 1, !"NumRegisterParameters", i32 3}

Modified: cfe/trunk/test/Headers/altivec-header.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/altivec-header.c?rev=298177&r1=298176&r2=298177&view=diff
==
--- cfe/trunk/test/Headers/altivec-header.c (original)
+++ cfe/trunk/test/Headers/altivec-header.c Fri Mar 17 19:43:39 2017
@@ -9,4 +9,4 @@
 
 // CHECK: target triple = "powerpc64-
 // CHECK-NEXT: {{^$}}
-// CHECK-NEXT: llvm.ident
+// CHECK-NEXT: {{llvm\..*}}


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


r299079 - Move NumRegParameters Module Flag. NFCI.

2017-03-30 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Thu Mar 30 08:41:44 2017
New Revision: 299079

URL: http://llvm.org/viewvc/llvm-project?rev=299079&view=rev
Log:
Move NumRegParameters Module Flag. NFCI.

Modified:
cfe/trunk/lib/CodeGen/CodeGenModule.cpp

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=299079&r1=299078&r2=299079&view=diff
==
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Mar 30 08:41:44 2017
@@ -159,12 +159,6 @@ CodeGenModule::CodeGenModule(ASTContext
   // CoverageMappingModuleGen object.
   if (CodeGenOpts.CoverageMapping)
 CoverageMapping.reset(new CoverageMappingModuleGen(*this, *CoverageInfo));
-
-  // Record mregparm value now so it is visible through rest of codegen.
-  if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86)
-getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters",
-  CodeGenOpts.NumRegisterParameters);
-
 }
 
 CodeGenModule::~CodeGenModule() {}
@@ -424,6 +418,11 @@ void CodeGenModule::Release() {
 EmitModuleLinkOptions();
   }
 
+  // Record mregparm value now so it is visible through rest of codegen.
+  if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86)
+getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters",
+  CodeGenOpts.NumRegisterParameters);
+  
   if (CodeGenOpts.DwarfVersion) {
 // We actually want the latest version when there are conflicts.
 // We can change from Warning to Latest if such mode is supported.


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


[clang-tools-extra] r300324 - Silence -Wlogical-op-parentheses warning NFC

2017-04-14 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Fri Apr 14 09:36:45 2017
New Revision: 300324

URL: http://llvm.org/viewvc/llvm-project?rev=300324&view=rev
Log:
Silence -Wlogical-op-parentheses warning NFC

Modified:
clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp

Modified: 
clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp?rev=300324&r1=300323&r2=300324&view=diff
==
--- 
clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp 
(original)
+++ 
clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp 
Fri Apr 14 09:36:45 2017
@@ -123,7 +123,7 @@ void ForwardingReferenceOverloadCheck::c
 (OtherCtor->isCopyConstructor() ? EnabledCopy : EnabledMove) = true;
 }
   }
-  bool Copy = !EnabledMove && !DisabledMove && !DisabledCopy || EnabledCopy;
+  bool Copy = (!EnabledMove && !DisabledMove && !DisabledCopy) || EnabledCopy;
   bool Move = !DisabledMove || EnabledMove;
   if (!Copy && !Move)
 return;


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


r293649 - [X86] Teach Clang about -mfentry flag

2017-01-31 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Jan 31 11:00:35 2017
New Revision: 293649

URL: http://llvm.org/viewvc/llvm-project?rev=293649&view=rev
Log:
[X86] Teach Clang about -mfentry flag

Replace mcount calls with calls to fentry.

Reviewers: hfinkel, craig.topper

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D28001

Added:
cfe/trunk/test/CodeGen/fentry.c
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/Frontend/CodeGenOptions.def
cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Frontend/CompilerInvocation.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=293649&r1=293648&r2=293649&view=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Tue Jan 31 11:00:35 2017
@@ -1858,6 +1858,8 @@ def mpie_copy_relocations : Flag<["-"],
   Flags<[CC1Option]>,
   HelpText<"Use copy relocations support for PIE builds">;
 def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, 
Group;
+def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at 
function entry (x86 only)">,
+  Flags<[CC1Option]>, Group;
 def mx87 : Flag<["-"], "mx87">, Group;
 def m80387 : Flag<["-"], "m80387">, Alias;
 def msse2 : Flag<["-"], "msse2">, Group;

Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=293649&r1=293648&r2=293649&view=diff
==
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Jan 31 11:00:35 2017
@@ -83,6 +83,7 @@ CODEGENOPT(XRayInstrumentFunctions , 1,
 VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200)
 
 CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled.
+CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled.
 CODEGENOPT(LessPreciseFPMAD  , 1, 0) ///< Enable less precise MAD instructions 
to
  ///< be generated.
 CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=293649&r1=293648&r2=293649&view=diff
==
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Tue Jan 31 11:00:35 2017
@@ -860,8 +860,12 @@ void CodeGenFunction::StartFunction(Glob
   // inlining, we just add an attribute to insert a mcount call in backend.
   // The attribute "counting-function" is set to mcount function name which is
   // architecture dependent.
-  if (CGM.getCodeGenOpts().InstrumentForProfiling)
-Fn->addFnAttr("counting-function", getTarget().getMCountName());
+  if (CGM.getCodeGenOpts().InstrumentForProfiling) {
+if (CGM.getCodeGenOpts().CallFEntry)
+  Fn->addFnAttr("fentry-call", "true");
+else
+  Fn->addFnAttr("counting-function", getTarget().getMCountName());
+  }
 
   if (RetTy->isVoidType()) {
 // Void type; nothing to return.

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=293649&r1=293648&r2=293649&view=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Tue Jan 31 11:00:35 2017
@@ -5483,6 +5483,9 @@ void Clang::ConstructJob(Compilation &C,
   if (getToolChain().SupportsProfiling())
 Args.AddLastArg(CmdArgs, options::OPT_pg);
 
+  if (getToolChain().SupportsProfiling())
+Args.AddLastArg(CmdArgs, options::OPT_mfentry);
+
   // -flax-vector-conversions is default.
   if (!Args.hasFlag(options::OPT_flax_vector_conversions,
 options::OPT_fno_lax_vector_conversions))

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=293649&r1=293648&r2=293649&view=diff
==
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Jan 31 11:00:35 2017
@@ -717,6 +717,7 @@ static bool ParseCodeGenArgs(CodeGenOpti
   Opts.XRayInstructionThreshold =
   getLastArgIntValue(Args, OPT_fxray_instruction_threshold_, 200, Diags);
   Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
+  Opts.CallFEntry = Args.hasArg(OPT_mfentry);
   Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info);
   Opts.CompressDebugSections = Args.hasArg(OPT_comp

r276896 - Update Clang Parser test error message to match new parser errors

2016-07-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Wed Jul 27 12:39:47 2016
New Revision: 276896

URL: http://llvm.org/viewvc/llvm-project?rev=276896&view=rev
Log:
Update Clang Parser test error message to match new parser errors

Modified:
cfe/trunk/test/Parser/ms-inline-asm.c

Modified: cfe/trunk/test/Parser/ms-inline-asm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/ms-inline-asm.c?rev=276896&r1=276895&r2=276896&view=diff
==
--- cfe/trunk/test/Parser/ms-inline-asm.c (original)
+++ cfe/trunk/test/Parser/ms-inline-asm.c Wed Jul 27 12:39:47 2016
@@ -54,7 +54,7 @@ void t12() {
   __asm jmp label // expected-error {{use of undeclared label 'label'}}
 }
 void t13() {
-  __asm m{o}v eax, ebx // expected-error {{expected identifier}} 
expected-error {{use of undeclared label '{o}v eax, ebx'}}
+  __asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
 }
 
 int t_fail() { // expected-note {{to match this}}


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


r276907 - Add flags to toggle preservation of assembly comments

2016-07-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Wed Jul 27 14:57:40 2016
New Revision: 276907

URL: http://llvm.org/viewvc/llvm-project?rev=276907&view=rev
Log:
Add flags to toggle preservation of assembly comments

Summary: Add -fpreserve-as-comments and -fno-preserve-as-comments.

Reviewers: echristo, rnk

Subscribers: mehdi_amini, llvm-commits

Differential Revision: https://reviews.llvm.org/D22883

Added:
cfe/trunk/test/CodeGen/preserve-as-comments.c
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/Frontend/CodeGenOptions.def
cfe/trunk/lib/CodeGen/BackendUtil.cpp
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Frontend/CompilerInvocation.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=276907&r1=276906&r2=276907&view=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Wed Jul 27 14:57:40 2016
@@ -1089,6 +1089,9 @@ def fpie : Flag<["-"], "fpie">, Group, Group;
 def fplugin_EQ : Joined<["-"], "fplugin=">, Group, 
Flags<[DriverOption]>, MetaVarName<"">,
   HelpText<"Load the named plugin (dynamic shared object)">;
+def fpreserve_as_comments : Flag<["-"], "fpreserve-as-comments">, 
Group;
+def fno_preserve_as_comments : Flag<["-"], "fno-preserve-as-comments">, 
Group, Flags<[CC1Option]>,
+  HelpText<"Do not preserve comments in inline assembly">;
 def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group;
 def fno_profile_arcs : Flag<["-"], "fno-profile-arcs">, Group;
 def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;

Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=276907&r1=276906&r2=276907&view=diff
==
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Wed Jul 27 14:57:40 2016
@@ -32,6 +32,7 @@ CODEGENOPT(DisableIntegratedAS, 1, 0) //
 CODEGENOPT(CompressDebugSections, 1, 0) ///< -Wa,-compress-debug-sections
 CODEGENOPT(RelaxELFRelocations, 1, 0) ///< -Wa,--mrelax-relocations
 CODEGENOPT(AsmVerbose, 1, 0) ///< -dA, -fverbose-asm.
+CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments.
 CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) 
operator new
 CODEGENOPT(Autolink  , 1, 1) ///< -fno-autolink
 CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be 
EH-safe.

Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=276907&r1=276906&r2=276907&view=diff
==
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Wed Jul 27 14:57:40 2016
@@ -604,6 +604,7 @@ void EmitAssemblyHelper::CreateTargetMac
   CodeGenOpts.IncrementalLinkerCompatible;
   Options.MCOptions.MCFatalWarnings = CodeGenOpts.FatalWarnings;
   Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose;
+  Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments;
   Options.MCOptions.ABIName = TargetOpts.ABI;
 
   TM.reset(TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr,

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=276907&r1=276906&r2=276907&view=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Jul 27 14:57:40 2016
@@ -4193,6 +4193,10 @@ void Clang::ConstructJob(Compilation &C,
 true))
 CmdArgs.push_back("-fno-jump-tables");
 
+  if (!Args.hasFlag(options::OPT_fpreserve_as_comments,
+options::OPT_fno_preserve_as_comments, true))
+CmdArgs.push_back("-fno-preserve-as-comments");
+
   if (Arg *A = Args.getLastArg(options::OPT_mregparm_EQ)) {
 CmdArgs.push_back("-mregparm");
 CmdArgs.push_back(A->getValue());

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=276907&r1=276906&r2=276907&view=diff
==
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Jul 27 14:57:40 2016
@@ -544,6 +544,7 @@ static bool ParseCodeGenArgs(CodeGenOpti
   Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false);
   Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping);
   Opts.AsmVerbose = Args.hasArg(OPT_masm_verbose);
+  Opts.PreserveAsmComme

r276915 - Add target triple in test

2016-07-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Wed Jul 27 15:48:39 2016
New Revision: 276915

URL: http://llvm.org/viewvc/llvm-project?rev=276915&view=rev
Log:
Add target triple in test

Modified:
cfe/trunk/test/CodeGen/preserve-as-comments.c

Modified: cfe/trunk/test/CodeGen/preserve-as-comments.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/preserve-as-comments.c?rev=276915&r1=276914&r2=276915&view=diff
==
--- cfe/trunk/test/CodeGen/preserve-as-comments.c (original)
+++ cfe/trunk/test/CodeGen/preserve-as-comments.c Wed Jul 27 15:48:39 2016
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -S -fno-preserve-as-comments %s -o - | FileCheck %s 
--check-prefix=NOASM --check-prefix=CHECK
-// RUN: %clang_cc1 -S %s -o - | FileCheck %s --check-prefix=ASM 
--check-prefix=CHECK
+// RUN: %clang_cc1 -S -triple=x86_64-unknown-unknown -fno-preserve-as-comments 
%s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK
+// RUN: %clang_cc1 -S %s -triple=x86_64-unknown-unknown -o - | FileCheck %s 
--check-prefix=ASM --check-prefix=CHECK
 
 // CHECK-LABEL: main
 // CHECK: #APP


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


r276947 - Replace preserve-as-comments CodeGen test with driver test

2016-07-27 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Wed Jul 27 19:36:34 2016
New Revision: 276947

URL: http://llvm.org/viewvc/llvm-project?rev=276947&view=rev
Log:
Replace preserve-as-comments CodeGen test with driver test

Added:
cfe/trunk/test/Driver/preserve-as-comments.c
Removed:
cfe/trunk/test/CodeGen/preserve-as-comments.c

Removed: cfe/trunk/test/CodeGen/preserve-as-comments.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/preserve-as-comments.c?rev=276946&view=auto
==
--- cfe/trunk/test/CodeGen/preserve-as-comments.c (original)
+++ cfe/trunk/test/CodeGen/preserve-as-comments.c (removed)
@@ -1,12 +0,0 @@
-// RUN: %clang_cc1 -S -triple=x86_64-unknown-unknown -fno-preserve-as-comments 
%s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK
-// RUN: %clang_cc1 -S %s -triple=x86_64-unknown-unknown -o - | FileCheck %s 
--check-prefix=ASM --check-prefix=CHECK
-
-// CHECK-LABEL: main
-// CHECK: #APP
-// ASM: #comment
-// NOASM-NOT: #comment
-// CHECK: #NO_APP
-int main() {
-  __asm__("/*comment*/");
-  return 0;
-}

Added: cfe/trunk/test/Driver/preserve-as-comments.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/preserve-as-comments.c?rev=276947&view=auto
==
--- cfe/trunk/test/Driver/preserve-as-comments.c (added)
+++ cfe/trunk/test/Driver/preserve-as-comments.c Wed Jul 27 19:36:34 2016
@@ -0,0 +1,2 @@
+// RUN: %clang -S -fno-preserve-as-comments %s -### 2>&1 | FileCheck %s
+// CHECK: "-fno-preserve-as-comments"


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


r277490 - Update Clang Parser test error message to match new parser errors

2016-08-02 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Aug  2 12:58:14 2016
New Revision: 277490

URL: http://llvm.org/viewvc/llvm-project?rev=277490&view=rev
Log:
Update Clang Parser test error message to match new parser errors

Update clang tests in light of r277489.

Modified:
cfe/trunk/test/Parser/ms-inline-asm.c

Modified: cfe/trunk/test/Parser/ms-inline-asm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/ms-inline-asm.c?rev=277490&r1=277489&r2=277490&view=diff
==
--- cfe/trunk/test/Parser/ms-inline-asm.c (original)
+++ cfe/trunk/test/Parser/ms-inline-asm.c Tue Aug  2 12:58:14 2016
@@ -54,7 +54,7 @@ void t12() {
   __asm jmp label // expected-error {{use of undeclared label 'label'}}
 }
 void t13() {
-  __asm m{o}v eax, ebx // expected-error {{expected identifier}} 
expected-error {{use of undeclared label '{o}v eax, ebx'}}
+  __asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
 }
 
 int t_fail() { // expected-note {{to match this}}


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


r261533 - Add support for Android Vector calling convention for AArch64

2016-02-22 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Mon Feb 22 10:48:42 2016
New Revision: 261533

URL: http://llvm.org/viewvc/llvm-project?rev=261533&view=rev
Log:
Add support for Android Vector calling convention for AArch64

This modification applies the following Android commit when we have an
Android environment. This is the sole non-renderscript in the Android repo

commit 9212d4fb30a3ca2f4ee966dd2748c35573d9682c
Author: Tim Murray 
Date:   Fri Aug 15 16:00:15 2014 -0700

Update vector calling convention for AArch64.

bug 16846318

Change-Id: I3cfd167758b4bd634d8480ee6ba6bb55d61f82a7

Reviewers: srhines, jyknight

Subscribers: mcrosier, aemerson, rengolin, tberghammer, danalbert, srhines

Differential Revision: http://reviews.llvm.org/D17448

Modified:
cfe/trunk/lib/CodeGen/ABIInfo.h
cfe/trunk/lib/CodeGen/TargetInfo.cpp
cfe/trunk/test/CodeGen/arm64-abi-vector.c

Modified: cfe/trunk/lib/CodeGen/ABIInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ABIInfo.h?rev=261533&r1=261532&r2=261533&view=diff
==
--- cfe/trunk/lib/CodeGen/ABIInfo.h (original)
+++ cfe/trunk/lib/CodeGen/ABIInfo.h Mon Feb 22 10:48:42 2016
@@ -85,6 +85,8 @@ namespace clang {
CodeGen::Address VAListAddr,
QualType Ty) const = 0;
 
+bool isAndroid() const;
+
 /// Emit the target dependent code to load a value of
 /// \arg Ty from the \c __builtin_ms_va_list pointed to by \arg VAListAddr.
 virtual CodeGen::Address EmitMSVAArg(CodeGen::CodeGenFunction &CGF,

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=261533&r1=261532&r2=261533&view=diff
==
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Feb 22 10:48:42 2016
@@ -117,6 +117,8 @@ const TargetInfo &ABIInfo::getTarget() c
   return CGT.getTarget();
 }
 
+bool ABIInfo:: isAndroid() const { return getTarget().getTriple().isAndroid(); 
}
+
 bool ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
   return false;
 }
@@ -4319,6 +4321,11 @@ ABIArgInfo AArch64ABIInfo::classifyArgum
   // Handle illegal vector types here.
   if (isIllegalVectorType(Ty)) {
 uint64_t Size = getContext().getTypeSize(Ty);
+// Android promotes <2 x i8> to i16, not i32
+if(isAndroid() && (Size <= 16)) {
+  llvm::Type *ResType = llvm::Type::getInt16Ty(getVMContext());
+  return ABIArgInfo::getDirect(ResType);
+}
 if (Size <= 32) {
   llvm::Type *ResType = llvm::Type::getInt32Ty(getVMContext());
   return ABIArgInfo::getDirect(ResType);
@@ -4803,11 +4810,6 @@ public:
 }
   }
 
-  bool isAndroid() const {
-return (getTarget().getTriple().getEnvironment() ==
-llvm::Triple::Android);
-  }
-
   ABIKind getABIKind() const { return Kind; }
 
 private:

Modified: cfe/trunk/test/CodeGen/arm64-abi-vector.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64-abi-vector.c?rev=261533&r1=261532&r2=261533&view=diff
==
--- cfe/trunk/test/CodeGen/arm64-abi-vector.c (original)
+++ cfe/trunk/test/CodeGen/arm64-abi-vector.c Mon Feb 22 10:48:42 2016
@@ -1,7 +1,9 @@
 // RUN: %clang_cc1 -triple arm64-apple-ios7 -target-abi darwinpcs -emit-llvm 
-o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple aarch64-linux-android -emit-llvm -o - %s | 
FileCheck -check-prefix=ANDROID %s
 
 #include 
 
+typedef __attribute__(( ext_vector_type(2) ))  char __char2;
 typedef __attribute__(( ext_vector_type(3) ))  char __char3;
 typedef __attribute__(( ext_vector_type(4) ))  char __char4;
 typedef __attribute__(( ext_vector_type(5) ))  char __char5;
@@ -13,6 +15,26 @@ typedef __attribute__(( ext_vector_type(
 typedef __attribute__(( ext_vector_type(5) ))  int __int5;
 typedef __attribute__(( ext_vector_type(3) ))  double __double3;
 
+// Passing legal vector types as varargs. Check that we've allocated the 
appropriate size
+double varargs_vec_2c(int fixed, ...) {
+// ANDROID: varargs_vec_2c
+// ANDROID: [[VAR:%.*]] = alloca <2 x i8>, align 2
+// ANDROID: [[AP_NEXT:%.*]] = getelementptr inbounds i8, i8* [[AP_CUR:%.*]], 
i64 8
+// ANDROID: bitcast i8* [[AP_CUR]] to <2 x i8>*
+  va_list ap;
+  double sum = fixed;
+  va_start(ap, fixed);
+  __char2 c3 = va_arg(ap, __char2);
+  sum = sum + c3.x + c3.y;
+  va_end(ap);
+  return sum;
+}
+
+double test_2c(__char2 *in) {
+// ANDROID: call double (i32, ...) @varargs_vec_2c(i32 3, i16 {{%.*}})
+  return varargs_vec_2c(3, *in);
+}
+
 double varargs_vec_3c(int fixed, ...) {
 // CHECK: varargs_vec_3c
 // CHECK: alloca <3 x i8>, align 4


___
cfe-commits mailing list
cfe-commits@lists.llvm.org

r265425 - Add -fno-jump-tables and-fjump-tables flags

2016-04-05 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Apr  5 12:50:43 2016
New Revision: 265425

URL: http://llvm.org/viewvc/llvm-project?rev=265425&view=rev
Log:
Add -fno-jump-tables and-fjump-tables flags

Add no-jump-tables flag to disable use of jump tables when lowering
switch statements

Reviewers: echristo, hans

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D18407

Added:
cfe/trunk/test/CodeGen/nousejumptable.c
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/Frontend/CodeGenOptions.def
cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Frontend/CompilerInvocation.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=265425&r1=265424&r2=265425&view=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Tue Apr  5 12:50:43 2016
@@ -586,6 +586,9 @@ def fno_math_errno : Flag<["-"], "fno-ma
 def fbracket_depth_EQ : Joined<["-"], "fbracket-depth=">, Group;
 def fsignaling_math : Flag<["-"], "fsignaling-math">, Group;
 def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group;
+def fjump_tables : Flag<["-"], "fjump-tables">, Group;
+def fno_jump_tables : Flag<["-"], "fno-jump-tables">, Group, 
Flags<[CC1Option]>,
+  HelpText<"Do not use jump tables for lowering switches">;
 def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group,
Flags<[CC1Option, CoreOption]>, MetaVarName<"">,
HelpText<"Turn on runtime checks for various forms of 
undefined "

Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=265425&r1=265424&r2=265425&view=diff
==
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Apr  5 12:50:43 2016
@@ -149,6 +149,7 @@ CODEGENOPT(UnitAtATime   , 1, 1) ///
  ///< selection.
 CODEGENOPT(UnrollLoops   , 1, 0) ///< Control whether loops are unrolled.
 CODEGENOPT(RerollLoops   , 1, 0) ///< Control whether loops are rerolled.
+CODEGENOPT(NoUseJumpTables   , 1, 0) ///< Set when -fno-jump-tables is enabled
 CODEGENOPT(UnsafeFPMath  , 1, 0) ///< Allow unsafe floating point optzns.
 CODEGENOPT(UnwindTables  , 1, 0) ///< Emit unwind tables.
 CODEGENOPT(VectorizeBB   , 1, 0) ///< Run basic block vectorizer.

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=265425&r1=265424&r2=265425&view=diff
==
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Tue Apr  5 12:50:43 2016
@@ -711,6 +711,10 @@ void CodeGenFunction::StartFunction(Glob
   Fn->addFnAttr(llvm::Attribute::NoInline);
   }
 
+  // Add no-jump-tables value.
+  Fn->addFnAttr("no-jump-tables",
+llvm::toStringRef(CGM.getCodeGenOpts().NoUseJumpTables));
+
   if (getLangOpts().OpenCL) {
 // Add metadata for a kernel function.
 if (const FunctionDecl *FD = dyn_cast_or_null(D))

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=265425&r1=265424&r2=265425&view=diff
==
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Tue Apr  5 12:50:43 2016
@@ -3891,6 +3891,10 @@ void Clang::ConstructJob(Compilation &C,
 A->claim();
   }
 
+  if (!Args.hasFlag(options::OPT_fjump_tables, options::OPT_fno_jump_tables,
+true))
+CmdArgs.push_back("-fno-jump-tables");
+
   if (Arg *A = Args.getLastArg(options::OPT_mregparm_EQ)) {
 CmdArgs.push_back("-mregparm");
 CmdArgs.push_back(A->getValue());

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=265425&r1=265424&r2=265425&view=diff
==
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Apr  5 12:50:43 2016
@@ -606,6 +606,8 @@ static bool ParseCodeGenArgs(CodeGenOpti
 
   Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions);
 
+  Opts.NoUseJumpTables = Args.hasArg(OPT_fno_jump_tables);
+
   Opts.PrepareForLTO = Args.hasArg(OPT_flto, OPT_flto_EQ);
   const Arg *A = Args.getLastArg(OPT_flto, OPT_flto_EQ);
   Opts.EmitSummaryIndex = A && A->containsValue("thin");

Added: cfe/trunk/tes

r265432 - Fix missing period in no-jump-table flag comment. NFC.

2016-04-05 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Apr  5 13:11:01 2016
New Revision: 265432

URL: http://llvm.org/viewvc/llvm-project?rev=265432&view=rev
Log:
Fix missing period in no-jump-table flag comment. NFC.

Modified:
cfe/trunk/include/clang/Frontend/CodeGenOptions.def

Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=265432&r1=265431&r2=265432&view=diff
==
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Apr  5 13:11:01 2016
@@ -149,7 +149,7 @@ CODEGENOPT(UnitAtATime   , 1, 1) ///
  ///< selection.
 CODEGENOPT(UnrollLoops   , 1, 0) ///< Control whether loops are unrolled.
 CODEGENOPT(RerollLoops   , 1, 0) ///< Control whether loops are rerolled.
-CODEGENOPT(NoUseJumpTables   , 1, 0) ///< Set when -fno-jump-tables is enabled
+CODEGENOPT(NoUseJumpTables   , 1, 0) ///< Set when -fno-jump-tables is enabled.
 CODEGENOPT(UnsafeFPMath  , 1, 0) ///< Allow unsafe floating point optzns.
 CODEGENOPT(UnwindTables  , 1, 0) ///< Emit unwind tables.
 CODEGENOPT(VectorizeBB   , 1, 0) ///< Run basic block vectorizer.


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


r265439 - Fix broken tests from no-jump-table commit

2016-04-05 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Apr  5 13:59:37 2016
New Revision: 265439

URL: http://llvm.org/viewvc/llvm-project?rev=265439&view=rev
Log:
Fix broken tests from no-jump-table commit

Summary: Fix failing tests from no-jump-table flag addition

Reviewers: jyknight

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D18801

Modified:
cfe/trunk/test/CodeGen/cfi-check-fail.c
cfe/trunk/test/CodeGen/cfi-check-fail2.c
cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp
cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp
cfe/trunk/test/CodeGenCXX/dllexport.cpp
cfe/trunk/test/CodeGenObjCXX/personality-abuse.mm

Modified: cfe/trunk/test/CodeGen/cfi-check-fail.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/cfi-check-fail.c?rev=265439&r1=265438&r2=265439&view=diff
==
--- cfe/trunk/test/CodeGen/cfi-check-fail.c (original)
+++ cfe/trunk/test/CodeGen/cfi-check-fail.c Tue Apr  5 13:59:37 2016
@@ -7,7 +7,7 @@ void caller(void (*f)()) {
   f();
 }
 
-// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) {
+// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*)
 // CHECK: store i8* %0, i8** %[[ALLOCA0:.*]], align 8
 // CHECK: store i8* %1, i8** %[[ALLOCA1:.*]], align 8
 // CHECK: %[[DATA:.*]] = load i8*, i8** %[[ALLOCA0]], align 8

Modified: cfe/trunk/test/CodeGen/cfi-check-fail2.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/cfi-check-fail2.c?rev=265439&r1=265438&r2=265439&view=diff
==
--- cfe/trunk/test/CodeGen/cfi-check-fail2.c (original)
+++ cfe/trunk/test/CodeGen/cfi-check-fail2.c Tue Apr  5 13:59:37 2016
@@ -7,7 +7,7 @@ void caller(void (*f)()) {
   f();
 }
 
-// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) {
+// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*)
 // CHECK: store i8* %0, i8** %[[ALLOCA0:.*]], align 8
 // CHECK: store i8* %1, i8** %[[ALLOCA1:.*]], align 8
 // CHECK: %[[DATA:.*]] = load i8*, i8** %[[ALLOCA0]], align 8

Modified: cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp?rev=265439&r1=265438&r2=265439&view=diff
==
--- cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp Tue Apr  5 
13:59:37 2016
@@ -12,10 +12,11 @@ int f(void) {
 
 // CHECK: declare i32 @_Z1cv() [[NUW_RN:#[0-9]+]]
 // CHECK: declare i32 @_Z1pv() [[NUW_RO:#[0-9]+]]
-// CHECK: declare i32 @_Z1tv() [[TF]]
+// CHECK: declare i32 @_Z1tv() [[TF2:#[0-9]+]]
 
 // CHECK: attributes [[TF]] = { {{.*}} }
 // CHECK: attributes [[NUW_RN]] = { nounwind readnone{{.*}} }
 // CHECK: attributes [[NUW_RO]] = { nounwind readonly{{.*}} }
+// CHECK: attributes [[TF2]] = { {{.*}} }
 // CHECK: attributes [[NUW_RN_CALL]] = { nounwind readnone }
 // CHECK: attributes [[NUW_RO_CALL]] = { nounwind readonly }

Modified: cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp?rev=265439&r1=265438&r2=265439&view=diff
==
--- cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp Tue Apr  5 13:59:37 2016
@@ -70,37 +70,37 @@ void h() {
 
 // CHECK: define {{.*}} @_Z1iv
 void i() {
-  // CHECK: declare {{.*}} @_Z1gIiEvv() [[NUW]]
+  // CHECK: declare {{.*}} @_Z1gIiEvv() [[NUW2:#[0-9]+]]
   g();
   // CHECK: declare {{.*}} @_Z1gIA2_iEvv()
   // CHECK-NOT: [[NUW]]
   g();
 
-  // CHECK: declare {{.*}} @_ZN1SIiE1gEv() [[NUW]]
+  // CHECK: declare {{.*}} @_ZN1SIiE1gEv() [[NUW2]]
   S::g();
   // CHECK: declare {{.*}} @_ZN1SIA2_iE1gEv()
   // CHECK-NOT: [[NUW]]
   S::g();
 
-  // CHECK: declare {{.*}} @_Z1gIfEvv() [[NUW]]
+  // CHECK: declare {{.*}} @_Z1gIfEvv() [[NUW2]]
   void (*g1)() = &g;
   // CHECK: declare {{.*}} @_Z1gIdEvv()
   // CHECK-NOT: [[NUW]]
   void (*g2)() = &g;
 
-  // CHECK: declare {{.*}} @_ZN1SIfE1gEv() [[NUW]]
+  // CHECK: declare {{.*}} @_ZN1SIfE1gEv() [[NUW2]]
   void (*g3)() = &S::g;
   // CHECK: declare {{.*}} @_ZN1SIdE1gEv()
   // CHECK-NOT: [[NUW]]
   void (*g4)() = &S::g;
 
-  // CHECK: declare {{.*}} @_Z1gIA4_cEvv() [[NUW]]
+  // CHECK: declare {{.*}} @_Z1gIA4_cEvv() [[NUW2]]
   (void)&g;
   // CHECK: declare {{.*}} @_Z1gIcEvv()
   // CHECK-NOT: [[NUW]]
   (void)&g;
 
-  // CHECK: declare {{.*}} @_ZN1SIA4_cE1gEv() [[NUW]]
+  // CHECK: declare {{.*}} @_ZN1SIA4_cE1gEv() [[NUW2]]
   (void)&S::g;
   // CHECK: declare {{.*}} @_ZN1SIcE1gEv()
   // CHECK-NOT: [[NUW]]
@@ -116,12 +116,15 @@ void j() {
   // CHECK: declare {{.*}} @_ZN6NestedIiE1fILb1EcEEvv(
   // CHECK-NOT: [[NUW]]

[PATCH] D14935: Fix nodefaultlibs/nostdlib check

2015-11-24 Thread Nirav Dave via cfe-commits
niravd created this revision.
niravd added reviewers: dougk, jyknight.
niravd added subscribers: cfe-commits, rsmith.

Checks for nostdlib should also always check nodefaultlibs or nostartfiles as 
appropriate. Clang Driver misses a case

http://reviews.llvm.org/D14935

Files:
  lib/Driver/Driver.cpp
  test/Driver/nodefaultlib_stdc.c

Index: test/Driver/nodefaultlib_stdc.c
===
--- /dev/null
+++ test/Driver/nodefaultlib_stdc.c
@@ -0,0 +1,3 @@
+// RUN: %clang -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck 
%s
+// CHECK-NOT: "-lc++"
+// CHECK: "-lstdc++"
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their 
functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, 
Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }


Index: test/Driver/nodefaultlib_stdc.c
===
--- /dev/null
+++ test/Driver/nodefaultlib_stdc.c
@@ -0,0 +1,3 @@
+// RUN: %clang -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck %s
+// CHECK-NOT: "-lc++"
+// CHECK: "-lstdc++"
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D14935: Fix nodefaultlibs/nostdlib check

2015-11-24 Thread Nirav Dave via cfe-commits
niravd updated this revision to Diff 41040.
niravd added a comment.

Fix review issues


http://reviews.llvm.org/D14935

Files:
  lib/Driver/Driver.cpp
  test/Driver/nodefaultlib.c

Index: test/Driver/nodefaultlib.c
===
--- test/Driver/nodefaultlib.c
+++ test/Driver/nodefaultlib.c
@@ -1,8 +1,10 @@
-// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
-// RUN: FileCheck < %t %s
-//
-// CHECK-NOT: start-group
-// CHECK-NOT: "-lgcc"
-// CHECK-NOT: "-lc"
-// CHECK: crtbegin
-// CHECK: crtend
+// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | 
FileCheck -check-prefix=TEST1 %s
+// TEST1-NOT: start-group
+// TEST1-NOT: "-lgcc"
+// TEST1-NOT: "-lc"
+// TEST1: crtbegin
+// TEST1: crtend
+
+// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs 
-lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s
+// TEST2-NOT: "-lc++"
+// TEST2: "-lstdc++"
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their 
functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, 
Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }


Index: test/Driver/nodefaultlib.c
===
--- test/Driver/nodefaultlib.c
+++ test/Driver/nodefaultlib.c
@@ -1,8 +1,10 @@
-// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
-// RUN: FileCheck < %t %s
-//
-// CHECK-NOT: start-group
-// CHECK-NOT: "-lgcc"
-// CHECK-NOT: "-lc"
-// CHECK: crtbegin
-// CHECK: crtend
+// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s
+// TEST1-NOT: start-group
+// TEST1-NOT: "-lgcc"
+// TEST1-NOT: "-lc"
+// TEST1: crtbegin
+// TEST1: crtend
+
+// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s
+// TEST2-NOT: "-lc++"
+// TEST2: "-lstdc++"
Index: lib/Driver/Driver.cpp
===
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r253990 - Fix rewrite of reserved library name in case of -nodefaultlibs

2015-11-24 Thread Nirav Dave via cfe-commits
Author: niravd
Date: Tue Nov 24 10:07:21 2015
New Revision: 253990

URL: http://llvm.org/viewvc/llvm-project?rev=253990&view=rev
Log:
Fix rewrite of reserved library name in case of -nodefaultlibs

The Driver only checked if nostdlib was set when deciding to add
reserved_lib_stdcxx, but as nostdlib is always exactly nodefaultlibs and
nostartfiles we should be checking one (clearly nodefaultlibs in the
case) as well. This appears to be the only such instance of this in the
codebase.

Differential Revision: http://reviews.llvm.org/D14935

Modified:
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/test/Driver/nodefaultlib.c

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=253990&r1=253989&r2=253990&view=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Tue Nov 24 10:07:21 2015
@@ -209,6 +209,7 @@ DerivedArgList *Driver::TranslateInputAr
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their 
functionality
@@ -252,7 +253,7 @@ DerivedArgList *Driver::TranslateInputAr
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, 
Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }

Modified: cfe/trunk/test/Driver/nodefaultlib.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/nodefaultlib.c?rev=253990&r1=253989&r2=253990&view=diff
==
--- cfe/trunk/test/Driver/nodefaultlib.c (original)
+++ cfe/trunk/test/Driver/nodefaultlib.c Tue Nov 24 10:07:21 2015
@@ -1,8 +1,10 @@
-// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
-// RUN: FileCheck < %t %s
-//
-// CHECK-NOT: start-group
-// CHECK-NOT: "-lgcc"
-// CHECK-NOT: "-lc"
-// CHECK: crtbegin
-// CHECK: crtend
+// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | 
FileCheck -check-prefix=TEST1 %s
+// TEST1-NOT: start-group
+// TEST1-NOT: "-lgcc"
+// TEST1-NOT: "-lc"
+// TEST1: crtbegin
+// TEST1: crtend
+
+// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs 
-lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s
+// TEST2-NOT: "-lc++"
+// TEST2: "-lstdc++"


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


Re: [PATCH] D14935: Fix rewrite of reserved library name in case of -nodefaultlibs

2015-11-24 Thread Nirav Dave via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL253990: Fix rewrite of reserved library name in case of 
-nodefaultlibs (authored by niravd).

Changed prior to commit:
  http://reviews.llvm.org/D14935?vs=41040&id=41052#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D14935

Files:
  cfe/trunk/lib/Driver/Driver.cpp
  cfe/trunk/test/Driver/nodefaultlib.c

Index: cfe/trunk/test/Driver/nodefaultlib.c
===
--- cfe/trunk/test/Driver/nodefaultlib.c
+++ cfe/trunk/test/Driver/nodefaultlib.c
@@ -1,8 +1,10 @@
-// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
-// RUN: FileCheck < %t %s
-//
-// CHECK-NOT: start-group
-// CHECK-NOT: "-lgcc"
-// CHECK-NOT: "-lc"
-// CHECK: crtbegin
-// CHECK: crtend
+// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | 
FileCheck -check-prefix=TEST1 %s
+// TEST1-NOT: start-group
+// TEST1-NOT: "-lgcc"
+// TEST1-NOT: "-lc"
+// TEST1: crtbegin
+// TEST1: crtend
+
+// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs 
-lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s
+// TEST2-NOT: "-lc++"
+// TEST2: "-lstdc++"
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their 
functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, 
Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }


Index: cfe/trunk/test/Driver/nodefaultlib.c
===
--- cfe/trunk/test/Driver/nodefaultlib.c
+++ cfe/trunk/test/Driver/nodefaultlib.c
@@ -1,8 +1,10 @@
-// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
-// RUN: FileCheck < %t %s
-//
-// CHECK-NOT: start-group
-// CHECK-NOT: "-lgcc"
-// CHECK-NOT: "-lc"
-// CHECK: crtbegin
-// CHECK: crtend
+// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s
+// TEST1-NOT: start-group
+// TEST1-NOT: "-lgcc"
+// TEST1-NOT: "-lc"
+// TEST1: crtbegin
+// TEST1: crtend
+
+// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s
+// TEST2-NOT: "-lc++"
+// TEST2: "-lstdc++"
Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -209,6 +209,7 @@
   DerivedArgList *DAL = new DerivedArgList(Args);
 
   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
+  bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
   for (Arg *A : Args) {
 // Unfortunately, we have to parse some forwarding options (-Xassembler,
 // -Xlinker, -Xpreprocessor) because we either integrate their functionality
@@ -252,7 +253,7 @@
   StringRef Value = A->getValue();
 
   // Rewrite unless -nostdlib is present.
-  if (!HasNostdlib && Value == "stdc++") {
+  if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
 DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
 continue;
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits