Re: r351159 - Revert alignment assumptions changes

2019-01-14 Thread Roman Lebedev via cfe-commits
Thank you for the revert.

On Tue, Jan 15, 2019 at 6:41 AM Vlad Tsyrklevich via cfe-commits
 wrote:
>
> Author: vlad.tsyrklevich
> Date: Mon Jan 14 19:38:02 2019
> New Revision: 351159
>
> URL: http://llvm.org/viewvc/llvm-project?rev=351159=rev
> Log:
> Revert alignment assumptions changes
>
> Revert r351104-6, r351109, r351110, r351119, r351134, and r351153. These
> changes fail on the sanitizer bots.
>
> Removed:
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
> cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp
> 
> cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
> cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp
> Modified:
> cfe/trunk/docs/ReleaseNotes.rst
> cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
> cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> cfe/trunk/lib/CodeGen/CGCall.cpp
> cfe/trunk/lib/CodeGen/CGExprScalar.cpp
> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
> cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> cfe/trunk/lib/CodeGen/CodeGenFunction.h
>
> Modified: cfe/trunk/docs/ReleaseNotes.rst
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=351159=351158=351159=diff
> ==
> --- cfe/trunk/docs/ReleaseNotes.rst (original)
> +++ cfe/trunk/docs/ReleaseNotes.rst Mon Jan 14 19:38:02 2019
> @@ -321,49 +321,6 @@ Undefined Behavior Sanitizer (UBSan)
>  * The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) has
>learned to sanitize compound assignment operators.
>
> -* ``alignment`` check has learned to sanitize the assume_aligned-like 
> attributes:
> -
> -  .. code-block:: c++
> -
> -  typedef char **__attribute__((align_value(1024))) aligned_char;
> -  struct ac_struct {
> -aligned_char a;
> -  };
> -  char **load_from_ac_struct(struct ac_struct *x) {
> -return x->a; // <- check that loaded 'a' is aligned
> -  }
> -
> -  char **passthrough(__attribute__((align_value(1024))) char **x) {
> -return x; // <- check the pointer passed as function argument
> -  }
> -
> -  char **__attribute__((alloc_align(2)))
> -  alloc_align(int size, unsigned long alignment);
> -
> -  char **caller(int size) {
> -return alloc_align(size, 1024); // <- check returned pointer
> -  }
> -
> -  char **__attribute__((assume_aligned(1024))) get_ptr();
> -
> -  char **caller2() {
> -return get_ptr(); // <- check returned pointer
> -  }
> -
> -  void *caller3(char **x) {
> -return __builtin_assume_aligned(x, 1024);  // <- check returned 
> pointer
> -  }
> -
> -  void *caller4(char **x, unsigned long offset) {
> -return __builtin_assume_aligned(x, 1024, offset);  // <- check 
> returned pointer accounting for the offest
> -  }
> -
> -  void process(char *data, int width) {
> -  #pragma omp for simd aligned(data : 1024) // <- aligned clause 
> will be checked.
> -  for (int x = 0; x < width; x++)
> -  data[x] *= data[x];
> -  }
> -
>  Core Analysis Improvements
>  ==
>
>
> Modified: cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UndefinedBehaviorSanitizer.rst?rev=351159=351158=351159=diff
> ==
> --- cfe/trunk/docs/UndefinedBehaviorSanitizer.rst (original)
> +++ cfe/trunk/docs/UndefinedBehaviorSanitizer.rst Mon Jan 14 19:38:02 2019
> @@ -72,7 +72,7 @@ Available checks
>  Available checks are:
>
>-  ``-fsanitize=alignment``: Use of a misaligned pointer or creation
> - of a misaligned reference. Also sanitizes assume_aligned-like 
> attributes.
> + of a misaligned reference.
>-  ``-fsanitize=bool``: Load of a ``bool`` value which is neither
>   ``true`` nor ``false``.
>-  ``-fsanitize=builtin``: Passing invalid values to compiler builtins.
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351159=351158=351159=diff
> 

r351164 - [WebAssembly] Support multilibs for wasm32 and add a wasm OS that uses it

2019-01-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jan 14 22:58:16 2019
New Revision: 351164

URL: http://llvm.org/viewvc/llvm-project?rev=351164=rev
Log:
[WebAssembly] Support multilibs for wasm32 and add a wasm OS that uses it

This adds support for multilib paths for wasm32 targets, following
[Debian's Multiarch conventions], and also adds an experimental OS name in
order to test it. 

[Debian's Multiarch conventions]: https://wiki.debian.org/Multiarch/

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

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Driver/wasm-toolchain.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=351164=351163=351164=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Mon Jan 14 22:58:16 2019
@@ -572,17 +572,19 @@ TargetInfo *AllocateTarget(const llvm::T
   case llvm::Triple::wasm32:
 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
-Triple.getOS() != llvm::Triple::UnknownOS ||
-Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
-!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
+!Triple.isOSBinFormatWasm())
+  return nullptr;
+if (Triple.getOS() != llvm::Triple::UnknownOS &&
+Triple.getOS() != llvm::Triple::COWS)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
   case llvm::Triple::wasm64:
 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
 Triple.getVendor() != llvm::Triple::UnknownVendor ||
-Triple.getOS() != llvm::Triple::UnknownOS ||
-Triple.getEnvironment() != llvm::Triple::UnknownEnvironment ||
-!(Triple.isOSBinFormatELF() || Triple.isOSBinFormatWasm()))
+!Triple.isOSBinFormatWasm())
+  return nullptr;
+if (Triple.getOS() != llvm::Triple::UnknownOS &&
+Triple.getOS() != llvm::Triple::COWS)
   return nullptr;
 return new WebAssemblyOSTargetInfo(Triple, Opts);
 

Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp?rev=351164=351163=351164=diff
==
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp Mon Jan 14 22:58:16 2019
@@ -24,6 +24,15 @@ using namespace llvm::opt;
 wasm::Linker::Linker(const ToolChain )
 : GnuTool("wasm::Linker", "lld", TC) {}
 
+/// Following the conventions in https://wiki.debian.org/Multiarch/Tuples,
+/// we remove the vendor field to form the multiarch triple.
+static std::string getMultiarchTriple(const Driver ,
+  const llvm::Triple ,
+  StringRef SysRoot) {
+return (TargetTriple.getArchName() + "-" +
+TargetTriple.getOSAndEnvironmentName()).str();
+}
+
 bool wasm::Linker::isLinkJob() const { return true; }
 
 bool wasm::Linker::hasIntegratedCPP() const { return false; }
@@ -75,7 +84,17 @@ WebAssembly::WebAssembly(const Driver 
 
   getProgramPaths().push_back(getDriver().getInstalledDir());
 
-  getFilePaths().push_back(getDriver().SysRoot + "/lib");
+  if (getTriple().getOS() == llvm::Triple::UnknownOS) {
+// Theoretically an "unknown" OS should mean no standard libraries, however
+// it could also mean that a custom set of libraries is in use, so just add
+// /lib to the search path. Disable multiarch in this case, to discourage
+// paths containing "unknown" from acquiring meanings.
+getFilePaths().push_back(getDriver().SysRoot + "/lib");
+  } else {
+const std::string MultiarchTriple =
+getMultiarchTriple(getDriver(), Triple, getDriver().SysRoot);
+getFilePaths().push_back(getDriver().SysRoot + "/lib/" + MultiarchTriple);
+  }
 }
 
 bool WebAssembly::IsMathErrnoDefault() const { return false; }
@@ -124,16 +143,29 @@ WebAssembly::GetCXXStdlibType(const ArgL
 
 void WebAssembly::AddClangSystemIncludeArgs(const ArgList ,
 ArgStringList ) const {
-  if (!DriverArgs.hasArg(options::OPT_nostdinc))
+  if (!DriverArgs.hasArg(options::OPT_nostdinc)) {
+if (getTriple().getOS() != llvm::Triple::UnknownOS) {
+  const std::string MultiarchTriple =
+  getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
+  addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include/" 
+ MultiarchTriple);
+}
 addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include");
+  }
 }
 
 void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList ,

[PATCH] D55447: [Sema] Fix Modified Type in address_space AttributedType

2019-01-14 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan updated this revision to Diff 181721.

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55447/new/

https://reviews.llvm.org/D55447

Files:
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/Type.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/address_space_attribute.cpp
  clang/tools/libclang/CXType.cpp

Index: clang/tools/libclang/CXType.cpp
===
--- clang/tools/libclang/CXType.cpp
+++ clang/tools/libclang/CXType.cpp
@@ -129,7 +129,13 @@
 // Handle attributed types as the original type
 if (auto *ATT = T->getAs()) {
   if (!(TU->ParsingOptions & CXTranslationUnit_IncludeAttributedTypes)) {
-return MakeCXType(ATT->getModifiedType(), TU);
+// In the event we have an ObjCKindOf, we want to return the modified
+// type, which is an ObjCInterface instead of the equivalent type, which
+// is an ObjCObject. Either way, we do not include the attribute.
+QualType ResultTy = ATT->getAttrKind() == attr::ObjCKindOf
+? ATT->getModifiedType()
+: ATT->getEquivalentType();
+return MakeCXType(ResultTy, TU);
   }
 }
 // Handle paren types as the original type
Index: clang/test/AST/address_space_attribute.cpp
===
--- /dev/null
+++ clang/test/AST/address_space_attribute.cpp
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 %s -ast-dump | FileCheck %s
+
+// Veryify the ordering of the address_space attribute still comes before the
+// type whereas other attributes are still printed after.
+
+template 
+void func() {
+  // CHECK: VarDecl {{.*}} x '__attribute__((address_space(1))) int *'
+  __attribute__((address_space(1))) int *x;
+
+  // CHECK: VarDecl {{.*}} a 'int * __attribute__((noderef))'
+  int __attribute__((noderef)) * a;
+
+  // CHECK: VarDecl {{.*}} y '__attribute__((address_space(2))) int *'
+  __attribute__((address_space(I))) int *y;
+
+  // CHECK: VarDecl {{.*}} z '__attribute__((address_space(3))) int *'
+  [[clang::address_space(3)]] int *z;
+}
+
+void func2() {
+  func<2>();
+}
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5756,28 +5756,27 @@
 // Type Attribute Processing
 //===--===//
 
-/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression
-/// is uninstantiated. If instantiated it will apply the appropriate address space
-/// to the type. This function allows dependent template variables to be used in
-/// conjunction with the address_space attribute
-QualType Sema::BuildAddressSpaceAttr(QualType , Expr *AddrSpace,
- SourceLocation AttrLoc) {
+/// Build an AddressSpace index from a constant expression and diagnose any
+/// errors related to invalid address_spaces. Returns true on successfully
+/// building an AddressSpace index.
+static bool BuildAddressSpaceIndex(Sema , LangAS ,
+   const Expr *AddrSpace,
+   SourceLocation AttrLoc) {
   if (!AddrSpace->isValueDependent()) {
-
 llvm::APSInt addrSpace(32);
-if (!AddrSpace->isIntegerConstantExpr(addrSpace, Context)) {
-  Diag(AttrLoc, diag::err_attribute_argument_type)
+if (!AddrSpace->isIntegerConstantExpr(addrSpace, S.Context)) {
+  S.Diag(AttrLoc, diag::err_attribute_argument_type)
   << "'address_space'" << AANT_ArgumentIntegerConstant
   << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
 // Bounds checking.
 if (addrSpace.isSigned()) {
   if (addrSpace.isNegative()) {
-Diag(AttrLoc, diag::err_attribute_address_space_negative)
+S.Diag(AttrLoc, diag::err_attribute_address_space_negative)
 << AddrSpace->getSourceRange();
-return QualType();
+return false;
   }
   addrSpace.setIsSigned(false);
 }
@@ -5786,14 +5785,28 @@
 max =
 Qualifiers::MaxAddressSpace - (unsigned)LangAS::FirstTargetAddressSpace;
 if (addrSpace > max) {
-  Diag(AttrLoc, diag::err_attribute_address_space_too_high)
+  S.Diag(AttrLoc, diag::err_attribute_address_space_too_high)
   << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
-LangAS ASIdx =
+ASIdx =
 getLangASFromTargetAS(static_cast(addrSpace.getZExtValue()));
+return true;
+  }
 
+  // Default value for DependentAddressSpaceTypes
+  ASIdx = LangAS::Default;
+  return true;
+}
+
+/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression
+/// is uninstantiated. If instantiated it will apply the appropriate address
+/// 

[PATCH] D55447: [Sema] Fix Modified Type in address_space AttributedType

2019-01-14 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan updated this revision to Diff 181720.

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55447/new/

https://reviews.llvm.org/D55447

Files:
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/Type.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/address_space_attribute.cpp
  clang/tools/libclang/CXType.cpp

Index: clang/tools/libclang/CXType.cpp
===
--- clang/tools/libclang/CXType.cpp
+++ clang/tools/libclang/CXType.cpp
@@ -126,10 +126,18 @@
   CXTypeKind TK = CXType_Invalid;
 
   if (TU && !T.isNull()) {
+ASTContext  = cxtu::getASTUnit(TU)->getASTContext();
+
 // Handle attributed types as the original type
 if (auto *ATT = T->getAs()) {
   if (!(TU->ParsingOptions & CXTranslationUnit_IncludeAttributedTypes)) {
-return MakeCXType(ATT->getModifiedType(), TU);
+// In the event we have an ObjCKindOf, we want to return the modified
+// type, which is an ObjCInterface instead of the equivalent type, which
+// is an ObjCObject. Either way, we do not include the attribute.
+QualType ResultTy = ATT->getAttrKind() == attr::ObjCKindOf
+? ATT->getModifiedType()
+: ATT->getEquivalentType();
+return MakeCXType(ResultTy, TU);
   }
 }
 // Handle paren types as the original type
@@ -137,7 +145,6 @@
   return MakeCXType(PTT->getInnerType(), TU);
 }
 
-ASTContext  = cxtu::getASTUnit(TU)->getASTContext();
 if (Ctx.getLangOpts().ObjC) {
   QualType UnqualT = T.getUnqualifiedType();
   if (Ctx.isObjCIdType(UnqualT))
Index: clang/test/AST/address_space_attribute.cpp
===
--- /dev/null
+++ clang/test/AST/address_space_attribute.cpp
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 %s -ast-dump | FileCheck %s
+
+// Veryify the ordering of the address_space attribute still comes before the
+// type whereas other attributes are still printed after.
+
+template 
+void func() {
+  // CHECK: VarDecl {{.*}} x '__attribute__((address_space(1))) int *'
+  __attribute__((address_space(1))) int *x;
+
+  // CHECK: VarDecl {{.*}} a 'int * __attribute__((noderef))'
+  int __attribute__((noderef)) * a;
+
+  // CHECK: VarDecl {{.*}} y '__attribute__((address_space(2))) int *'
+  __attribute__((address_space(I))) int *y;
+
+  // CHECK: VarDecl {{.*}} z '__attribute__((address_space(3))) int *'
+  [[clang::address_space(3)]] int *z;
+}
+
+void func2() {
+  func<2>();
+}
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5756,28 +5756,27 @@
 // Type Attribute Processing
 //===--===//
 
-/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression
-/// is uninstantiated. If instantiated it will apply the appropriate address space
-/// to the type. This function allows dependent template variables to be used in
-/// conjunction with the address_space attribute
-QualType Sema::BuildAddressSpaceAttr(QualType , Expr *AddrSpace,
- SourceLocation AttrLoc) {
+/// Build an AddressSpace index from a constant expression and diagnose any
+/// errors related to invalid address_spaces. Returns true on successfully
+/// building an AddressSpace index.
+static bool BuildAddressSpaceIndex(Sema , LangAS ,
+   const Expr *AddrSpace,
+   SourceLocation AttrLoc) {
   if (!AddrSpace->isValueDependent()) {
-
 llvm::APSInt addrSpace(32);
-if (!AddrSpace->isIntegerConstantExpr(addrSpace, Context)) {
-  Diag(AttrLoc, diag::err_attribute_argument_type)
+if (!AddrSpace->isIntegerConstantExpr(addrSpace, S.Context)) {
+  S.Diag(AttrLoc, diag::err_attribute_argument_type)
   << "'address_space'" << AANT_ArgumentIntegerConstant
   << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
 // Bounds checking.
 if (addrSpace.isSigned()) {
   if (addrSpace.isNegative()) {
-Diag(AttrLoc, diag::err_attribute_address_space_negative)
+S.Diag(AttrLoc, diag::err_attribute_address_space_negative)
 << AddrSpace->getSourceRange();
-return QualType();
+return false;
   }
   addrSpace.setIsSigned(false);
 }
@@ -5786,14 +5785,28 @@
 max =
 Qualifiers::MaxAddressSpace - (unsigned)LangAS::FirstTargetAddressSpace;
 if (addrSpace > max) {
-  Diag(AttrLoc, diag::err_attribute_address_space_too_high)
+  S.Diag(AttrLoc, diag::err_attribute_address_space_too_high)
   << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
-

[PATCH] D55447: [Sema] Fix Modified Type in address_space AttributedType

2019-01-14 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan marked an inline comment as done.
leonardchan added inline comments.



Comment at: clang/tools/libclang/CXType.cpp:132
+  if (!(TU->ParsingOptions & CXTranslationUnit_IncludeAttributedTypes) &&
+  ATT->getAttrKind() != attr::AddressSpace) {
 return MakeCXType(ATT->getModifiedType(), TU);

aaron.ballman wrote:
> leonardchan wrote:
> > aaron.ballman wrote:
> > > leonardchan wrote:
> > > > aaron.ballman wrote:
> > > > > leonardchan wrote:
> > > > > > aaron.ballman wrote:
> > > > > > > This change seems surprising -- if the parsing options say the 
> > > > > > > caller does not want attributed types, why are we returning one 
> > > > > > > anyway for address space?
> > > > > > This has to do with ensuring `clang_getAddressSpace` still returns 
> > > > > > the proper address_space. It does this by essentially checking the 
> > > > > > qualifiers of the type, which we now attach to the `AttributedType` 
> > > > > > whereas before it was attached to the modified type.
> > > > > > 
> > > > > > This extra condition is necessary for ensuring that calling 
> > > > > > `clang_getAddressSpace` points to the qualified AttributedType 
> > > > > > instead of the unqualified modified type.
> > > > > My fear is that this will be breaking assumptions in third-party 
> > > > > code. If someone disables `CXTranslationUnit_IncludeAttributedTypes`, 
> > > > > they are unlikely to expect to receive an `AttributedType` and may 
> > > > > react poorly to it.
> > > > Instead check if the type is address_space attributed and apply the 
> > > > qualifiers the modified type.
> > > Sure, they can always modify their code to handle it gracefully, but it's 
> > > a silent, breaking change to a somewhat stable API which is why I was 
> > > prodding about it.
> > > 
> > > After talking with @rsmith, we're thinking the correct change here is to 
> > > return the attributed type when the user asks for it, but return the 
> > > equivalent type rather than the modified type if the user doesn't want 
> > > attribute sugar (for all attributes, not just address spaces). This way, 
> > > when a user asks for CXType for one of these, they always get a correct 
> > > type but sometimes it has attribute type sugar and sometimes it doesn't, 
> > > depending on the parsing options.
> > > 
> > > This is still a silent, breaking change in behavior, which is 
> > > unfortunate. It should probably come with a mention in the release notes 
> > > about the change to the API and some unit tests as well.
> > Ok. In the case of qualifiers then, should the equivalent type still 
> > contain the address_space qualifiers when creating the AttributedType?
> I believe so, yes -- that would ensure it's the minimally desugared type 
> which the type is canonically equivalent to.
Sorry for the holdup. So for an AddressSpace AttributedType, we attach the 
qualifiers only to the equivalent type.

As for this though, the only problem I ran into with returning the equivalent 
type is for AttributedTypes with `attr::ObjCKindOf`, a test expects returning 
the modified type which is an `ObjCInterface` instead of the equivalent type 
which is an `ObjCObject`. The test itself just tests printing of a type, but 
I'm not sure how significant or intentional printing this specific way was.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55447/new/

https://reviews.llvm.org/D55447



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


[PATCH] D55447: [Sema] Fix Modified Type in address_space AttributedType

2019-01-14 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan updated this revision to Diff 181719.

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55447/new/

https://reviews.llvm.org/D55447

Files:
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/Type.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/address_space_attribute.cpp
  clang/tools/libclang/CXType.cpp

Index: clang/tools/libclang/CXType.cpp
===
--- clang/tools/libclang/CXType.cpp
+++ clang/tools/libclang/CXType.cpp
@@ -126,10 +126,17 @@
   CXTypeKind TK = CXType_Invalid;
 
   if (TU && !T.isNull()) {
+ASTContext  = cxtu::getASTUnit(TU)->getASTContext();
+
 // Handle attributed types as the original type
 if (auto *ATT = T->getAs()) {
   if (!(TU->ParsingOptions & CXTranslationUnit_IncludeAttributedTypes)) {
-return MakeCXType(ATT->getModifiedType(), TU);
+// In the event we have an ObjCKindOf, we want to return the modified
+// type, which is an ObjCInterface instead of the equivalent type, which
+// is an ObjCObject. Either way, we do not include the attribute.
+QualType ResultTy = ATT->getAttrKind() == attr::ObjCKindOf
+? ATT->getModifiedType() : ATT->getEquivalentType();
+return MakeCXType(ResultTy, TU);
   }
 }
 // Handle paren types as the original type
@@ -137,7 +144,6 @@
   return MakeCXType(PTT->getInnerType(), TU);
 }
 
-ASTContext  = cxtu::getASTUnit(TU)->getASTContext();
 if (Ctx.getLangOpts().ObjC) {
   QualType UnqualT = T.getUnqualifiedType();
   if (Ctx.isObjCIdType(UnqualT))
Index: clang/test/AST/address_space_attribute.cpp
===
--- /dev/null
+++ clang/test/AST/address_space_attribute.cpp
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 %s -ast-dump | FileCheck %s
+
+// Veryify the ordering of the address_space attribute still comes before the
+// type whereas other attributes are still printed after.
+
+template 
+void func() {
+  // CHECK: VarDecl {{.*}} x '__attribute__((address_space(1))) int *'
+  __attribute__((address_space(1))) int *x;
+
+  // CHECK: VarDecl {{.*}} a 'int * __attribute__((noderef))'
+  int __attribute__((noderef)) * a;
+
+  // CHECK: VarDecl {{.*}} y '__attribute__((address_space(2))) int *'
+  __attribute__((address_space(I))) int *y;
+
+  // CHECK: VarDecl {{.*}} z '__attribute__((address_space(3))) int *'
+  [[clang::address_space(3)]] int *z;
+}
+
+void func2() {
+  func<2>();
+}
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5756,28 +5756,27 @@
 // Type Attribute Processing
 //===--===//
 
-/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression
-/// is uninstantiated. If instantiated it will apply the appropriate address space
-/// to the type. This function allows dependent template variables to be used in
-/// conjunction with the address_space attribute
-QualType Sema::BuildAddressSpaceAttr(QualType , Expr *AddrSpace,
- SourceLocation AttrLoc) {
+/// Build an AddressSpace index from a constant expression and diagnose any
+/// errors related to invalid address_spaces. Returns true on successfully
+/// building an AddressSpace index.
+static bool BuildAddressSpaceIndex(Sema , LangAS ,
+   const Expr *AddrSpace,
+   SourceLocation AttrLoc) {
   if (!AddrSpace->isValueDependent()) {
-
 llvm::APSInt addrSpace(32);
-if (!AddrSpace->isIntegerConstantExpr(addrSpace, Context)) {
-  Diag(AttrLoc, diag::err_attribute_argument_type)
+if (!AddrSpace->isIntegerConstantExpr(addrSpace, S.Context)) {
+  S.Diag(AttrLoc, diag::err_attribute_argument_type)
   << "'address_space'" << AANT_ArgumentIntegerConstant
   << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
 // Bounds checking.
 if (addrSpace.isSigned()) {
   if (addrSpace.isNegative()) {
-Diag(AttrLoc, diag::err_attribute_address_space_negative)
+S.Diag(AttrLoc, diag::err_attribute_address_space_negative)
 << AddrSpace->getSourceRange();
-return QualType();
+return false;
   }
   addrSpace.setIsSigned(false);
 }
@@ -5786,14 +5785,28 @@
 max =
 Qualifiers::MaxAddressSpace - (unsigned)LangAS::FirstTargetAddressSpace;
 if (addrSpace > max) {
-  Diag(AttrLoc, diag::err_attribute_address_space_too_high)
+  S.Diag(AttrLoc, diag::err_attribute_address_space_too_high)
   << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();
-  return QualType();
+  return false;
 }
 
-LangAS ASIdx =
+ASIdx =
 

[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Phabricator via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351160: [X86] Make _xgetbv/_xsetbv on non-windows platforms 
(authored by ctopper, committed by ).

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56686/new/

https://reviews.llvm.org/D56686

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/immintrin.h
  lib/Headers/intrin.h
  lib/Headers/xsaveintrin.h
  test/CodeGen/builtins-x86.c
  test/CodeGen/x86_32-xsave.c
  test/CodeGen/x86_64-xsave.c
  test/Headers/ms-intrin.cpp

Index: include/clang/Basic/BuiltinsX86.def
===
--- include/clang/Basic/BuiltinsX86.def
+++ include/clang/Basic/BuiltinsX86.def
@@ -693,6 +693,10 @@
 // XSAVE
 TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
 TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xgetbv, "ULLiUi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xgetbv, "UWiUi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
+TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiULLi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xsetbv, "vUiUWi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
 TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
 TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
 TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")
Index: test/CodeGen/x86_32-xsave.c
===
--- test/CodeGen/x86_32-xsave.c
+++ test/CodeGen/x86_32-xsave.c
@@ -1,6 +1,9 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 
+// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XGETBV
+// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSETBV
+
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 
@@ -10,9 +13,15 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 
+// Don't include mm_malloc.h, it's system specific.
+#define __MM_MALLOC_H
+#include 
+
 void test() {
-  unsigned long long tmp_ULLi = 0;
-  void*  tmp_vp = 0;
+  unsigned long long tmp_ULLi;
+  unsigned int   tmp_Ui;
+  void*  tmp_vp;
+  tmp_ULLi = 0; tmp_Ui = 0; tmp_vp = 0;
 
 #ifdef TEST_XSAVE
 // XSAVE: [[tmp_vp_1:%[0-9a-zA-Z]+]] = load i8*, i8** %tmp_vp, align 4
@@ -30,6 +39,12 @@
 // XSAVE: [[low32_3:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_3]] to i32
 // XSAVE: call void @llvm.x86.xrstor(i8* [[tmp_vp_3]], i32 [[high32_3]], i32 [[low32_3]])
   (void)__builtin_ia32_xrstor(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xsave
+  (void)_xsave(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xrstor
+  (void)_xrstor(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEOPT
@@ -40,6 +55,9 @@
 // XSAVEOPT: [[low32_1:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_1]] to i32
 // XSAVEOPT: call void @llvm.x86.xsaveopt(i8* [[tmp_vp_1]], i32 [[high32_1]], i32 [[low32_1]])
   (void)__builtin_ia32_xsaveopt(tmp_vp, tmp_ULLi);
+  
+// XSAVEOPT: call void @llvm.x86.xsaveopt
+  (void)_xsaveopt(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEC
@@ -50,6 +68,9 @@
 // XSAVEC: [[low32_1:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_1]] to i32
 // XSAVEC: call void @llvm.x86.xsavec(i8* [[tmp_vp_1]], i32 [[high32_1]], i32 [[low32_1]])
   (void)__builtin_ia32_xsavec(tmp_vp, tmp_ULLi);
+ 
+// XSAVEC: call void @llvm.x86.xsavec 
+  (void)_xsavec(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVES
@@ -68,5 +89,34 @@
 // XSAVES: [[low32_3:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_3]] to i32
 // XSAVES: call void @llvm.x86.xrstors(i8* [[tmp_vp_3]], i32 [[high32_3]], i32 [[low32_3]])
   (void)__builtin_ia32_xrstors(tmp_vp, tmp_ULLi);
+  
+// XSAVES: call void @llvm.x86.xsaves
+  (void)_xsaves(tmp_vp, tmp_ULLi); 
+
+// XSAVES: call void @llvm.x86.xrstors
+  (void)_xrstors(tmp_vp, tmp_ULLi);
+#endif
+

r351160 - [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Mon Jan 14 21:03:18 2019
New Revision: 351160

URL: http://llvm.org/viewvc/llvm-project?rev=351160=rev
Log:
[X86] Make _xgetbv/_xsetbv on non-windows platforms

Summary:
This patch attempts to redo what was tried in r278783, but was reverted.

These intrinsics should be available on non-windows platforms with "xsave" 
feature check. But on Windows platforms they shouldn't have feature check since 
that's how MSVC behaves.

To accomplish this I've added a MS builtin with no feature check. And a normal 
gcc builtin with a feature check. When _MSC_VER is not defined _xgetbv/_xsetbv 
will be macros pointing to the gcc builtin name.

I've moved the forward declarations from intrin.h to immintrin.h to match the 
MSDN documentation and used that as the header file for the MS builtin.

I'm not super happy with this implementation, and I'm open to suggestions for 
better ways to do it.

Reviewers: rnk, RKSimon, spatel

Reviewed By: rnk

Subscribers: cfe-commits

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

Modified:
cfe/trunk/include/clang/Basic/BuiltinsX86.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/Headers/immintrin.h
cfe/trunk/lib/Headers/intrin.h
cfe/trunk/lib/Headers/xsaveintrin.h
cfe/trunk/test/CodeGen/builtins-x86.c
cfe/trunk/test/CodeGen/x86_32-xsave.c
cfe/trunk/test/CodeGen/x86_64-xsave.c
cfe/trunk/test/Headers/ms-intrin.cpp

Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=351160=351159=351160=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Mon Jan 14 21:03:18 2019
@@ -693,6 +693,10 @@ TARGET_BUILTIN(__builtin_ia32_fxsave, "v
 // XSAVE
 TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
 TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xgetbv, "ULLiUi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xgetbv, "UWiUi", "nh", "immintrin.h", ALL_MS_LANGUAGES, 
"")
+TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiULLi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xsetbv, "vUiUWi", "nh", "immintrin.h", 
ALL_MS_LANGUAGES, "")
 TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
 TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
 TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351160=351159=351160=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Jan 14 21:03:18 2019
@@ -9831,7 +9831,9 @@ Value *CodeGenFunction::EmitX86BuiltinEx
   case X86::BI__builtin_ia32_xsavec:
   case X86::BI__builtin_ia32_xsavec64:
   case X86::BI__builtin_ia32_xsaves:
-  case X86::BI__builtin_ia32_xsaves64: {
+  case X86::BI__builtin_ia32_xsaves64:
+  case X86::BI__builtin_ia32_xsetbv:
+  case X86::BI_xsetbv: {
 Intrinsic::ID ID;
 #define INTRINSIC_X86_XSAVE_ID(NAME) \
 case X86::BI__builtin_ia32_##NAME: \
@@ -9851,6 +9853,10 @@ Value *CodeGenFunction::EmitX86BuiltinEx
 INTRINSIC_X86_XSAVE_ID(xsavec64);
 INTRINSIC_X86_XSAVE_ID(xsaves);
 INTRINSIC_X86_XSAVE_ID(xsaves64);
+INTRINSIC_X86_XSAVE_ID(xsetbv);
+case X86::BI_xsetbv:
+  ID = Intrinsic::x86_xsetbv;
+  break;
 }
 #undef INTRINSIC_X86_XSAVE_ID
 Value *Mhi = Builder.CreateTrunc(
@@ -9860,6 +9866,9 @@ Value *CodeGenFunction::EmitX86BuiltinEx
 Ops.push_back(Mlo);
 return Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
   }
+  case X86::BI__builtin_ia32_xgetbv:
+  case X86::BI_xgetbv:
+return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_xgetbv), Ops);
   case X86::BI__builtin_ia32_storedqudi128_mask:
   case X86::BI__builtin_ia32_storedqusi128_mask:
   case X86::BI__builtin_ia32_storedquhi128_mask:

Modified: cfe/trunk/lib/Headers/immintrin.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/immintrin.h?rev=351160=351159=351160=diff
==
--- cfe/trunk/lib/Headers/immintrin.h (original)
+++ cfe/trunk/lib/Headers/immintrin.h Mon Jan 14 21:03:18 2019
@@ -378,9 +378,8 @@ _storebe_i64(void * __P, long long __D)
 #include 
 #endif
 
-#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVE__)
+/* No feature check desired due to internal MSC_VER checks */
 #include 
-#endif
 
 #if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEOPT__)
 #include 

Modified: cfe/trunk/lib/Headers/intrin.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/intrin.h?rev=351160=351159=351160=diff
==
--- 

[PATCH] D56554: [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK

2019-01-14 Thread Michał Górny via Phabricator via cfe-commits
mgorny marked 2 inline comments as done.
mgorny added a comment.

@ruiu, what do you think? The current logic forces some precedence, i.e. if you 
pass `-z nognustack`, further `-z {no,}execstack` are ignored. I suppose we 
could just force passing `-z nognustack` as last option clang-wise.


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56554/new/

https://reviews.llvm.org/D56554



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


[PATCH] D56554: [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK

2019-01-14 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

Should `ZNognustack` and `ZExecstack` be unified to a tri-state enum variable?


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56554/new/

https://reviews.llvm.org/D56554



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


r351159 - Revert alignment assumptions changes

2019-01-14 Thread Vlad Tsyrklevich via cfe-commits
Author: vlad.tsyrklevich
Date: Mon Jan 14 19:38:02 2019
New Revision: 351159

URL: http://llvm.org/viewvc/llvm-project?rev=351159=rev
Log:
Revert alignment assumptions changes

Revert r351104-6, r351109, r351110, r351119, r351134, and r351153. These
changes fail on the sanitizer bots.

Removed:

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp
Modified:
cfe/trunk/docs/ReleaseNotes.rst
cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/CodeGen/CGCall.cpp
cfe/trunk/lib/CodeGen/CGExprScalar.cpp
cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h

Modified: cfe/trunk/docs/ReleaseNotes.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=351159=351158=351159=diff
==
--- cfe/trunk/docs/ReleaseNotes.rst (original)
+++ cfe/trunk/docs/ReleaseNotes.rst Mon Jan 14 19:38:02 2019
@@ -321,49 +321,6 @@ Undefined Behavior Sanitizer (UBSan)
 * The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) has
   learned to sanitize compound assignment operators.
 
-* ``alignment`` check has learned to sanitize the assume_aligned-like 
attributes:
-
-  .. code-block:: c++
-
-  typedef char **__attribute__((align_value(1024))) aligned_char;
-  struct ac_struct {
-aligned_char a;
-  };
-  char **load_from_ac_struct(struct ac_struct *x) {
-return x->a; // <- check that loaded 'a' is aligned
-  }
-
-  char **passthrough(__attribute__((align_value(1024))) char **x) {
-return x; // <- check the pointer passed as function argument
-  }
-
-  char **__attribute__((alloc_align(2)))
-  alloc_align(int size, unsigned long alignment);
-
-  char **caller(int size) {
-return alloc_align(size, 1024); // <- check returned pointer
-  }
-
-  char **__attribute__((assume_aligned(1024))) get_ptr();
-
-  char **caller2() {
-return get_ptr(); // <- check returned pointer
-  }
-
-  void *caller3(char **x) {
-return __builtin_assume_aligned(x, 1024);  // <- check returned pointer
-  }
-
-  void *caller4(char **x, unsigned long offset) {
-return __builtin_assume_aligned(x, 1024, offset);  // <- check 
returned pointer accounting for the offest
-  }
-
-  void process(char *data, int width) {
-  #pragma omp for simd aligned(data : 1024) // <- aligned clause will 
be checked.
-  for (int x = 0; x < width; x++)
-  data[x] *= data[x];
-  }
-
 Core Analysis Improvements
 ==
 

Modified: cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UndefinedBehaviorSanitizer.rst?rev=351159=351158=351159=diff
==
--- cfe/trunk/docs/UndefinedBehaviorSanitizer.rst (original)
+++ cfe/trunk/docs/UndefinedBehaviorSanitizer.rst Mon Jan 14 19:38:02 2019
@@ -72,7 +72,7 @@ Available checks
 Available checks are:
 
   -  ``-fsanitize=alignment``: Use of a misaligned pointer or creation
- of a misaligned reference. Also sanitizes assume_aligned-like attributes.
+ of a misaligned reference.
   -  ``-fsanitize=bool``: Load of a ``bool`` value which is neither
  ``true`` nor ``false``.
   -  ``-fsanitize=builtin``: Passing invalid values to compiler builtins.

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351159=351158=351159=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Jan 14 19:38:02 2019
@@ -1904,17 +1904,15 @@ RValue CodeGenFunction::EmitBuiltinExpr(
 return RValue::get(Result);
   }
   case Builtin::BI__builtin_assume_aligned: {
-const Expr *Ptr = 

[PATCH] D56571: [RFC prototype] Implementation of asm-goto support in clang

2019-01-14 Thread Jennifer Yu via Phabricator via cfe-commits
jyu2 marked an inline comment as done.
jyu2 added inline comments.



Comment at: lib/Sema/SemaStmtAsm.cpp:470
+if (NS->isGCCAsmGoto() &&
+Exprs[ConstraintIdx]->getStmtClass() == Stmt::AddrLabelExprClass)
+  break;

efriedma wrote:
> jyu2 wrote:
> > efriedma wrote:
> > > jyu2 wrote:
> > > > jyu2 wrote:
> > > > > efriedma wrote:
> > > > > > jyu2 wrote:
> > > > > > > efriedma wrote:
> > > > > > > > jyu2 wrote:
> > > > > > > > > efriedma wrote:
> > > > > > > > > > This looks suspicious; an AddrLabelExpr could be an input 
> > > > > > > > > > or output, e.g. `"r"(&)`.
> > > > > > > > > Syntax for asm goto:
> > > > > > > > >  Syntax:
> > > > > > > > >asm [volatile] goto ( AssemblerTemplate
> > > > > > > > >:
> > > > > > > > >: InputOperands
> > > > > > > > >: Clobbers
> > > > > > > > >: GotoLabels)
> > > > > > > > > 
> > > > > > > > >  Only input is allowed.  Output is not allowed
> > > > > > > > > 
> > > > > > > > That doesn't really address my point here... ignore the "or 
> > > > > > > > output" part of the comment.
> > > > > > > Sorry did not realize that.  Thank you so much for catching that. 
> > > > > > >  Need to add other condition "ConstraintIdx > NS->getNumInputs() 
> > > > > > > - 1", change to :
> > > > > > > 
> > > > > > > if (NS->isGCCAsmGoto() && ConstraintIdx > NS->getNumInputs() - 1 
> > > > > > > &&
> > > > > > > Exprs[ConstraintIdx]->getStmtClass() == 
> > > > > > > Stmt::AddrLabelExprClass)
> > > > > > >   break;
> > > > > > > 
> > > > > > > Is this ok with you?  Thanks
> > > > > > That's the right idea. But I still see a few issues at that point:
> > > > > > 
> > > > > > 1. The AddrLabelExprClass check is redundant.
> > > > > > 2. "NS->getNumInputs() - 1" can overflow; probably should use 
> > > > > > "ConstraintIdx >= NS->getNumInputs()".
> > > > > > 3. "break" exits the loop completely (so it skips validating all 
> > > > > > constraints written after the label).
> > > > > > 4. The code needs to verify that the user correctly specified the 
> > > > > > "l" constraint modifier.
> > > > > Sorry not done yet.  
> > > > For you comment 4:
> > > > 
> > > > The code needs to verify that the user correctly specified the "l" 
> > > > constraint modifier.  We already emit error like following?
> > > > 
> > > > Do you mean, we need more checking here?  Thanks. 
> > > > 
> > > > n.c:4:35: error: unknown symbolic operand name in inline assembly string
> > > >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > > > ~~^~~
> > > > n.c:8:15: error: use of undeclared label 'error1'
> > > > : error1);
> > > > 
> > > > Test is:
> > > > int frob(int x)
> > > > {
> > > >   int y;
> > > >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > > > : /* No outputs. */
> > > > : "r"(x), "r"()
> > > > : "memory"
> > > > : error1);
> > > >   return y;
> > > > error:
> > > >   return -1;
> > > > }
> > > > 
> > > > 
> > > I mean, there needs to be a diagnostic for the following:
> > > 
> > > ```
> > > asm goto ("jne %h0"x);
> > > ```
> > > 
> > > On a related note, there should also be a diagnostic for the following 
> > > somewhere:
> > > 
> > > ```
> > > asm ("jne %l0"::"r"(0));
> > > ```
> > Hi Eli,
> > 
> > Thanks for your review.
> > 
> > For case:
> > asm goto ("jne %h0"x);
> > 
> > Without define label x, both clang and my current implementation give error 
> > of "use of undeclared label"
> > 
> > if x is defined: gcc give error 
> > asm_goto>!gcc
> > gcc n.c
> > n.c: Assembler messages:
> > n.c:4: Error: operand type mismatch for `jne'
> > 
> > My current implementation don't emit error.  I think this is need to be 
> > done in LLVM.  Am I right here?
> > 
> > For the case:
> > asm ("jne %l0"::"r"(0));
> > 
> > gcc don't allow any modifier 'l' with  asm stmt but it allows with asm 
> > goto.  Is that something you are look for?  Thanks.
> > 
> > So I add code in AST/Stmt.cpp to emit error.
> > .
> >  return diag::err_asm_invalid_escape;
> >   } else if (!this->isGCCAsmGoto() && EscapedChar == 'l' &&
> >  isDigit(*CurPtr)) {
> > DiagOffs = CurPtr-StrStart;
> > return diag::err_asm_invalid_operand_number;
> >   }
> > 
> For the first one, I was trying with Aarch64 gcc; I guess x86 doesn't emit 
> the same error?  `void f() { x: asm goto ("jne %i0"x);}` should be the 
> same for both.
> 
> > gcc don't allow any modifier 'l' with asm stmt but it allows with asm goto. 
> > Is that something you are look for? Thanks.
> 
> We should reject any use of the "l" modifier that does not point to a label 
> in the label list.  So we should also reject `void f(){x:asm goto ("jne 
> %l0"::"r"(&)::x);}`.
Hi Eli,

Thank you so much to point this out.  I add code for emit error 

[PATCH] D56429: fix python3 compability issue

2019-01-14 Thread rox via Phabricator via cfe-commits
roxma marked an inline comment as done.
roxma added inline comments.



Comment at: bindings/python/clang/cindex.py:2998
+for i,(name,contents) in enumerate(unsaved_files):
+if hasattr(contents, "read"):
+contents = contents.read()

serge-sans-paille wrote:
> serge-sans-paille wrote:
> > Why did you remove the FIXME comment?
> @roxma LGTM except this FIXME removal.
@serge-sans-paille

the `contents.read()` looks almost the same as line 2817.

It is better to keep the code consistent. The FIXME doesn't seem to be helpful.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56429/new/

https://reviews.llvm.org/D56429



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


[PATCH] D56571: [RFC prototype] Implementation of asm-goto support in clang

2019-01-14 Thread Jennifer Yu via Phabricator via cfe-commits
jyu2 updated this revision to Diff 181702.
jyu2 added a comment.

Add code to diagnostic error for use of the "l" modifier that does not point to 
a label in the label list.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56571/new/

https://reviews.llvm.org/D56571

Files:
  include/clang/AST/Expr.h
  include/clang/AST/ExprCXX.h
  include/clang/AST/ExprObjC.h
  include/clang/AST/Stmt.h
  include/clang/Basic/DiagnosticASTKinds.td
  include/clang/Basic/DiagnosticSemaKinds.td
  include/clang/Sema/Sema.h
  lib/AST/ASTImporter.cpp
  lib/AST/Stmt.cpp
  lib/AST/StmtPrinter.cpp
  lib/AST/StmtProfile.cpp
  lib/Analysis/CFG.cpp
  lib/CodeGen/CGStmt.cpp
  lib/CodeGen/CodeGenFunction.h
  lib/Parse/ParseStmtAsm.cpp
  lib/Sema/SemaStmtAsm.cpp
  lib/Sema/TreeTransform.h
  lib/Serialization/ASTReaderStmt.cpp
  lib/Serialization/ASTWriterStmt.cpp
  test/Analysis/asm-goto.cpp
  test/CodeGen/asm-goto.c
  test/CodeGen/asm.c
  test/CodeGen/inline-asm-mixed-style.c
  test/Coverage/c-language-features.inc
  test/PCH/asm.h
  test/Parser/asm-goto.c
  test/Parser/asm-goto.cpp
  test/Parser/asm.c
  test/Parser/asm.cpp
  test/Sema/asm.c
  test/Sema/inline-asm-validate-tmpl.cpp

Index: test/Sema/inline-asm-validate-tmpl.cpp
===
--- test/Sema/inline-asm-validate-tmpl.cpp
+++ test/Sema/inline-asm-validate-tmpl.cpp
@@ -23,3 +23,13 @@
 	asm("rol %1, %0" :"=r"(value): "I"(N + 1));
 }
 int	foo() { testc<2>(10); }
+
+// these should compile without error
+template  bool testd()
+{
+  __asm goto ("" : : : : lab);
+  return true;
+lab:
+  return false;
+}
+bool foox() { return testd<0> (); }
Index: test/Sema/asm.c
===
--- test/Sema/asm.c
+++ test/Sema/asm.c
@@ -295,3 +295,27 @@
   return r0 + r1;
 }
 
+void test18()
+{
+  // expected-error@+2 {{duplicate use of asm operand name "lab"}}
+  // expected-note@+1 {{asm operand name "lab" first referenced here}}
+  asm goto ("" : : : : lab, lab, lab2, lab);
+  // expected-error@+2 {{duplicate use of asm operand name "lab"}}
+  // expected-note@+1 {{asm operand name "lab" first referenced here}}
+  asm goto ("xorw %[lab], %[lab]; je %l[lab]" : : [lab] "i" (0) : : lab);
+lab:;
+lab2:;
+  int x,x1;
+  // expected-error@+2 {{duplicate use of asm operand name "lab"}}
+  // expected-note@+1 {{asm operand name "lab" first referenced here}}
+  asm ("" : [lab] "=r" (x),[lab] "+r" (x) : [lab1] "r" (x));
+  // expected-error@+2 {{duplicate use of asm operand name "lab"}}
+  // expected-note@+1 {{asm operand name "lab" first referenced here}}
+  asm ("" : [lab] "=r" (x1) : [lab] "r" (x));
+  // expected-error@+1 {{invalid operand number which isn't point to a goto label in asm string}}
+  asm ("jne %l0"::"r"(&));
+  // expected-error@+1 {{invalid operand number in inline asm string}}
+  asm ("jne %l0":::);
+  // expected-error@+1 {{invalid operand number which isn't point to a goto label in asm string}}
+  asm goto ("jne %l0"::"r"(x)::lab);
+}
Index: test/Parser/asm.cpp
===
--- test/Parser/asm.cpp
+++ test/Parser/asm.cpp
@@ -7,3 +7,28 @@
 int foo5 asm (U"bar5"); // expected-error {{cannot use unicode string literal in 'asm'}}
 int foo6 asm ("bar6"_x); // expected-error {{string literal with user-defined suffix cannot be used here}}
 int foo6 asm ("" L"bar7"); // expected-error {{cannot use wide string literal in 'asm'}}
+
+int zoo ()
+{
+  int x,cond,*e;
+  // expected-error@+1 {{expected ')'}}
+  asm ("mov %[e], %[e]" : : [e] "rm" (*e)::a)
+  // expected-error@+1  {{expected ':'}}
+  asm goto ("decl %0; jnz %l[a]" :"=r"(x): "m"(x) : "memory" : a);
+  // expected-error@+1 {{expected identifie}}
+  asm goto ("decl %0;" :: "m"(x) : "memory" : );
+  // expected-error@+1  {{expected ':'}}
+  asm goto ("decl %0;" :: "m"(x) : "memory" );
+  // expected-error@+1 {{use of undeclared label 'x'}}
+  asm goto ("decl %0;" :: "m"(x) : "memory" :x);
+  // expected-error@+1 {{use of undeclared label 'b'}}
+  asm goto ("decl %0;" :: "m"(x) : "memory" :b);
+  // expected-error@+1 {{invalid operand number in inline asm string}}
+  asm goto ("testl %0, %0; jne %l3;" :: "r"(cond)::label_true, loop)
+  // expected-error@+1 {{unknown symbolic operand name in inline assembly string}}
+  asm goto ("decl %0; jnz %l[b]" :: "m"(x) : "memory" : a);
+label_true:
+loop:
+a:
+  return 0;
+}
Index: test/Parser/asm.c
===
--- test/Parser/asm.c
+++ test/Parser/asm.c
@@ -16,6 +16,31 @@
   asm _Atomic (""); // expected-warning {{ignored _Atomic qualifier on asm}}
 }
 
+int zoo ()
+{
+  int x,cond,*e;
+  // expected-error@+1 {{expected ')'}}
+  asm ("mov %[e], %[e]" : : [e] "rm" (*e)::a)
+  // expected-error@+1 {{expected ':'}}
+  asm goto ("decl %0; jnz %l[a]" :"=r"(x): "m"(x) : "memory" : a);
+  // expected-error@+1 {{expected identifie}}
+  asm goto ("decl %0;" :: "m"(x) : "memory" : 

[PATCH] D56555: Add Attribute to define nonlazy objc classes

2019-01-14 Thread Joe via Phabricator via cfe-commits
joedaniels29 added a comment.

On second thought, I have addressed everything, I think.

> clang/test/SemaObjC/attr-objc-non-lazy.m

Aaron, would you mind taking another look? Thanks a bunch.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56555/new/

https://reviews.llvm.org/D56555



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


[PATCH] D56555: Add Attribute to define nonlazy objc classes

2019-01-14 Thread Joe via Phabricator via cfe-commits
joedaniels29 added a comment.

never mind, I didnt address

> It's still missing the tests in SemaObjC -- you can use 
> clang\test\SemaObjC\attr-root-class.m as an example of what I'm talking about.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56555/new/

https://reviews.llvm.org/D56555



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


[PATCH] D56555: Add Attribute to define nonlazy objc classes

2019-01-14 Thread Joe via Phabricator via cfe-commits
joedaniels29 updated this revision to Diff 181692.
joedaniels29 marked 2 inline comments as done.
joedaniels29 added a comment.

Hopefully addressed Aaron's comments. Thanks again Aaron.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56555/new/

https://reviews.llvm.org/D56555

Files:
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/lib/CodeGen/CGObjCMac.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenObjC/non-lazy-classes.m
  clang/test/Misc/pragma-attribute-supported-attributes-list.test
  clang/test/SemaObjC/attr-objc-non-lazy.m

Index: clang/test/SemaObjC/attr-objc-non-lazy.m
===
--- /dev/null
+++ clang/test/SemaObjC/attr-objc-non-lazy.m
@@ -0,0 +1,34 @@
+// RUN: %clang_cc1 -verify -Wno-objc-root-class  -fsyntax-only  %s
+
+__attribute__((objc_nonlazy_class))
+@interface A
+@end
+@implementation A
+@end
+
+__attribute__((objc_nonlazy_class)) int X; // expected-error {{'objc_nonlazy_class' attribute only applies to Objective-C interfaces}}
+
+__attribute__((objc_nonlazy_class()))
+@interface B
+@end
+@implementation B
+@end
+
+__attribute__((objc_nonlazy_class("foo"))) // expected-error{{'objc_nonlazy_class' attribute takes no arguments}}
+@interface C
+@end
+@implementation C
+@end
+
+__attribute__((objc_nonlazy_class)) // expected-error {{'objc_nonlazy_class' attribute only applies to Objective-C interfaces}}
+@protocol B
+@end
+
+__attribute__((objc_nonlazy_class)) // expected-error {{'objc_nonlazy_class' attribute only applies to Objective-C interfaces}}
+void foo();
+
+@interface E
+@end
+__attribute__((objc_nonlazy_class))
+@implementation E // expected-error {{prefix attribute must be followed by an interface or protocol}}
+@end
\ No newline at end of file
Index: clang/test/Misc/pragma-attribute-supported-attributes-list.test
===
--- clang/test/Misc/pragma-attribute-supported-attributes-list.test
+++ clang/test/Misc/pragma-attribute-supported-attributes-list.test
@@ -2,7 +2,7 @@
 
 // The number of supported attributes should never go down!
 
-// CHECK: #pragma clang attribute supports 129 attributes:
+// CHECK: #pragma clang attribute supports 130 attributes:
 // CHECK-NEXT: AMDGPUFlatWorkGroupSize (SubjectMatchRule_function)
 // CHECK-NEXT: AMDGPUNumSGPR (SubjectMatchRule_function)
 // CHECK-NEXT: AMDGPUNumVGPR (SubjectMatchRule_function)
@@ -92,6 +92,7 @@
 // CHECK-NEXT: ObjCException (SubjectMatchRule_objc_interface)
 // CHECK-NEXT: ObjCExplicitProtocolImpl (SubjectMatchRule_objc_protocol)
 // CHECK-NEXT: ObjCMethodFamily (SubjectMatchRule_objc_method)
+// CHECK-NEXT: ObjCNonLazyClass (SubjectMatchRule_objc_interface)
 // CHECK-NEXT: ObjCPreciseLifetime (SubjectMatchRule_variable)
 // CHECK-NEXT: ObjCRequiresPropertyDefs (SubjectMatchRule_objc_interface)
 // CHECK-NEXT: ObjCRequiresSuper (SubjectMatchRule_objc_method)
Index: clang/test/CodeGenObjC/non-lazy-classes.m
===
--- clang/test/CodeGenObjC/non-lazy-classes.m
+++ clang/test/CodeGenObjC/non-lazy-classes.m
@@ -1,9 +1,10 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -Wno-objc-root-class -emit-llvm -o - %s | \
 // RUN: FileCheck %s
-// CHECK: @"OBJC_LABEL_NONLAZY_CLASS_$" = private global [1 x {{.*}}] {{.*}}@"OBJC_CLASS_$_A"{{.*}}, section "__DATA,__objc_nlclslist,regular,no_dead_strip", align 8
+// CHECK: @"OBJC_LABEL_NONLAZY_CLASS_$" = private global [2 x {{.*}}]{{.*}}@"OBJC_CLASS_$_A"{{.*}},{{.*}}@"OBJC_CLASS_$_D"{{.*}} section "__DATA,__objc_nlclslist,regular,no_dead_strip", align 8
 // CHECK: @"OBJC_LABEL_NONLAZY_CATEGORY_$" = private global [1 x {{.*}}] {{.*}}@"\01l_OBJC_$_CATEGORY_A_$_Cat"{{.*}}, section "__DATA,__objc_nlcatlist,regular,no_dead_strip", align 8
 
-@interface A @end
+@interface A
+@end
 @implementation A
 +(void) load {
 }
@@ -27,6 +28,13 @@
 }
 @end
 
-@interface C : A @end
+@interface C : A
+@end
 @implementation C
 @end
+
+__attribute__((objc_nonlazy_class))
+@interface D @end
+
+@implementation D
+@end
Index: clang/lib/Sema/SemaDeclAttr.cpp
===
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -6374,6 +6374,9 @@
   case ParsedAttr::AT_ObjCRootClass:
 handleSimpleAttribute(S, D, AL);
 break;
+  case ParsedAttr::AT_ObjCNonLazyClass:
+handleSimpleAttribute(S, D, AL);
+break;
   case ParsedAttr::AT_ObjCSubclassingRestricted:
 handleSimpleAttribute(S, D, AL);
 break;
Index: clang/lib/CodeGen/CGObjCMac.cpp
===
--- clang/lib/CodeGen/CGObjCMac.cpp
+++ clang/lib/CodeGen/CGObjCMac.cpp
@@ -6253,9 +6253,10 @@
   return GV;
 }
 
-bool
-CGObjCNonFragileABIMac::ImplementationIsNonLazy(const ObjCImplDecl *OD) const {
-  return OD->getClassMethod(GetNullarySelector("load")) != nullptr;

[PATCH] D55781: Make CC mangling conditional on the ABI version

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk abandoned this revision.
rnk added a comment.

In D55781#1351541 , @rjmccall wrote:

> Okay.  In my opinion, then, we should just do this unconditionally.


Sounds good to me.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55781/new/

https://reviews.llvm.org/D55781



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


[PATCH] D53763: [libc++] [test] Fix logic error in tests; enable for MSVC previews

2019-01-14 Thread Casey Carter via Phabricator via cfe-commits
CaseyCarter closed this revision.
CaseyCarter added a comment.

I merged this as r351148.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53763/new/

https://reviews.llvm.org/D53763



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


[PATCH] D56690: [Nios2] Remove Nios2 backend

2019-01-14 Thread Chandler Carruth via Phabricator via cfe-commits
chandlerc accepted this revision.
chandlerc added a comment.
This revision is now accepted and ready to land.

LGTM as a patch, but same as the other wait to land until the -dev thread 
settles.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56690/new/

https://reviews.llvm.org/D56690



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


[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk accepted this revision.
rnk added a comment.
This revision is now accepted and ready to land.

lgtm


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56686/new/

https://reviews.llvm.org/D56686



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


[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351147: [COFF, ARM64] Add __byteswap intrinsics (authored by 
mgrang, committed by ).

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685

Files:
  lib/Headers/intrin.h
  test/Headers/ms-arm64-intrin.cpp


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,13 +1,29 @@
-// RUN: %clang_cc1 -triple arm64-windows \
+// REQUIRES: aarch64-registered-target
+
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
-
-// REQUIRES: aarch64-registered-target
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s
 
 #include 
 
-void f() {
-// CHECK: nop
+void check_nop() {
+// CHECK: "nop"
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 
/**\


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,13 +1,29 @@
-// RUN: %clang_cc1 -triple arm64-windows \
+// REQUIRES: aarch64-registered-target
+
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
-
-// REQUIRES: aarch64-registered-target
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s
 
 #include 
 
-void f() {
-// CHECK: nop
+void check_nop() {
+// CHECK: "nop"
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 /**\
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351147 - [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via cfe-commits
Author: mgrang
Date: Mon Jan 14 17:26:26 2019
New Revision: 351147

URL: http://llvm.org/viewvc/llvm-project?rev=351147=rev
Log:
[COFF, ARM64] Add __byteswap intrinsics

Reviewers: rnk, efriedma, ssijaric, TomTan, haripul

Reviewed By: efriedma

Subscribers: javed.absar, cfe-commits, kristof.beyls

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

Modified:
cfe/trunk/lib/Headers/intrin.h
cfe/trunk/test/Headers/ms-arm64-intrin.cpp

Modified: cfe/trunk/lib/Headers/intrin.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/intrin.h?rev=351147=351146=351147=diff
==
--- cfe/trunk/lib/Headers/intrin.h (original)
+++ cfe/trunk/lib/Headers/intrin.h Mon Jan 14 17:26:26 2019
@@ -566,6 +566,16 @@ unsigned __int64 __getReg(int);
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 
/**\

Modified: cfe/trunk/test/Headers/ms-arm64-intrin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/ms-arm64-intrin.cpp?rev=351147=351146=351147=diff
==
--- cfe/trunk/test/Headers/ms-arm64-intrin.cpp (original)
+++ cfe/trunk/test/Headers/ms-arm64-intrin.cpp Mon Jan 14 17:26:26 2019
@@ -1,13 +1,29 @@
-// RUN: %clang_cc1 -triple arm64-windows \
+// REQUIRES: aarch64-registered-target
+
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
-
-// REQUIRES: aarch64-registered-target
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s
 
 #include 
 
-void f() {
-// CHECK: nop
+void check_nop() {
+// CHECK: "nop"
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}


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


[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang updated this revision to Diff 181679.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685

Files:
  lib/Headers/intrin.h
  test/Headers/ms-arm64-intrin.cpp


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,13 +1,29 @@
-// RUN: %clang_cc1 -triple arm64-windows \
+// REQUIRES: aarch64-registered-target
+
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
-
-// REQUIRES: aarch64-registered-target
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s
 
 #include 
 
-void f() {
-// CHECK: nop
+void check_nop() {
+// CHECK: "nop"
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 
/**\


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,13 +1,29 @@
-// RUN: %clang_cc1 -triple arm64-windows \
+// REQUIRES: aarch64-registered-target
+
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
-
-// REQUIRES: aarch64-registered-target
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s
 
 #include 
 
-void f() {
-// CHECK: nop
+void check_nop() {
+// CHECK: "nop"
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 /**\
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang marked an inline comment as done.
mgrang added a comment.

Verified that this compiles when both intrin.h and stdlib.h from the Microsoft 
SDK are included, in either order.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685



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


[PATCH] D56690: [Nios2] Remove Nios2 backend

2019-01-14 Thread Craig Topper via Phabricator via cfe-commits
craig.topper created this revision.
craig.topper added reviewers: chandlerc, hans, efriedma.
Herald added subscribers: jfb, mgorny.

As mentioned here. This backend is incomplete and has not been maintained in 
several months. 
http://lists.llvm.org/pipermail/llvm-dev/2019-January/129121.html


https://reviews.llvm.org/D56690

Files:
  include/clang/Basic/BuiltinsNios2.def
  include/clang/Basic/TargetBuiltins.h
  include/clang/module.modulemap
  lib/Basic/CMakeLists.txt
  lib/Basic/Targets.cpp
  lib/Basic/Targets/Nios2.cpp
  lib/Basic/Targets/Nios2.h
  lib/Driver/ToolChains/CommonArgs.cpp
  test/Driver/nios2-cpu.c
  test/Misc/target-invalid-cpu-note.c

Index: test/Misc/target-invalid-cpu-note.c
===
--- test/Misc/target-invalid-cpu-note.c
+++ test/Misc/target-invalid-cpu-note.c
@@ -84,10 +84,6 @@
 // PPC-SAME: pwr7, power8, pwr8, power9, pwr9, powerpc, ppc, powerpc64, ppc64,
 // PPC-SAME: powerpc64le, ppc64le
 
-// RUN: not %clang_cc1 -triple nios2--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix NIOS
-// NIOS: error: unknown target CPU 'not-a-cpu'
-// NIOS: note: valid target CPU values are: nios2r1, nios2r2
-
 // RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix MIPS
 // MIPS: error: unknown target CPU 'not-a-cpu'
 // MIPS: note: valid target CPU values are: mips1, mips2, mips3, mips4, mips5,
Index: test/Driver/nios2-cpu.c
===
--- test/Driver/nios2-cpu.c
+++ /dev/null
@@ -1,26 +0,0 @@
-// RUN: %clang -target nios2--- %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck %s
-
-// RUN: %clang -target nios2--- -mcpu=r1 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R1 %s
-// RUN: %clang -target nios2--- -mcpu=nios2r1 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R1 %s
-// RUN: %clang -target nios2--- -march=r1 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R1 %s
-// RUN: %clang -target nios2--- -march=nios2r1 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R1 %s
-
-// RUN: %clang -target nios2--- -mcpu=r2 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R2 %s
-// RUN: %clang -target nios2--- -mcpu=nios2r2 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R2 %s
-// RUN: %clang -target nios2--- -march=r2 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R2 %s
-// RUN: %clang -target nios2--- -march=nios2r2 %s -### -o %t.o 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-R2 %s
-
-// CHECK: "-triple" "nios2-unknown-unknown-unknown"
-// CHECK-R1: "-triple" "nios2-unknown-unknown-unknown"
-// CHECK-R1: "-target-cpu" "nios2r1"
-// CHECK-R2: "-triple" "nios2-unknown-unknown-unknown"
-// CHECK-R2: "-target-cpu" "nios2r2"
Index: lib/Driver/ToolChains/CommonArgs.cpp
===
--- lib/Driver/ToolChains/CommonArgs.cpp
+++ lib/Driver/ToolChains/CommonArgs.cpp
@@ -220,21 +220,6 @@
   return "";
 }
 
-static std::string getNios2TargetCPU(const ArgList ) {
-  Arg *A = Args.getLastArg(options::OPT_mcpu_EQ);
-  if (!A)
-A = Args.getLastArg(options::OPT_march_EQ);
-
-  if (!A)
-return "";
-
-  const char *name = A->getValue();
-  return llvm::StringSwitch(name)
-  .Case("r1", "nios2r1")
-  .Case("r2", "nios2r2")
-  .Default(name);
-}
-
 static std::string getLanaiTargetCPU(const ArgList ) {
   if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) {
 return A->getValue();
@@ -287,10 +272,6 @@
   return A->getValue();
 return "";
 
-  case llvm::Triple::nios2: {
-return getNios2TargetCPU(Args);
-  }
-
   case llvm::Triple::mips:
   case llvm::Triple::mipsel:
   case llvm::Triple::mips64:
Index: lib/Basic/Targets/Nios2.h
===
--- lib/Basic/Targets/Nios2.h
+++ /dev/null
@@ -1,151 +0,0 @@
-//===--- Nios2.h - Declare Nios2 target feature support -*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===--===//
-//
-// This file declares Nios2 TargetInfo objects.
-//
-//===--===//
-
-#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_NIOS2_H
-#define LLVM_CLANG_LIB_BASIC_TARGETS_NIOS2_H
-
-#include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TargetOptions.h"
-#include "llvm/ADT/Triple.h"
-#include "llvm/Support/Compiler.h"
-
-namespace clang {
-namespace targets {
-
-class LLVM_LIBRARY_VISIBILITY Nios2TargetInfo : public TargetInfo {
-  void setDataLayout() {
-if (BigEndian)
-  resetDataLayout("E-p:32:32:32-i8:8:32-i16:16:32-n32");
-else
-  

[PATCH] D56652: [CMake][Fuchsia] Synchronize first and second stage builds

2019-01-14 Thread Petr Hosek via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL351145: [CMake][Fuchsia] Synchronize first and second stage 
builds (authored by phosek, committed by ).
Herald added a reviewer: alexshap.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D56652?vs=181486=181677#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56652/new/

https://reviews.llvm.org/D56652

Files:
  cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
  cfe/trunk/cmake/caches/Fuchsia.cmake

Index: cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
===
--- cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
+++ cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
@@ -1,32 +1,33 @@
-# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain
-# build.
+# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain build.
 
 set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
 
 set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
 
-set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
-set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
+if(NOT APPLE)
+  set(LLVM_ENABLE_LLD ON CACHE BOOL "")
+endif()
+set(LLVM_ENABLE_LTO ON CACHE BOOL "")
+set(LLVM_ENABLE_MODULES ON CACHE BOOL "")
 set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
 set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
 set(LLVM_ENABLE_ZLIB ON CACHE BOOL "")
 set(LLVM_EXTERNALIZE_DEBUGINFO ON CACHE BOOL "")
-set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
-
-set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
-set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "")
+set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 
-set(LLVM_ENABLE_LTO ON CACHE BOOL "")
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
 if(NOT APPLE)
-  set(LLVM_ENABLE_LLD ON CACHE BOOL "")
   set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
   set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
 endif()
-set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
 set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
+
+set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
+set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "")
 
-set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
 set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE STRING "")
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE STRING "")
@@ -34,6 +35,10 @@
 if(APPLE)
   list(APPEND BUILTIN_TARGETS "default")
   list(APPEND RUNTIME_TARGETS "default")
+
+  set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "")
+  set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "")
+  set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "")
 endif()
 
 foreach(target aarch64-linux-gnu;armv7-linux-gnueabihf;i386-linux-gnu;x86_64-linux-gnu)
Index: cfe/trunk/cmake/caches/Fuchsia.cmake
===
--- cfe/trunk/cmake/caches/Fuchsia.cmake
+++ cfe/trunk/cmake/caches/Fuchsia.cmake
@@ -4,14 +4,19 @@
 
 set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
 
-set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
-set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
-set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
 set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
 set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
 set(LLVM_ENABLE_ZLIB OFF CACHE BOOL "")
-set(CLANG_INCLUDE_TESTS OFF CACHE BOOL "")
+set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
+
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
+if(NOT APPLE)
+  set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
+  set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
+endif()
+set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
 set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
 
 set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
@@ -20,18 +25,6 @@
 set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
 set(CMAKE_BUILD_TYPE Release CACHE STRING "")
 
-set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "")
-if(NOT APPLE)
-  set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "")
-endif()
-
-if(NOT APPLE)
-  set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
-  set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
-endif()
-set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
-set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
-
 if(APPLE)
   set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "")
   set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "")
@@ -81,6 +74,11 @@
   endif()
 endif()
 
+set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "")
+if(NOT APPLE)
+  set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "")
+endif()
+
 set(CLANG_BOOTSTRAP_TARGETS
   check-all
   check-llvm
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351145 - [CMake][Fuchsia] Synchronize first and second stage builds

2019-01-14 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Mon Jan 14 17:15:00 2019
New Revision: 351145

URL: http://llvm.org/viewvc/llvm-project?rev=351145=rev
Log:
[CMake][Fuchsia] Synchronize first and second stage builds

This reorders options between the first and second stage builds to make
them better lined up. The change also re-enables tests for first stage
which is useful e.g. for cross-compiling when we cannot run tests for
second stage directly (i.e. without emulation).

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

Modified:
cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
cfe/trunk/cmake/caches/Fuchsia.cmake

Modified: cfe/trunk/cmake/caches/Fuchsia-stage2.cmake
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/cmake/caches/Fuchsia-stage2.cmake?rev=351145=351144=351145=diff
==
--- cfe/trunk/cmake/caches/Fuchsia-stage2.cmake (original)
+++ cfe/trunk/cmake/caches/Fuchsia-stage2.cmake Mon Jan 14 17:15:00 2019
@@ -1,32 +1,33 @@
-# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain
-# build.
+# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain 
build.
 
 set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
 
 set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
 
-set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
-set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
+if(NOT APPLE)
+  set(LLVM_ENABLE_LLD ON CACHE BOOL "")
+endif()
+set(LLVM_ENABLE_LTO ON CACHE BOOL "")
+set(LLVM_ENABLE_MODULES ON CACHE BOOL "")
 set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
 set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
 set(LLVM_ENABLE_ZLIB ON CACHE BOOL "")
 set(LLVM_EXTERNALIZE_DEBUGINFO ON CACHE BOOL "")
-set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
-
-set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
-set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "")
+set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 
-set(LLVM_ENABLE_LTO ON CACHE BOOL "")
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
 if(NOT APPLE)
-  set(LLVM_ENABLE_LLD ON CACHE BOOL "")
   set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
   set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
 endif()
-set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
 set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
+
+set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
+set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "")
 
-set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
 set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE 
STRING "")
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -gline-tables-only -DNDEBUG" CACHE 
STRING "")
@@ -34,6 +35,10 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3
 if(APPLE)
   list(APPEND BUILTIN_TARGETS "default")
   list(APPEND RUNTIME_TARGETS "default")
+
+  set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "")
+  set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "")
+  set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "")
 endif()
 
 foreach(target 
aarch64-linux-gnu;armv7-linux-gnueabihf;i386-linux-gnu;x86_64-linux-gnu)

Modified: cfe/trunk/cmake/caches/Fuchsia.cmake
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/cmake/caches/Fuchsia.cmake?rev=351145=351144=351145=diff
==
--- cfe/trunk/cmake/caches/Fuchsia.cmake (original)
+++ cfe/trunk/cmake/caches/Fuchsia.cmake Mon Jan 14 17:15:00 2019
@@ -4,14 +4,19 @@ set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch6
 
 set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
 
-set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
-set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
-set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
 set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
 set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
 set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
 set(LLVM_ENABLE_ZLIB OFF CACHE BOOL "")
-set(CLANG_INCLUDE_TESTS OFF CACHE BOOL "")
+set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
+
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
+if(NOT APPLE)
+  set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
+  set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
+endif()
+set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
 set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
 
 set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
@@ -20,18 +25,6 @@ set(ENABLE_X86_RELAX_RELOCATIONS ON CACH
 set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
 set(CMAKE_BUILD_TYPE Release CACHE STRING "")
 
-set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "")
-if(NOT APPLE)
-  set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "")
-endif()
-
-if(NOT APPLE)
-  set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
-  set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
-endif()
-set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
-set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
-
 if(APPLE)
   

[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Eli Friedman via Phabricator via cfe-commits
efriedma added a comment.

Before you commit, please verify this actually compiles if you include both 
this intrin.h and stdlib.h from the Microsoft SDK, in either order.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685



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


[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Craig Topper via Phabricator via cfe-commits
craig.topper marked an inline comment as done.
craig.topper added inline comments.



Comment at: test/Headers/ms-intrin.cpp:37
 void f() {
   __movsb(0, 0, 0);
   __movsd(0, 0, 0);

rnk wrote:
> Surely `__movsb` and `__readmsr` should all be x86-only as well, at least 
> according to MSDN?
I'm sure that's true, but I think thats a separate issue with the forward 
declarations in intrin.h


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56686/new/

https://reviews.llvm.org/D56686



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


[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Eli Friedman via Phabricator via cfe-commits
efriedma accepted this revision.
efriedma added a comment.
This revision is now accepted and ready to land.

LGTM




Comment at: test/Headers/ms-arm64-intrin.cpp:19
   __nop();
 }
+

While you're here, please fix all four tests to just check the IR.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685



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


[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Craig Topper via Phabricator via cfe-commits
craig.topper updated this revision to Diff 181672.
craig.topper added a comment.

Remove guard from include of xsaveintrin.h. We can't have any check because we 
need it to always include on non-windows platforms due to target attribute.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56686/new/

https://reviews.llvm.org/D56686

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/immintrin.h
  lib/Headers/intrin.h
  lib/Headers/xsaveintrin.h
  test/CodeGen/builtins-x86.c
  test/CodeGen/x86_32-xsave.c
  test/CodeGen/x86_64-xsave.c
  test/Headers/ms-intrin.cpp

Index: test/Headers/ms-intrin.cpp
===
--- test/Headers/ms-intrin.cpp
+++ test/Headers/ms-intrin.cpp
@@ -49,7 +49,9 @@
   int info[4];
   __cpuid(info, 0);
   __cpuidex(info, 0, 0);
+#if defined(_M_X64) || defined(_M_IX86)
   _xgetbv(0);
+#endif
   __halt();
   __nop();
   __readmsr(0);
Index: test/CodeGen/x86_64-xsave.c
===
--- test/CodeGen/x86_64-xsave.c
+++ test/CodeGen/x86_64-xsave.c
@@ -1,6 +1,9 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 
+// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XGETBV
+// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSETBV
+
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 
@@ -10,9 +13,16 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 
+// Don't include mm_malloc.h, it's system specific.
+#define __MM_MALLOC_H
+#include 
+
+
 void test() {
-  unsigned long long tmp_ULLi = 0;
-  void*  tmp_vp = 0;
+  unsigned long long tmp_ULLi;
+  unsigned int   tmp_Ui;
+  void*  tmp_vp;
+  tmp_ULLi = 0; tmp_Ui = 0; tmp_vp = 0;
 
 #ifdef TEST_XSAVE
 // XSAVE: [[tmp_vp_1:%[0-9a-zA-Z]+]] = load i8*, i8** %tmp_vp, align 8
@@ -46,6 +56,18 @@
 // XSAVE: [[low32_4:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_4]] to i32
 // XSAVE: call void @llvm.x86.xrstor64(i8* [[tmp_vp_4]], i32 [[high32_4]], i32 [[low32_4]])
   (void)__builtin_ia32_xrstor64(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xsave
+  (void)_xsave(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xsave64
+  (void)_xsave64(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xrstor
+  (void)_xrstor(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xrstor64
+  (void)_xrstor64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEOPT
@@ -64,6 +86,12 @@
 // XSAVEOPT: [[low32_2:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_2]] to i32
 // XSAVEOPT: call void @llvm.x86.xsaveopt64(i8* [[tmp_vp_2]], i32 [[high32_2]], i32 [[low32_2]])
   (void)__builtin_ia32_xsaveopt64(tmp_vp, tmp_ULLi);
+  
+// XSAVEOPT: call void @llvm.x86.xsaveopt
+  (void)_xsaveopt(tmp_vp, tmp_ULLi);
+  
+// XSAVEOPT: call void @llvm.x86.xsaveopt64
+  (void)_xsaveopt64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEC
@@ -82,6 +110,12 @@
 // XSAVEC: [[low32_2:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_2]] to i32
 // XSAVEC: call void @llvm.x86.xsavec64(i8* [[tmp_vp_2]], i32 [[high32_2]], i32 [[low32_2]])
   (void)__builtin_ia32_xsavec64(tmp_vp, tmp_ULLi);
+  
+// XSAVEC: call void @llvm.x86.xsavec 
+  (void)_xsavec(tmp_vp, tmp_ULLi);
+  
+// XSAVEC: call void @llvm.x86.xsavec64
+  (void)_xsavec64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVES
@@ -116,5 +150,39 @@
 // XSAVES: [[low32_4:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_4]] to i32
 // XSAVES: call void @llvm.x86.xrstors64(i8* [[tmp_vp_4]], i32 [[high32_4]], i32 [[low32_4]])
   (void)__builtin_ia32_xrstors64(tmp_vp, tmp_ULLi);
+  
+// XSAVES: call void @llvm.x86.xsaves
+  (void)_xsaves(tmp_vp, tmp_ULLi); 
+  
+// XSAVES: call void @llvm.x86.xsaves64
+  (void)_xsaves64(tmp_vp, tmp_ULLi); 
+
+// XSAVES: call void @llvm.x86.xrstors
+  (void)_xrstors(tmp_vp, tmp_ULLi);
+  
+// 

[PATCH] D56685: [COFF, ARM64] Add __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang updated this revision to Diff 181671.
mgrang retitled this revision from "[COFF, ARM64] Declare __byteswap 
intrinsics" to "[COFF, ARM64] Add __byteswap intrinsics".

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685

Files:
  lib/Headers/intrin.h
  test/Headers/ms-arm64-intrin.cpp


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,9 +1,15 @@
+// REQUIRES: aarch64-registered-target
+
 // RUN: %clang_cc1 -triple arm64-windows \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
 // RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
 
-// REQUIRES: aarch64-registered-target
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s --check-prefix CHECK-IR
 
 #include 
 
@@ -11,3 +17,18 @@
 // CHECK: nop
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK-IR: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK-IR: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK-IR: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 
/**\


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -1,9 +1,15 @@
+// REQUIRES: aarch64-registered-target
+
 // RUN: %clang_cc1 -triple arm64-windows \
 // RUN: -fms-compatibility -fms-compatibility-version=17.00 \
 // RUN: -ffreestanding -fsyntax-only -Werror \
 // RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
 
-// REQUIRES: aarch64-registered-target
+// RUN: %clang_cc1 -triple arm64-windows -O1 \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 \
+// RUN: | FileCheck %s --check-prefix CHECK-IR
 
 #include 
 
@@ -11,3 +17,18 @@
 // CHECK: nop
   __nop();
 }
+
+unsigned short check_byteswap_ushort(unsigned short val) {
+// CHECK-IR: call i16 @llvm.bswap.i16(i16 %val)
+  return _byteswap_ushort(val);
+}
+
+unsigned long check_byteswap_ulong(unsigned long val) {
+// CHECK-IR: call i32 @llvm.bswap.i32(i32 %val)
+  return _byteswap_ulong(val);
+}
+
+unsigned __int64 check_byteswap_uint64(unsigned __int64 val) {
+// CHECK-IR: call i64 @llvm.bswap.i64(i64 %val)
+  return _byteswap_uint64(val);
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -566,6 +566,16 @@
 long _InterlockedAdd(long volatile *Addend, long Value);
 int _ReadStatusReg(int);
 void _WriteStatusReg(int, int);
+
+static inline unsigned short _byteswap_ushort (unsigned short val) {
+  return __builtin_bswap16(val);
+}
+static inline unsigned long _byteswap_ulong (unsigned long val) {
+  return __builtin_bswap32(val);
+}
+static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
+  return __builtin_bswap64(val);
+}
 #endif
 
 /**\
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56610: [clangd] A code action to qualify an unqualified name

2019-01-14 Thread Jan Korous via Phabricator via cfe-commits
jkorous added a comment.

Hi Ilya, I got here from reading your other patch 
(https://reviews.llvm.org/D56611). I'm wondering if we could make those range 
utility functions more understandable.




Comment at: clangd/SourceCode.h:64
 
+/// Turns a token range into a half-open range and checks its correctness.
+/// The resulting range will have only valid source location on both sides, 
both

It seems to me the range is actually closed on both sides.
Do I get it right that the result is?

```
[begin of first token : end of last token]
```

Wouldn't some name like `toWholeTokenRange` be easier to understand?



Comment at: clangd/SourceCode.h:81
+/// Preconditions: isValidFileRange(R) == true, L is a file location.
+bool halfOpenRangeContains(const SourceManager , SourceRange R,
+   SourceLocation L);

I'd find it helpful to mention that the range is actually interpreted as 
closed-open (knowing which half is which).


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56610/new/

https://reviews.llvm.org/D56610



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


[PATCH] D56611: [clangd] A code action to swap branches of an if statement

2019-01-14 Thread Jan Korous via Phabricator via cfe-commits
jkorous added a comment.

Hi Ilya, this seems really useful for people learning how to implement their 
custom actions!




Comment at: clangd/refactor/actions/SwapIfBranches.cpp:36
+
+  bool VisitIfStmt(IfStmt *If) {
+auto R = toHalfOpenFileRange(Ctx.getSourceManager(), Ctx.getLangOpts(),

It seems to me we don't find If token whenever
CursorLoc == location of 'f' of the If token

For example if there's "if" starting at location 1:1 I think we proceed like 
this (hope my pseudocode is clear):

1. `If->getIfLoc()` returns `SourceLocation{1:1}`
2. we construct `SourceRange{begin = 1:1, end = 1:1}`
3. `toHalfOpenFileRange()` returns `SourceRange{1:1, 1:2}`
4. the condition for `SourceLocation L` in `halfOpenRangeContains()` is `1:1 <= 
LOffset && LOffset < 1:2` which is only ever true for L == 1:1

Do I understand it right?



Comment at: clangd/refactor/actions/SwapIfBranches.cpp:62
+
+  // avoid dealing with single-statement brances, they require careful handling
+  // to avoid changing semantics of the code (i.e. dangling else).

Just a typo in comment `s/brances/branches/`


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56611/new/

https://reviews.llvm.org/D56611



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


[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk added inline comments.



Comment at: lib/Headers/immintrin.h:381-394
+#ifdef _MSC_VER
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned __int64 __cdecl _xgetbv(unsigned int);
+void __cdecl _xsetbv(unsigned int, unsigned __int64);
+#ifdef __cplusplus

I think we should try to simplify immintrin.h and push this complexity into 
xsaveintrin.h. Since it is small (i.e. not avx512intrin.h), we don't really 
need this `!defined(_MSC_VER) || __has_feature(modules)` check to improve 
compile time. If you rewrite it to:
  #if defined(_MSC_VER) || defined(__XSAVE__)
  #include 
  #endif

Then xsaveintrin.h can do the __XSAVE__ macro feature check internally.



Comment at: test/Headers/ms-intrin.cpp:37
 void f() {
   __movsb(0, 0, 0);
   __movsd(0, 0, 0);

Surely `__movsb` and `__readmsr` should all be x86-only as well, at least 
according to MSDN?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56686/new/

https://reviews.llvm.org/D56686



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


[PATCH] D56686: [X86] Make _xgetbv/_xsetbv on non-windows platforms

2019-01-14 Thread Craig Topper via Phabricator via cfe-commits
craig.topper created this revision.
craig.topper added reviewers: rnk, RKSimon, spatel.

This patch attempts to redo what was tried in r278783, but was reverted.

These intrinsics should be available on non-windows platforms with "xsave" 
feature check. But on Windows platforms they shouldn't have feature check since 
that's how MSVC behaves.

To accomplish this I've added a MS builtin with no feature check. And a normal 
gcc builtin with a feature check. When _MSC_VER is not defined _xgetbv/_xsetbv 
will be macros pointing to the gcc builtin name.

I've moved the forward declarations from intrin.h to immintrin.h to match the 
MSDN documentation and used that as the header file for the MS builtin.

I'm not super happy with this implementation, and I'm open to suggestions for 
better ways to do it.


https://reviews.llvm.org/D56686

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/immintrin.h
  lib/Headers/intrin.h
  lib/Headers/xsaveintrin.h
  test/CodeGen/builtins-x86.c
  test/CodeGen/x86_32-xsave.c
  test/CodeGen/x86_64-xsave.c
  test/Headers/ms-intrin.cpp

Index: test/Headers/ms-intrin.cpp
===
--- test/Headers/ms-intrin.cpp
+++ test/Headers/ms-intrin.cpp
@@ -49,7 +49,9 @@
   int info[4];
   __cpuid(info, 0);
   __cpuidex(info, 0, 0);
+#if defined(_M_X64) || defined(_M_IX86)
   _xgetbv(0);
+#endif
   __halt();
   __nop();
   __readmsr(0);
Index: test/CodeGen/x86_64-xsave.c
===
--- test/CodeGen/x86_64-xsave.c
+++ test/CodeGen/x86_64-xsave.c
@@ -1,6 +1,9 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 // RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
 
+// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XGETBV
+// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSETBV
+
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 // RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
 
@@ -10,9 +13,16 @@
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 // RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
 
+// Don't include mm_malloc.h, it's system specific.
+#define __MM_MALLOC_H
+#include 
+
+
 void test() {
-  unsigned long long tmp_ULLi = 0;
-  void*  tmp_vp = 0;
+  unsigned long long tmp_ULLi;
+  unsigned int   tmp_Ui;
+  void*  tmp_vp;
+  tmp_ULLi = 0; tmp_Ui = 0; tmp_vp = 0;
 
 #ifdef TEST_XSAVE
 // XSAVE: [[tmp_vp_1:%[0-9a-zA-Z]+]] = load i8*, i8** %tmp_vp, align 8
@@ -46,6 +56,18 @@
 // XSAVE: [[low32_4:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_4]] to i32
 // XSAVE: call void @llvm.x86.xrstor64(i8* [[tmp_vp_4]], i32 [[high32_4]], i32 [[low32_4]])
   (void)__builtin_ia32_xrstor64(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xsave
+  (void)_xsave(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xsave64
+  (void)_xsave64(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xrstor
+  (void)_xrstor(tmp_vp, tmp_ULLi);
+  
+// XSAVE: call void @llvm.x86.xrstor64
+  (void)_xrstor64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEOPT
@@ -64,6 +86,12 @@
 // XSAVEOPT: [[low32_2:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_2]] to i32
 // XSAVEOPT: call void @llvm.x86.xsaveopt64(i8* [[tmp_vp_2]], i32 [[high32_2]], i32 [[low32_2]])
   (void)__builtin_ia32_xsaveopt64(tmp_vp, tmp_ULLi);
+  
+// XSAVEOPT: call void @llvm.x86.xsaveopt
+  (void)_xsaveopt(tmp_vp, tmp_ULLi);
+  
+// XSAVEOPT: call void @llvm.x86.xsaveopt64
+  (void)_xsaveopt64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef TEST_XSAVEC
@@ -82,6 +110,12 @@
 // XSAVEC: [[low32_2:%[0-9a-zA-Z]+]] = trunc i64 [[tmp_ULLi_2]] to i32
 // XSAVEC: call void @llvm.x86.xsavec64(i8* [[tmp_vp_2]], i32 [[high32_2]], i32 [[low32_2]])
   (void)__builtin_ia32_xsavec64(tmp_vp, tmp_ULLi);
+  
+// XSAVEC: call void @llvm.x86.xsavec 
+  (void)_xsavec(tmp_vp, tmp_ULLi);
+  
+// XSAVEC: call void @llvm.x86.xsavec64
+  (void)_xsavec64(tmp_vp, tmp_ULLi);
 #endif
 
 #ifdef 

r351137 - [Sema] Change std::sort to llvm::sort

2019-01-14 Thread Mandeep Singh Grang via cfe-commits
Author: mgrang
Date: Mon Jan 14 15:45:58 2019
New Revision: 351137

URL: http://llvm.org/viewvc/llvm-project?rev=351137=rev
Log:
[Sema] Change std::sort to llvm::sort

Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp

Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=351137=351136=351137=diff
==
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Jan 14 15:45:58 2019
@@ -2610,8 +2610,8 @@ bool Sema::CheckHexagonBuiltinCpu(unsign
 return LHS.BuiltinID < RHS.BuiltinID;
   };
   static const bool SortOnce =
-  (std::sort(std::begin(ValidCPU), std::end(ValidCPU), SortCmp),
-   std::sort(std::begin(ValidHVX), std::end(ValidHVX), SortCmp), true);
+  (llvm::sort(ValidCPU, SortCmp),
+   llvm::sort(ValidHVX, SortCmp), true);
   (void)SortOnce;
   auto LowerBoundCmp = [](const BuiltinAndString , unsigned BuiltinID) {
 return BI.BuiltinID < BuiltinID;
@@ -2860,7 +2860,7 @@ bool Sema::CheckHexagonBuiltinArgument(u
   // Use a dynamically initialized static to sort the table exactly once on
   // first run.
   static const bool SortOnce =
-  (std::sort(std::begin(Infos), std::end(Infos),
+  (llvm::sort(Infos,
  [](const BuiltinInfo , const BuiltinInfo ) {
return LHS.BuiltinID < RHS.BuiltinID;
  }),


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


[PATCH] D56685: [COFF, ARM64] Declare __byteswap intrinsics

2019-01-14 Thread Eli Friedman via Phabricator via cfe-commits
efriedma added inline comments.



Comment at: lib/Headers/arm64intr.h:50
+#define _byteswap_ulong  __builtin_bswap32
+#define _byteswap_uint64 __builtin_bswap64
+

These should be available for all Microsoft targets, I think.

Please define these as inline functions or proper builtins, rather than macros; 
a macro is very likely to break something.  (For example, if someone includes 
stdlib.h, which declares "unsigned long _byteswap_ulong(unsigned long);", 
replacing _byteswap_ulong with __builtin_bswap32 will cause a compile error.)


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56685/new/

https://reviews.llvm.org/D56685



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


[PATCH] D56671: [COFF, ARM64] Add __nop intrinsic

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL351135: [COFF, ARM64] Add __nop intrinsic (authored by 
mgrang, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D56671?vs=181578=181659#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56671/new/

https://reviews.llvm.org/D56671

Files:
  cfe/trunk/lib/Headers/intrin.h
  cfe/trunk/test/Headers/ms-arm64-intrin.cpp


Index: cfe/trunk/lib/Headers/intrin.h
===
--- cfe/trunk/lib/Headers/intrin.h
+++ cfe/trunk/lib/Headers/intrin.h
@@ -549,6 +549,9 @@
 __halt(void) {
   __asm__ volatile ("hlt");
 }
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 static __inline__ void __DEFAULT_FN_ATTRS
 __nop(void) {
   __asm__ volatile ("nop");
Index: cfe/trunk/test/Headers/ms-arm64-intrin.cpp
===
--- cfe/trunk/test/Headers/ms-arm64-intrin.cpp
+++ cfe/trunk/test/Headers/ms-arm64-intrin.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
+
+// REQUIRES: aarch64-registered-target
+
+#include 
+
+void f() {
+// CHECK: nop
+  __nop();
+}


Index: cfe/trunk/lib/Headers/intrin.h
===
--- cfe/trunk/lib/Headers/intrin.h
+++ cfe/trunk/lib/Headers/intrin.h
@@ -549,6 +549,9 @@
 __halt(void) {
   __asm__ volatile ("hlt");
 }
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 static __inline__ void __DEFAULT_FN_ATTRS
 __nop(void) {
   __asm__ volatile ("nop");
Index: cfe/trunk/test/Headers/ms-arm64-intrin.cpp
===
--- cfe/trunk/test/Headers/ms-arm64-intrin.cpp
+++ cfe/trunk/test/Headers/ms-arm64-intrin.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
+
+// REQUIRES: aarch64-registered-target
+
+#include 
+
+void f() {
+// CHECK: nop
+  __nop();
+}
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351135 - [COFF, ARM64] Add __nop intrinsic

2019-01-14 Thread Mandeep Singh Grang via cfe-commits
Author: mgrang
Date: Mon Jan 14 15:26:01 2019
New Revision: 351135

URL: http://llvm.org/viewvc/llvm-project?rev=351135=rev
Log:
[COFF, ARM64] Add __nop intrinsic

Reviewers: rnk, efriedma, TomTan, haripul, ssijaric

Reviewed By: rnk, efriedma

Subscribers: javed.absar, kristof.beyls, cfe-commits

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

Added:
cfe/trunk/test/Headers/ms-arm64-intrin.cpp
Modified:
cfe/trunk/lib/Headers/intrin.h

Modified: cfe/trunk/lib/Headers/intrin.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/intrin.h?rev=351135=351134=351135=diff
==
--- cfe/trunk/lib/Headers/intrin.h (original)
+++ cfe/trunk/lib/Headers/intrin.h Mon Jan 14 15:26:01 2019
@@ -549,6 +549,9 @@ static __inline__ void __DEFAULT_FN_ATTR
 __halt(void) {
   __asm__ volatile ("hlt");
 }
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 static __inline__ void __DEFAULT_FN_ATTRS
 __nop(void) {
   __asm__ volatile ("nop");

Added: cfe/trunk/test/Headers/ms-arm64-intrin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/ms-arm64-intrin.cpp?rev=351135=auto
==
--- cfe/trunk/test/Headers/ms-arm64-intrin.cpp (added)
+++ cfe/trunk/test/Headers/ms-arm64-intrin.cpp Mon Jan 14 15:26:01 2019
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
+
+// REQUIRES: aarch64-registered-target
+
+#include 
+
+void f() {
+// CHECK: nop
+  __nop();
+}


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


[PATCH] D56620: [COFF, ARM64] Declare intrinsics: __nop, _byteswap_[ushort/ulong/uint64]

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang abandoned this revision.
mgrang added a comment.

_bytswap intrinsics are added in D56685 . 
Abandoning this patch.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56620/new/

https://reviews.llvm.org/D56620



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


[PATCH] D56685: [COFF, ARM64] Declare __byteswap intrinsics

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang created this revision.
mgrang added reviewers: rnk, efriedma, ssijaric, TomTan, haripul.
Herald added subscribers: kristof.beyls, javed.absar.

Repository:
  rC Clang

https://reviews.llvm.org/D56685

Files:
  lib/Headers/arm64intr.h
  test/Headers/ms-arm64-intrin.cpp


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -3,6 +3,11 @@
 // RUN: -ffreestanding -fsyntax-only -Werror \
 // RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
 
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 | FileCheck %s 
--check-prefix CHECK-IR
+
 // REQUIRES: aarch64-registered-target
 
 #include 
@@ -11,3 +16,66 @@
 // CHECK: nop
   __nop();
 }
+
+unsigned short check_byteswap_ushort_1() {
+// CHECK-IR: ret i16 256
+  return _byteswap_ushort(1);
+}
+unsigned short check_byteswap_ushort_2() {
+// CHECK-IR: ret i16 512
+  return _byteswap_ushort(2);
+}
+unsigned short check_byteswap_ushort_3() {
+// CHECK-IR: ret i16 768
+  return _byteswap_ushort(3);
+}
+unsigned short check_byteswap_ushort_4() {
+// CHECK-IR: ret i16 1024
+  return _byteswap_ushort(4);
+}
+unsigned short check_byteswap_ushort_5() {
+// CHECK-IR: ret i16 1280
+  return _byteswap_ushort(5);
+}
+
+unsigned long check_byteswap_ulong_1() {
+// CHECK-IR: ret i32 16777216
+  return _byteswap_ulong(1);
+}
+unsigned long check_byteswap_ulong_2() {
+// CHECK-IR: ret i32 33554432
+  return _byteswap_ulong(2);
+}
+unsigned long check_byteswap_ulong_3() {
+// CHECK-IR: ret i32 50331648
+  return _byteswap_ulong(3);
+}
+unsigned long check_byteswap_ulong_4() {
+// CHECK-IR: ret i32 67108864
+  return _byteswap_ulong(4);
+}
+unsigned long check_byteswap_ulong_5() {
+// CHECK-IR: ret i32 83886080
+  return _byteswap_ulong(5);
+}
+
+unsigned __int64 check_byteswap_uint64_1() {
+// CHECK-IR: ret i64 72057594037927936
+  return _byteswap_uint64(1);
+}
+unsigned __int64 check_byteswap_uint64_2() {
+// CHECK-IR: ret i64 144115188075855872
+  return _byteswap_uint64(2);
+}
+unsigned __int64 check_byteswap_uint64_3() {
+// CHECK-IR: ret i64 216172782113783808
+  return _byteswap_uint64(3);
+}
+unsigned __int64 check_byteswap_uint64_4() {
+// CHECK-IR: ret i64 288230376151711744
+  return _byteswap_uint64(4);
+}
+unsigned __int64 check_byteswap_uint64_5() {
+// CHECK-IR: ret i64 360287970189639680
+  return _byteswap_uint64(5);
+}
Index: lib/Headers/arm64intr.h
===
--- lib/Headers/arm64intr.h
+++ lib/Headers/arm64intr.h
@@ -45,5 +45,9 @@
   _ARM64_BARRIER_OSHLD = 0x1
 } _ARM64INTR_BARRIER_TYPE;
 
+#define _byteswap_ushort __builtin_bswap16
+#define _byteswap_ulong  __builtin_bswap32
+#define _byteswap_uint64 __builtin_bswap64
+
 #endif /* __ARM64INTR_H */
 #endif /* _MSC_VER */


Index: test/Headers/ms-arm64-intrin.cpp
===
--- test/Headers/ms-arm64-intrin.cpp
+++ test/Headers/ms-arm64-intrin.cpp
@@ -3,6 +3,11 @@
 // RUN: -ffreestanding -fsyntax-only -Werror \
 // RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
 
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - -emit-llvm 2>&1 | FileCheck %s --check-prefix CHECK-IR
+
 // REQUIRES: aarch64-registered-target
 
 #include 
@@ -11,3 +16,66 @@
 // CHECK: nop
   __nop();
 }
+
+unsigned short check_byteswap_ushort_1() {
+// CHECK-IR: ret i16 256
+  return _byteswap_ushort(1);
+}
+unsigned short check_byteswap_ushort_2() {
+// CHECK-IR: ret i16 512
+  return _byteswap_ushort(2);
+}
+unsigned short check_byteswap_ushort_3() {
+// CHECK-IR: ret i16 768
+  return _byteswap_ushort(3);
+}
+unsigned short check_byteswap_ushort_4() {
+// CHECK-IR: ret i16 1024
+  return _byteswap_ushort(4);
+}
+unsigned short check_byteswap_ushort_5() {
+// CHECK-IR: ret i16 1280
+  return _byteswap_ushort(5);
+}
+
+unsigned long check_byteswap_ulong_1() {
+// CHECK-IR: ret i32 16777216
+  return _byteswap_ulong(1);
+}
+unsigned long check_byteswap_ulong_2() {
+// CHECK-IR: ret i32 33554432
+  return _byteswap_ulong(2);
+}
+unsigned long check_byteswap_ulong_3() {
+// CHECK-IR: ret i32 50331648
+  return _byteswap_ulong(3);
+}
+unsigned long check_byteswap_ulong_4() {
+// CHECK-IR: ret i32 67108864
+  return _byteswap_ulong(4);
+}
+unsigned long check_byteswap_ulong_5() {
+// CHECK-IR: ret i32 83886080
+  return _byteswap_ulong(5);
+}
+
+unsigned __int64 check_byteswap_uint64_1() {
+// CHECK-IR: ret i64 72057594037927936
+  return _byteswap_uint64(1);
+}
+unsigned __int64 check_byteswap_uint64_2() {
+// CHECK-IR: ret i64 144115188075855872
+  return 

[PATCH] D56424: [clang-tidy] Add check for underscores in googletest names.

2019-01-14 Thread Kar Epker via Phabricator via cfe-commits
karepker added a comment.

Hi all, ping on this patch. I've addressed all comments to the best of my 
ability. Is there anything outstanding that needs to be changed?


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56424/new/

https://reviews.llvm.org/D56424



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


[PATCH] D55394: Re-order type param children of ObjC nodes

2019-01-14 Thread John McCall via Phabricator via cfe-commits
rjmccall added a comment.

If I'm debugging a clang bug and calling `D->dump()`, I think it'll be just as 
clear as it used to be what the `ObjCTypeParamDecl` lines mean.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55394/new/

https://reviews.llvm.org/D55394



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


[PATCH] D55394: Re-order type param children of ObjC nodes

2019-01-14 Thread John McCall via Phabricator via cfe-commits
rjmccall added a comment.

This is the AST dumper.  This is not a user feature.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55394/new/

https://reviews.llvm.org/D55394



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


[PATCH] D56642: NFC: Move dump of type nodes to NodeDumper

2019-01-14 Thread Aaron Ballman via Phabricator via cfe-commits
aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM aside from `auto` nits.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56642/new/

https://reviews.llvm.org/D56642



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


[PATCH] D55394: Re-order type param children of ObjC nodes

2019-01-14 Thread Aaron Ballman via Phabricator via cfe-commits
aaron.ballman added a comment.

In D55394#1356837 , @rjmccall wrote:

> I don't really have an opinion about this, sorry.


Do you think ObjC users will find the new output to be harder to read or less 
understandable than the old output?


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55394/new/

https://reviews.llvm.org/D55394



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


[PATCH] D53541: [COFF, ARM64] Do not emit x86_seh_recoverfp intrinsic

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk added a comment.

In D53541#1353251 , @mgrang wrote:

> > What about the three stack pointer case of stack realignment plus a dynamic 
> > alloca? Typically this is the case where recoverfp is necessary.
>
> @rnk Sorry, I missed your comment earlier. I am not sure what scenario the 
> three stack pointer case is. Could you please give me a test case for it?


I think you just need a local variable with an alignment greater than the ABI 
provides, something like:

  struct Foo {
Foo();
int x, y, z;
  };
  int filter(int);
  void may_throw();
  void seh_byval(int n) {
Foo __declspec(align(32)) o;
__try {
  may_throw();
} __except(filter(o.x)) {
}
  }


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53541/new/

https://reviews.llvm.org/D53541



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


[PATCH] D53329: Generate DIFile with main program if source is not available

2019-01-14 Thread Yonghong Song via Phabricator via cfe-commits
yonghong-song added a comment.

@scott.linder Thanks! It would be good if you could give at least an initial, 
even rough, analysis.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53329/new/

https://reviews.llvm.org/D53329



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


[PATCH] D53329: Generate DIFile with main program if source is not available

2019-01-14 Thread Scott Linder via Phabricator via cfe-commits
scott.linder added a comment.

In D53329#1356381 , @yonghong-song 
wrote:

> @dblaikie @scott.linder Have you got time to look at this issue? Looks like a 
> trivial test case will be able to reproduce the problem. I have the simple 
> example in the previous comments. Practically, `-gdwarf-5 -gembed-source` is 
> broken now.


Sorry, I haven't had a chance to look into the issue yet. I don't know if I 
will have a chance this week, and I'm on vacation next week, but I hope to be 
able to soon.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53329/new/

https://reviews.llvm.org/D53329



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


[PATCH] D55394: Re-order type param children of ObjC nodes

2019-01-14 Thread John McCall via Phabricator via cfe-commits
rjmccall added a comment.

I don't really have an opinion about this, sorry.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55394/new/

https://reviews.llvm.org/D55394



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


[PATCH] D53153: [OpenCL] Mark kernel functions with default visibility

2019-01-14 Thread John McCall via Phabricator via cfe-commits
rjmccall added a comment.

Mostly, we don't really want the abstract visibility calculation to change 
whenever we see a definition.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53153/new/

https://reviews.llvm.org/D53153



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


[PATCH] D56680: [Tooling] Make clang-tool find libc++ dir on mac when running on a file without compilation database.

2019-01-14 Thread Haojian Wu via Phabricator via cfe-commits
hokein created this revision.
hokein added a reviewer: ilya-biryukov.
Herald added a reviewer: EricWF.

This is a regression of r348365.

When clang-tools run on a file without a complation database (`clang-check 
/tmp/t.cc`),
we will use fixed compilation database as a fallback. However the actual 
compiler
path in the fallback complation command is just `clang-tool` which is
insufficient to detect the libc++ dir.


Repository:
  rC Clang

https://reviews.llvm.org/D56680

Files:
  lib/Tooling/CompilationDatabase.cpp
  test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp


Index: test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
===
--- /dev/null
+++ test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
@@ -0,0 +1,16 @@
+// Clang on MacOS can find libc++ living beside the installed compiler.
+// This test makes sure our libTooling-based tools emulate this properly with
+// fixed compilation database.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+//
+// Install the mock libc++ (simulates the libc++ directory structure).
+// RUN: cp -r %S/Inputs/mock-libcxx %t/
+//
+// RUN: cp clang-check %t/mock-libcxx/bin/
+// RUN: cp "%s" "%t/test.cpp"
+// RUN: %t/mock-libcxx/bin/clang-check -p "%t" "%t/test.cpp" -- -stdlib=libc++
+
+#include 
+vector v;
Index: lib/Tooling/CompilationDatabase.cpp
===
--- lib/Tooling/CompilationDatabase.cpp
+++ lib/Tooling/CompilationDatabase.cpp
@@ -227,6 +227,16 @@
   }
 };
 
+std::string GetClangToolCommand() {
+  static int Dummy;
+  std::string ClangExecutable =
+  llvm::sys::fs::getMainExecutable("clang", (void *));
+  SmallString<128> ClangToolPath;
+  ClangToolPath = llvm::sys::path::parent_path(ClangExecutable);
+  llvm::sys::path::append(ClangToolPath, "clang-tool");
+  return ClangToolPath.str();
+}
+
 } // namespace
 
 /// Strips any positional args and possible argv[0] from a command-line
@@ -266,9 +276,9 @@
   Diagnostics));
   NewDriver->setCheckInputsExist(false);
 
-  // This becomes the new argv[0]. The value is actually not important as it
-  // isn't used for invoking Tools.
-  Args.insert(Args.begin(), "clang-tool");
+  // This becomes the new argv[0]. The value is used to detect libc++ include
+  // dirs on Mac, it isn't used for other platforms.
+  Args.insert(Args.begin(), GetClangToolCommand().c_str());
 
   // By adding -c, we force the driver to treat compilation as the last phase.
   // It will then issue warnings via Diagnostics about un-used options that
@@ -366,7 +376,7 @@
 
 FixedCompilationDatabase::
 FixedCompilationDatabase(Twine Directory, ArrayRef CommandLine) {
-  std::vector ToolCommandLine(1, "clang-tool");
+  std::vector ToolCommandLine(1, GetClangToolCommand());
   ToolCommandLine.insert(ToolCommandLine.end(),
  CommandLine.begin(), CommandLine.end());
   CompileCommands.emplace_back(Directory, StringRef(),


Index: test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
===
--- /dev/null
+++ test/Tooling/clang-check-mac-libcxx-fixed-compilation-db.cpp
@@ -0,0 +1,16 @@
+// Clang on MacOS can find libc++ living beside the installed compiler.
+// This test makes sure our libTooling-based tools emulate this properly with
+// fixed compilation database.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+//
+// Install the mock libc++ (simulates the libc++ directory structure).
+// RUN: cp -r %S/Inputs/mock-libcxx %t/
+//
+// RUN: cp clang-check %t/mock-libcxx/bin/
+// RUN: cp "%s" "%t/test.cpp"
+// RUN: %t/mock-libcxx/bin/clang-check -p "%t" "%t/test.cpp" -- -stdlib=libc++
+
+#include 
+vector v;
Index: lib/Tooling/CompilationDatabase.cpp
===
--- lib/Tooling/CompilationDatabase.cpp
+++ lib/Tooling/CompilationDatabase.cpp
@@ -227,6 +227,16 @@
   }
 };
 
+std::string GetClangToolCommand() {
+  static int Dummy;
+  std::string ClangExecutable =
+  llvm::sys::fs::getMainExecutable("clang", (void *));
+  SmallString<128> ClangToolPath;
+  ClangToolPath = llvm::sys::path::parent_path(ClangExecutable);
+  llvm::sys::path::append(ClangToolPath, "clang-tool");
+  return ClangToolPath.str();
+}
+
 } // namespace
 
 /// Strips any positional args and possible argv[0] from a command-line
@@ -266,9 +276,9 @@
   Diagnostics));
   NewDriver->setCheckInputsExist(false);
 
-  // This becomes the new argv[0]. The value is actually not important as it
-  // isn't used for invoking Tools.
-  Args.insert(Args.begin(), "clang-tool");
+  // This becomes the new argv[0]. The value is used to detect libc++ include
+  // dirs on Mac, it isn't used for other platforms.
+  Args.insert(Args.begin(), GetClangToolCommand().c_str());
 
   // By adding -c, we force the driver to treat compilation as the last phase.
   // It will then issue warnings via Diagnostics about 

[PATCH] D56632: [analyzer] Track region liveness only through base regions.

2019-01-14 Thread Aleksei Sidorin via Phabricator via cfe-commits
a_sidorin added a comment.

Hi Artem,
This looks perfect, just some stylish issues.




Comment at: test/Analysis/symbol-reaper.cpp:13
+  void foo() {
+// Ugh, maybe just let clang_analyzer_eval() work within callees already?
+// The glob variable shouldn't keep our symbol alive because

//FIXME?



Comment at: unittests/StaticAnalyzer/SymbolReaperTest.cpp:52
+assert(Matches.size() == 1 && "Ambiguous name!");
+for (BoundNodes  : Matches)
+  return M.getNodeAs("d");

It looks like `selectFirst` helper is what you need here.



Comment at: unittests/StaticAnalyzer/SymbolReaperTest.cpp:53
+for (BoundNodes  : Matches)
+  return M.getNodeAs("d");
+llvm_unreachable("Unable to find declaration!");

This loop will be executed one time only.



Comment at: unittests/StaticAnalyzer/SymbolReaperTest.cpp:97
+  bool HandleTopLevelDecl(DeclGroupRef DG) override {
+for (auto D: DG)
+  performTest(D);

Nit: `const auto *D : DG`


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56632/new/

https://reviews.llvm.org/D56632



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


[PATCH] D56463: [SEH] Pass the frame pointer from SEH finally to finally functions

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk accepted this revision.
rnk added a comment.
This revision is now accepted and ready to land.

lgtm

Thanks! I'm surprised we passed as much of the Microsoft exception tests as we 
did with this bug. Maybe it regressed.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56463/new/

https://reviews.llvm.org/D56463



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


[PATCH] D56647: [WIP] [ELF] Implement --copy-dt-needed-entries

2019-01-14 Thread Joerg Sonnenberger via Phabricator via cfe-commits
joerg added a comment.

As first step, it goes into the right direction. I would explicitly set 
--as-needed for all those indirectly loaded objects. If people want to retain 
the questionable behavior of newer GNU tools, it could be a separate flag so 
that a final round can warn if an indirectly pulled library is necessary, but 
that behavior doesn't IMO make much sense. Full version has to look at 
DT_RUNPATH/DT_RPATH and also --rpath-link.


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56647/new/

https://reviews.llvm.org/D56647



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


[PATCH] D56642: NFC: Move dump of type nodes to NodeDumper

2019-01-14 Thread Stephen Kelly via Phabricator via cfe-commits
steveire updated this revision to Diff 181632.
steveire added a comment.

Nits


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56642/new/

https://reviews.llvm.org/D56642

Files:
  include/clang/AST/TextNodeDumper.h
  lib/AST/ASTDumper.cpp
  lib/AST/TextNodeDumper.cpp

Index: lib/AST/TextNodeDumper.cpp
===
--- lib/AST/TextNodeDumper.cpp
+++ lib/AST/TextNodeDumper.cpp
@@ -12,6 +12,7 @@
 //===--===//
 
 #include "clang/AST/TextNodeDumper.h"
+#include "clang/AST/DeclTemplate.h"
 #include "clang/AST/LocInfoType.h"
 
 using namespace clang;
@@ -170,6 +171,8 @@
 OS << " contains_unexpanded_pack";
   if (T->isFromAST())
 OS << " imported";
+
+  TypeVisitor::Visit(T);
 }
 
 void TextNodeDumper::Visit(QualType T) {
@@ -886,3 +889,161 @@
 void TextNodeDumper::VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *Node) {
   OS << " " << (Node->getValue() ? "__objc_yes" : "__objc_no");
 }
+
+void TextNodeDumper::VisitRValueReferenceType(const ReferenceType *T) {
+  if (T->isSpelledAsLValue())
+OS << " written as lvalue reference";
+}
+
+void TextNodeDumper::VisitArrayType(const ArrayType *T) {
+  switch (T->getSizeModifier()) {
+  case ArrayType::Normal:
+break;
+  case ArrayType::Static:
+OS << " static";
+break;
+  case ArrayType::Star:
+OS << " *";
+break;
+  }
+  OS << " " << T->getIndexTypeQualifiers().getAsString();
+}
+
+void TextNodeDumper::VisitConstantArrayType(const ConstantArrayType *T) {
+  OS << " " << T->getSize();
+  VisitArrayType(T);
+}
+
+void TextNodeDumper::VisitVariableArrayType(const VariableArrayType *T) {
+  OS << " ";
+  dumpSourceRange(T->getBracketsRange());
+  VisitArrayType(T);
+}
+
+void TextNodeDumper::VisitDependentSizedArrayType(
+const DependentSizedArrayType *T) {
+  VisitArrayType(T);
+  OS << " ";
+  dumpSourceRange(T->getBracketsRange());
+}
+
+void TextNodeDumper::VisitDependentSizedExtVectorType(
+const DependentSizedExtVectorType *T) {
+  OS << " ";
+  dumpLocation(T->getAttributeLoc());
+}
+
+void TextNodeDumper::VisitVectorType(const VectorType *T) {
+  switch (T->getVectorKind()) {
+  case VectorType::GenericVector:
+break;
+  case VectorType::AltiVecVector:
+OS << " altivec";
+break;
+  case VectorType::AltiVecPixel:
+OS << " altivec pixel";
+break;
+  case VectorType::AltiVecBool:
+OS << " altivec bool";
+break;
+  case VectorType::NeonVector:
+OS << " neon";
+break;
+  case VectorType::NeonPolyVector:
+OS << " neon poly";
+break;
+  }
+  OS << " " << T->getNumElements();
+}
+
+void TextNodeDumper::VisitFunctionType(const FunctionType *T) {
+  auto EI = T->getExtInfo();
+  if (EI.getNoReturn())
+OS << " noreturn";
+  if (EI.getProducesResult())
+OS << " produces_result";
+  if (EI.getHasRegParm())
+OS << " regparm " << EI.getRegParm();
+  OS << " " << FunctionType::getNameForCallConv(EI.getCC());
+}
+
+void TextNodeDumper::VisitFunctionProtoType(const FunctionProtoType *T) {
+  auto EPI = T->getExtProtoInfo();
+  if (EPI.HasTrailingReturn)
+OS << " trailing_return";
+  if (T->isConst())
+OS << " const";
+  if (T->isVolatile())
+OS << " volatile";
+  if (T->isRestrict())
+OS << " restrict";
+  switch (EPI.RefQualifier) {
+  case RQ_None:
+break;
+  case RQ_LValue:
+OS << " &";
+break;
+  case RQ_RValue:
+OS << " &&";
+break;
+  }
+  // FIXME: Exception specification.
+  // FIXME: Consumed parameters.
+  VisitFunctionType(T);
+}
+
+void TextNodeDumper::VisitUnresolvedUsingType(const UnresolvedUsingType *T) {
+  dumpDeclRef(T->getDecl());
+}
+
+void TextNodeDumper::VisitTypedefType(const TypedefType *T) {
+  dumpDeclRef(T->getDecl());
+}
+
+void TextNodeDumper::VisitUnaryTransformType(const UnaryTransformType *T) {
+  switch (T->getUTTKind()) {
+  case UnaryTransformType::EnumUnderlyingType:
+OS << " underlying_type";
+break;
+  }
+}
+
+void TextNodeDumper::VisitTagType(const TagType *T) {
+  dumpDeclRef(T->getDecl());
+}
+
+void TextNodeDumper::VisitTemplateTypeParmType(const TemplateTypeParmType *T) {
+  OS << " depth " << T->getDepth() << " index " << T->getIndex();
+  if (T->isParameterPack())
+OS << " pack";
+  dumpDeclRef(T->getDecl());
+}
+
+void TextNodeDumper::VisitAutoType(const AutoType *T) {
+  if (T->isDecltypeAuto())
+OS << " decltype(auto)";
+  if (!T->isDeduced())
+OS << " undeduced";
+}
+
+void TextNodeDumper::VisitTemplateSpecializationType(
+const TemplateSpecializationType *T) {
+  if (T->isTypeAlias())
+OS << " alias";
+  OS << " ";
+  T->getTemplateName().dump(OS);
+}
+
+void TextNodeDumper::VisitInjectedClassNameType(
+const InjectedClassNameType *T) {
+  dumpDeclRef(T->getDecl());
+}
+
+void TextNodeDumper::VisitObjCInterfaceType(const ObjCInterfaceType *T) {
+  dumpDeclRef(T->getDecl());
+}
+
+void 

[PATCH] D55483: Introduce the callback attribute and emit !callback metadata

2019-01-14 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert updated this revision to Diff 181631.
jdoerfert added a comment.

Generalize the treatment of "kw_this" as "kw_ident"


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55483/new/

https://reviews.llvm.org/D55483

Files:
  include/clang/AST/ASTContext.h
  include/clang/Basic/Attr.td
  include/clang/Basic/AttrDocs.td
  include/clang/Basic/Builtins.def
  include/clang/Basic/Builtins.h
  include/clang/Basic/DiagnosticSemaKinds.td
  lib/AST/ASTContext.cpp
  lib/Basic/Builtins.cpp
  lib/CodeGen/CGOpenMPRuntime.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/Parse/ParseDecl.cpp
  lib/Sema/SemaDecl.cpp
  lib/Sema/SemaDeclAttr.cpp
  test/Analysis/retain-release.m
  test/CodeGen/attr-callback.c
  test/CodeGen/callback_annotated.c
  test/CodeGen/callback_openmp.c
  test/CodeGen/callback_pthread_create.c
  test/CodeGenCXX/attr-callback.cpp
  test/Misc/pragma-attribute-supported-attributes-list.test
  test/OpenMP/parallel_codegen.cpp
  test/Sema/attr-callback-broken.c
  test/Sema/attr-callback.c
  test/SemaCXX/attr-callback-broken.cpp
  test/SemaCXX/attr-callback.cpp
  utils/TableGen/ClangAttrEmitter.cpp

Index: utils/TableGen/ClangAttrEmitter.cpp
===
--- utils/TableGen/ClangAttrEmitter.cpp
+++ utils/TableGen/ClangAttrEmitter.cpp
@@ -775,6 +775,11 @@
 }
   };
 
+  struct VariadicParamOrParamIdxArgument : public VariadicArgument {
+VariadicParamOrParamIdxArgument(const Record , StringRef Attr)
+: VariadicArgument(Arg, Attr, "int") {}
+  };
+
   // Unique the enums, but maintain the original declaration ordering.
   std::vector
   uniqueEnumsInOrder(const std::vector ) {
@@ -1283,6 +1288,8 @@
 Ptr = llvm::make_unique(Arg, Attr);
   else if (ArgName == "VariadicParamIdxArgument")
 Ptr = llvm::make_unique(Arg, Attr);
+  else if (ArgName == "VariadicParamOrParamIdxArgument")
+Ptr = llvm::make_unique(Arg, Attr);
   else if (ArgName == "ParamIdxArgument")
 Ptr = llvm::make_unique(Arg, Attr, "ParamIdx");
   else if (ArgName == "VariadicIdentifierArgument")
@@ -2116,6 +2123,7 @@
  llvm::StringSwitch(
  Arg->getSuperClasses().back().first->getName())
  .Case("VariadicIdentifierArgument", true)
+ .Case("VariadicParamOrParamIdxArgument", true)
  .Default(false);
 }
 
@@ -2158,6 +2166,34 @@
   OS << "#endif // CLANG_ATTR_IDENTIFIER_ARG_LIST\n\n";
 }
 
+static bool keywordThisIsaIdentifierInArgument(Record *Arg) {
+  return !Arg->getSuperClasses().empty() &&
+ llvm::StringSwitch(
+ Arg->getSuperClasses().back().first->getName())
+ .Case("VariadicParamOrParamIdxArgument", true)
+ .Default(false);
+}
+
+static void emitClangAttrThisIsaIdentifierArgList(RecordKeeper ,
+  raw_ostream ) {
+  OS << "#if defined(CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST)\n";
+  std::vector Attrs = Records.getAllDerivedDefinitions("Attr");
+  for (const auto *A : Attrs) {
+// Determine whether the first argument is a variadic identifier.
+std::vector Args = A->getValueAsListOfDefs("Args");
+if (Args.empty() || !keywordThisIsaIdentifierInArgument(Args[0]))
+  continue;
+
+// All these spellings take an identifier argument.
+forEachUniqueSpelling(*A, [&](const FlattenedSpelling ) {
+  OS << ".Case(\"" << S.name() << "\", "
+ << "true"
+ << ")\n";
+});
+  }
+  OS << "#endif // CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST\n\n";
+}
+
 namespace clang {
 
 // Emits the class definitions for attributes.
@@ -3738,6 +3774,7 @@
   emitClangAttrArgContextList(Records, OS);
   emitClangAttrIdentifierArgList(Records, OS);
   emitClangAttrVariadicIdentifierArgList(Records, OS);
+  emitClangAttrThisIsaIdentifierArgList(Records, OS);
   emitClangAttrTypeArgList(Records, OS);
   emitClangAttrLateParsedList(Records, OS);
 }
Index: test/SemaCXX/attr-callback.cpp
===
--- /dev/null
+++ test/SemaCXX/attr-callback.cpp
@@ -0,0 +1,67 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+// expected-no-diagnostics
+
+class C_in_class {
+#include "../Sema/attr-callback.c"
+};
+
+struct Base {
+
+  void no_args_1(void (*callback)(void));
+  __attribute__((callback(1))) void no_args_2(void (*callback)(void));
+  __attribute__((callback(callback))) void no_args_3(void (*callback)(void)) {}
+
+  __attribute__((callback(1, 0))) virtual void
+  this_tr(void (*callback)(Base *));
+
+  __attribute__((callback(1, this, __, this))) virtual void
+  this_unknown_this(void (*callback)(Base *, Base *, Base *));
+
+  __attribute__((callback(1))) virtual void
+  virtual_1(void (*callback)(void));
+
+  __attribute__((callback(callback))) virtual void
+  virtual_2(void (*callback)(void));
+
+  __attribute__((callback(1))) virtual void
+  virtual_3(void (*callback)(void));
+};
+
+__attribute__((callback(1))) void

[PATCH] D56652: [CMake][Fuchsia] Synchronize first and second stage builds

2019-01-14 Thread Roland McGrath via Phabricator via cfe-commits
mcgrathr accepted this revision.
mcgrathr added a comment.
This revision is now accepted and ready to land.

lgtm


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56652/new/

https://reviews.llvm.org/D56652



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


[PATCH] D56671: [COFF, ARM64] Add __nop intrinsic

2019-01-14 Thread Reid Kleckner via Phabricator via cfe-commits
rnk accepted this revision.
rnk added a comment.

lgtm


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56671/new/

https://reviews.llvm.org/D56671



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


r351116 - [ASTDump] NFC: Move dumping of QualType node to TextNodeDumper

2019-01-14 Thread Stephen Kelly via cfe-commits
Author: steveire
Date: Mon Jan 14 12:15:29 2019
New Revision: 351116

URL: http://llvm.org/viewvc/llvm-project?rev=351116=rev
Log:
[ASTDump] NFC: Move dumping of QualType node to TextNodeDumper

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

Modified:
cfe/trunk/include/clang/AST/TextNodeDumper.h
cfe/trunk/lib/AST/ASTDumper.cpp
cfe/trunk/lib/AST/TextNodeDumper.cpp

Modified: cfe/trunk/include/clang/AST/TextNodeDumper.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TextNodeDumper.h?rev=351116=351115=351116=diff
==
--- cfe/trunk/include/clang/AST/TextNodeDumper.h (original)
+++ cfe/trunk/include/clang/AST/TextNodeDumper.h Mon Jan 14 12:15:29 2019
@@ -161,6 +161,8 @@ public:
 
   void Visit(const Type *T);
 
+  void Visit(QualType T);
+
   void dumpPointer(const void *Ptr);
   void dumpLocation(SourceLocation Loc);
   void dumpSourceRange(SourceRange R);

Modified: cfe/trunk/lib/AST/ASTDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=351116=351115=351116=diff
==
--- cfe/trunk/lib/AST/ASTDumper.cpp (original)
+++ cfe/trunk/lib/AST/ASTDumper.cpp Mon Jan 14 12:15:29 2019
@@ -422,11 +422,7 @@ void ASTDumper::dumpTypeAsChild(QualType
 return dumpTypeAsChild(SQT.Ty);
 
   dumpChild([=] {
-OS << "QualType";
-NodeDumper.dumpPointer(T.getAsOpaquePtr());
-OS << " ";
-NodeDumper.dumpBareType(T, false);
-OS << " " << T.split().Quals.getAsString();
+NodeDumper.Visit(T);
 dumpTypeAsChild(T.split().Ty);
   });
 }

Modified: cfe/trunk/lib/AST/TextNodeDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=351116=351115=351116=diff
==
--- cfe/trunk/lib/AST/TextNodeDumper.cpp (original)
+++ cfe/trunk/lib/AST/TextNodeDumper.cpp Mon Jan 14 12:15:29 2019
@@ -172,6 +172,14 @@ void TextNodeDumper::Visit(const Type *T
 OS << " imported";
 }
 
+void TextNodeDumper::Visit(QualType T) {
+  OS << "QualType";
+  dumpPointer(T.getAsOpaquePtr());
+  OS << " ";
+  dumpBareType(T, false);
+  OS << " " << T.split().Quals.getAsString();
+}
+
 void TextNodeDumper::dumpPointer(const void *Ptr) {
   ColorScope Color(OS, ShowColors, AddressColor);
   OS << ' ' << Ptr;


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


[PATCH] D56641: NFC: Move dumping of QualType node to TextNodeDumper

2019-01-14 Thread Stephen Kelly via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL351116: [ASTDump] NFC: Move dumping of QualType node to 
TextNodeDumper (authored by steveire, committed by ).
Herald added a subscriber: llvm-commits.

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56641/new/

https://reviews.llvm.org/D56641

Files:
  cfe/trunk/include/clang/AST/TextNodeDumper.h
  cfe/trunk/lib/AST/ASTDumper.cpp
  cfe/trunk/lib/AST/TextNodeDumper.cpp


Index: cfe/trunk/include/clang/AST/TextNodeDumper.h
===
--- cfe/trunk/include/clang/AST/TextNodeDumper.h
+++ cfe/trunk/include/clang/AST/TextNodeDumper.h
@@ -161,6 +161,8 @@
 
   void Visit(const Type *T);
 
+  void Visit(QualType T);
+
   void dumpPointer(const void *Ptr);
   void dumpLocation(SourceLocation Loc);
   void dumpSourceRange(SourceRange R);
Index: cfe/trunk/lib/AST/TextNodeDumper.cpp
===
--- cfe/trunk/lib/AST/TextNodeDumper.cpp
+++ cfe/trunk/lib/AST/TextNodeDumper.cpp
@@ -172,6 +172,14 @@
 OS << " imported";
 }
 
+void TextNodeDumper::Visit(QualType T) {
+  OS << "QualType";
+  dumpPointer(T.getAsOpaquePtr());
+  OS << " ";
+  dumpBareType(T, false);
+  OS << " " << T.split().Quals.getAsString();
+}
+
 void TextNodeDumper::dumpPointer(const void *Ptr) {
   ColorScope Color(OS, ShowColors, AddressColor);
   OS << ' ' << Ptr;
Index: cfe/trunk/lib/AST/ASTDumper.cpp
===
--- cfe/trunk/lib/AST/ASTDumper.cpp
+++ cfe/trunk/lib/AST/ASTDumper.cpp
@@ -422,11 +422,7 @@
 return dumpTypeAsChild(SQT.Ty);
 
   dumpChild([=] {
-OS << "QualType";
-NodeDumper.dumpPointer(T.getAsOpaquePtr());
-OS << " ";
-NodeDumper.dumpBareType(T, false);
-OS << " " << T.split().Quals.getAsString();
+NodeDumper.Visit(T);
 dumpTypeAsChild(T.split().Ty);
   });
 }


Index: cfe/trunk/include/clang/AST/TextNodeDumper.h
===
--- cfe/trunk/include/clang/AST/TextNodeDumper.h
+++ cfe/trunk/include/clang/AST/TextNodeDumper.h
@@ -161,6 +161,8 @@
 
   void Visit(const Type *T);
 
+  void Visit(QualType T);
+
   void dumpPointer(const void *Ptr);
   void dumpLocation(SourceLocation Loc);
   void dumpSourceRange(SourceRange R);
Index: cfe/trunk/lib/AST/TextNodeDumper.cpp
===
--- cfe/trunk/lib/AST/TextNodeDumper.cpp
+++ cfe/trunk/lib/AST/TextNodeDumper.cpp
@@ -172,6 +172,14 @@
 OS << " imported";
 }
 
+void TextNodeDumper::Visit(QualType T) {
+  OS << "QualType";
+  dumpPointer(T.getAsOpaquePtr());
+  OS << " ";
+  dumpBareType(T, false);
+  OS << " " << T.split().Quals.getAsString();
+}
+
 void TextNodeDumper::dumpPointer(const void *Ptr) {
   ColorScope Color(OS, ShowColors, AddressColor);
   OS << ' ' << Ptr;
Index: cfe/trunk/lib/AST/ASTDumper.cpp
===
--- cfe/trunk/lib/AST/ASTDumper.cpp
+++ cfe/trunk/lib/AST/ASTDumper.cpp
@@ -422,11 +422,7 @@
 return dumpTypeAsChild(SQT.Ty);
 
   dumpChild([=] {
-OS << "QualType";
-NodeDumper.dumpPointer(T.getAsOpaquePtr());
-OS << " ";
-NodeDumper.dumpBareType(T, false);
-OS << " " << T.split().Quals.getAsString();
+NodeDumper.Visit(T);
 dumpTypeAsChild(T.split().Ty);
   });
 }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56640: NFC: Canonicalize handling of TypeLocInfo

2019-01-14 Thread Stephen Kelly via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351115: [ASTDump] NFC: Canonicalize handling of TypeLocInfo 
(authored by steveire, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D56640?vs=181449=181626#toc

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56640/new/

https://reviews.llvm.org/D56640

Files:
  lib/AST/ASTDumper.cpp


Index: lib/AST/ASTDumper.cpp
===
--- lib/AST/ASTDumper.cpp
+++ lib/AST/ASTDumper.cpp
@@ -122,6 +122,9 @@
 void VisitComplexType(const ComplexType *T) {
   dumpTypeAsChild(T->getElementType());
 }
+void VisitLocInfoType(const LocInfoType *T) {
+  dumpTypeAsChild(T->getTypeSourceInfo()->getType());
+}
 void VisitPointerType(const PointerType *T) {
   dumpTypeAsChild(T->getPointeeType());
 }
@@ -433,10 +436,6 @@
 NodeDumper.Visit(T);
 if (!T)
   return;
-if (const LocInfoType *LIT = llvm::dyn_cast(T)) {
-  dumpTypeAsChild(LIT->getTypeSourceInfo()->getType());
-  return;
-}
 TypeVisitor::Visit(T);
 
 QualType SingleStepDesugar =


Index: lib/AST/ASTDumper.cpp
===
--- lib/AST/ASTDumper.cpp
+++ lib/AST/ASTDumper.cpp
@@ -122,6 +122,9 @@
 void VisitComplexType(const ComplexType *T) {
   dumpTypeAsChild(T->getElementType());
 }
+void VisitLocInfoType(const LocInfoType *T) {
+  dumpTypeAsChild(T->getTypeSourceInfo()->getType());
+}
 void VisitPointerType(const PointerType *T) {
   dumpTypeAsChild(T->getPointeeType());
 }
@@ -433,10 +436,6 @@
 NodeDumper.Visit(T);
 if (!T)
   return;
-if (const LocInfoType *LIT = llvm::dyn_cast(T)) {
-  dumpTypeAsChild(LIT->getTypeSourceInfo()->getType());
-  return;
-}
 TypeVisitor::Visit(T);
 
 QualType SingleStepDesugar =
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351115 - [ASTDump] NFC: Canonicalize handling of TypeLocInfo

2019-01-14 Thread Stephen Kelly via cfe-commits
Author: steveire
Date: Mon Jan 14 12:13:09 2019
New Revision: 351115

URL: http://llvm.org/viewvc/llvm-project?rev=351115=rev
Log:
[ASTDump] NFC: Canonicalize handling of TypeLocInfo

Summary: No need to avoid the Visit method.

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

Modified:
cfe/trunk/lib/AST/ASTDumper.cpp

Modified: cfe/trunk/lib/AST/ASTDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=351115=351114=351115=diff
==
--- cfe/trunk/lib/AST/ASTDumper.cpp (original)
+++ cfe/trunk/lib/AST/ASTDumper.cpp Mon Jan 14 12:13:09 2019
@@ -122,6 +122,9 @@ namespace  {
 void VisitComplexType(const ComplexType *T) {
   dumpTypeAsChild(T->getElementType());
 }
+void VisitLocInfoType(const LocInfoType *T) {
+  dumpTypeAsChild(T->getTypeSourceInfo()->getType());
+}
 void VisitPointerType(const PointerType *T) {
   dumpTypeAsChild(T->getPointeeType());
 }
@@ -433,10 +436,6 @@ void ASTDumper::dumpTypeAsChild(const Ty
 NodeDumper.Visit(T);
 if (!T)
   return;
-if (const LocInfoType *LIT = llvm::dyn_cast(T)) {
-  dumpTypeAsChild(LIT->getTypeSourceInfo()->getType());
-  return;
-}
 TypeVisitor::Visit(T);
 
 QualType SingleStepDesugar =


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


[PATCH] D56639: NFC: Move Type Visit implementation to TextNodeDumper

2019-01-14 Thread Stephen Kelly via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351114: [ASTDump] NFC: Move Type Visit implementation to 
TextNodeDumper (authored by steveire, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D56639?vs=181448=181625#toc

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56639/new/

https://reviews.llvm.org/D56639

Files:
  include/clang/AST/TextNodeDumper.h
  lib/AST/ASTDumper.cpp
  lib/AST/TextNodeDumper.cpp

Index: include/clang/AST/TextNodeDumper.h
===
--- include/clang/AST/TextNodeDumper.h
+++ include/clang/AST/TextNodeDumper.h
@@ -159,6 +159,8 @@
 
   void Visit(const Stmt *Node);
 
+  void Visit(const Type *T);
+
   void dumpPointer(const void *Ptr);
   void dumpLocation(SourceLocation Loc);
   void dumpSourceRange(SourceRange R);
Index: lib/AST/ASTDumper.cpp
===
--- lib/AST/ASTDumper.cpp
+++ lib/AST/ASTDumper.cpp
@@ -430,47 +430,18 @@
 
 void ASTDumper::dumpTypeAsChild(const Type *T) {
   dumpChild([=] {
-if (!T) {
-  ColorScope Color(OS, ShowColors, NullColor);
-  OS << "<<>>";
+NodeDumper.Visit(T);
+if (!T)
   return;
-}
 if (const LocInfoType *LIT = llvm::dyn_cast(T)) {
-  {
-ColorScope Color(OS, ShowColors, TypeColor);
-OS << "LocInfo Type";
-  }
-  NodeDumper.dumpPointer(T);
   dumpTypeAsChild(LIT->getTypeSourceInfo()->getType());
   return;
 }
-
-{
-  ColorScope Color(OS, ShowColors, TypeColor);
-  OS << T->getTypeClassName() << "Type";
-}
-NodeDumper.dumpPointer(T);
-OS << " ";
-NodeDumper.dumpBareType(QualType(T, 0), false);
+TypeVisitor::Visit(T);
 
 QualType SingleStepDesugar =
 T->getLocallyUnqualifiedSingleStepDesugaredType();
 if (SingleStepDesugar != QualType(T, 0))
-  OS << " sugar";
-if (T->isDependentType())
-  OS << " dependent";
-else if (T->isInstantiationDependentType())
-  OS << " instantiation_dependent";
-if (T->isVariablyModifiedType())
-  OS << " variably_modified";
-if (T->containsUnexpandedParameterPack())
-  OS << " contains_unexpanded_pack";
-if (T->isFromAST())
-  OS << " imported";
-
-TypeVisitor::Visit(T);
-
-if (SingleStepDesugar != QualType(T, 0))
   dumpTypeAsChild(SingleStepDesugar);
   });
 }
Index: lib/AST/TextNodeDumper.cpp
===
--- lib/AST/TextNodeDumper.cpp
+++ lib/AST/TextNodeDumper.cpp
@@ -12,6 +12,7 @@
 //===--===//
 
 #include "clang/AST/TextNodeDumper.h"
+#include "clang/AST/LocInfoType.h"
 
 using namespace clang;
 
@@ -130,6 +131,47 @@
   ConstStmtVisitor::Visit(Node);
 }
 
+void TextNodeDumper::Visit(const Type *T) {
+  if (!T) {
+ColorScope Color(OS, ShowColors, NullColor);
+OS << "<<>>";
+return;
+  }
+  if (isa(T)) {
+{
+  ColorScope Color(OS, ShowColors, TypeColor);
+  OS << "LocInfo Type";
+}
+dumpPointer(T);
+return;
+  }
+
+  {
+ColorScope Color(OS, ShowColors, TypeColor);
+OS << T->getTypeClassName() << "Type";
+  }
+  dumpPointer(T);
+  OS << " ";
+  dumpBareType(QualType(T, 0), false);
+
+  QualType SingleStepDesugar =
+  T->getLocallyUnqualifiedSingleStepDesugaredType();
+  if (SingleStepDesugar != QualType(T, 0))
+OS << " sugar";
+
+  if (T->isDependentType())
+OS << " dependent";
+  else if (T->isInstantiationDependentType())
+OS << " instantiation_dependent";
+
+  if (T->isVariablyModifiedType())
+OS << " variably_modified";
+  if (T->containsUnexpandedParameterPack())
+OS << " contains_unexpanded_pack";
+  if (T->isFromAST())
+OS << " imported";
+}
+
 void TextNodeDumper::dumpPointer(const void *Ptr) {
   ColorScope Color(OS, ShowColors, AddressColor);
   OS << ' ' << Ptr;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351114 - [ASTDump] NFC: Move Type Visit implementation to TextNodeDumper

2019-01-14 Thread Stephen Kelly via cfe-commits
Author: steveire
Date: Mon Jan 14 12:11:02 2019
New Revision: 351114

URL: http://llvm.org/viewvc/llvm-project?rev=351114=rev
Log:
[ASTDump] NFC: Move Type Visit implementation to TextNodeDumper

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

Modified:
cfe/trunk/include/clang/AST/TextNodeDumper.h
cfe/trunk/lib/AST/ASTDumper.cpp
cfe/trunk/lib/AST/TextNodeDumper.cpp

Modified: cfe/trunk/include/clang/AST/TextNodeDumper.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TextNodeDumper.h?rev=351114=351113=351114=diff
==
--- cfe/trunk/include/clang/AST/TextNodeDumper.h (original)
+++ cfe/trunk/include/clang/AST/TextNodeDumper.h Mon Jan 14 12:11:02 2019
@@ -159,6 +159,8 @@ public:
 
   void Visit(const Stmt *Node);
 
+  void Visit(const Type *T);
+
   void dumpPointer(const void *Ptr);
   void dumpLocation(SourceLocation Loc);
   void dumpSourceRange(SourceRange R);

Modified: cfe/trunk/lib/AST/ASTDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=351114=351113=351114=diff
==
--- cfe/trunk/lib/AST/ASTDumper.cpp (original)
+++ cfe/trunk/lib/AST/ASTDumper.cpp Mon Jan 14 12:11:02 2019
@@ -430,47 +430,18 @@ void ASTDumper::dumpTypeAsChild(QualType
 
 void ASTDumper::dumpTypeAsChild(const Type *T) {
   dumpChild([=] {
-if (!T) {
-  ColorScope Color(OS, ShowColors, NullColor);
-  OS << "<<>>";
+NodeDumper.Visit(T);
+if (!T)
   return;
-}
 if (const LocInfoType *LIT = llvm::dyn_cast(T)) {
-  {
-ColorScope Color(OS, ShowColors, TypeColor);
-OS << "LocInfo Type";
-  }
-  NodeDumper.dumpPointer(T);
   dumpTypeAsChild(LIT->getTypeSourceInfo()->getType());
   return;
 }
-
-{
-  ColorScope Color(OS, ShowColors, TypeColor);
-  OS << T->getTypeClassName() << "Type";
-}
-NodeDumper.dumpPointer(T);
-OS << " ";
-NodeDumper.dumpBareType(QualType(T, 0), false);
+TypeVisitor::Visit(T);
 
 QualType SingleStepDesugar =
 T->getLocallyUnqualifiedSingleStepDesugaredType();
 if (SingleStepDesugar != QualType(T, 0))
-  OS << " sugar";
-if (T->isDependentType())
-  OS << " dependent";
-else if (T->isInstantiationDependentType())
-  OS << " instantiation_dependent";
-if (T->isVariablyModifiedType())
-  OS << " variably_modified";
-if (T->containsUnexpandedParameterPack())
-  OS << " contains_unexpanded_pack";
-if (T->isFromAST())
-  OS << " imported";
-
-TypeVisitor::Visit(T);
-
-if (SingleStepDesugar != QualType(T, 0))
   dumpTypeAsChild(SingleStepDesugar);
   });
 }

Modified: cfe/trunk/lib/AST/TextNodeDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=351114=351113=351114=diff
==
--- cfe/trunk/lib/AST/TextNodeDumper.cpp (original)
+++ cfe/trunk/lib/AST/TextNodeDumper.cpp Mon Jan 14 12:11:02 2019
@@ -12,6 +12,7 @@
 
//===--===//
 
 #include "clang/AST/TextNodeDumper.h"
+#include "clang/AST/LocInfoType.h"
 
 using namespace clang;
 
@@ -130,6 +131,47 @@ void TextNodeDumper::Visit(const Stmt *N
   ConstStmtVisitor::Visit(Node);
 }
 
+void TextNodeDumper::Visit(const Type *T) {
+  if (!T) {
+ColorScope Color(OS, ShowColors, NullColor);
+OS << "<<>>";
+return;
+  }
+  if (isa(T)) {
+{
+  ColorScope Color(OS, ShowColors, TypeColor);
+  OS << "LocInfo Type";
+}
+dumpPointer(T);
+return;
+  }
+
+  {
+ColorScope Color(OS, ShowColors, TypeColor);
+OS << T->getTypeClassName() << "Type";
+  }
+  dumpPointer(T);
+  OS << " ";
+  dumpBareType(QualType(T, 0), false);
+
+  QualType SingleStepDesugar =
+  T->getLocallyUnqualifiedSingleStepDesugaredType();
+  if (SingleStepDesugar != QualType(T, 0))
+OS << " sugar";
+
+  if (T->isDependentType())
+OS << " dependent";
+  else if (T->isInstantiationDependentType())
+OS << " instantiation_dependent";
+
+  if (T->isVariablyModifiedType())
+OS << " variably_modified";
+  if (T->containsUnexpandedParameterPack())
+OS << " contains_unexpanded_pack";
+  if (T->isFromAST())
+OS << " imported";
+}
+
 void TextNodeDumper::dumpPointer(const void *Ptr) {
   ColorScope Color(OS, ShowColors, AddressColor);
   OS << ' ' << Ptr;


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


[PATCH] D56571: [RFC prototype] Implementation of asm-goto support in clang

2019-01-14 Thread Eli Friedman via Phabricator via cfe-commits
efriedma added inline comments.



Comment at: lib/Sema/SemaStmtAsm.cpp:470
+if (NS->isGCCAsmGoto() &&
+Exprs[ConstraintIdx]->getStmtClass() == Stmt::AddrLabelExprClass)
+  break;

jyu2 wrote:
> efriedma wrote:
> > jyu2 wrote:
> > > jyu2 wrote:
> > > > efriedma wrote:
> > > > > jyu2 wrote:
> > > > > > efriedma wrote:
> > > > > > > jyu2 wrote:
> > > > > > > > efriedma wrote:
> > > > > > > > > This looks suspicious; an AddrLabelExpr could be an input or 
> > > > > > > > > output, e.g. `"r"(&)`.
> > > > > > > > Syntax for asm goto:
> > > > > > > >  Syntax:
> > > > > > > >asm [volatile] goto ( AssemblerTemplate
> > > > > > > >:
> > > > > > > >: InputOperands
> > > > > > > >: Clobbers
> > > > > > > >: GotoLabels)
> > > > > > > > 
> > > > > > > >  Only input is allowed.  Output is not allowed
> > > > > > > > 
> > > > > > > That doesn't really address my point here... ignore the "or 
> > > > > > > output" part of the comment.
> > > > > > Sorry did not realize that.  Thank you so much for catching that.  
> > > > > > Need to add other condition "ConstraintIdx > NS->getNumInputs() - 
> > > > > > 1", change to :
> > > > > > 
> > > > > > if (NS->isGCCAsmGoto() && ConstraintIdx > NS->getNumInputs() - 1 &&
> > > > > > Exprs[ConstraintIdx]->getStmtClass() == 
> > > > > > Stmt::AddrLabelExprClass)
> > > > > >   break;
> > > > > > 
> > > > > > Is this ok with you?  Thanks
> > > > > That's the right idea. But I still see a few issues at that point:
> > > > > 
> > > > > 1. The AddrLabelExprClass check is redundant.
> > > > > 2. "NS->getNumInputs() - 1" can overflow; probably should use 
> > > > > "ConstraintIdx >= NS->getNumInputs()".
> > > > > 3. "break" exits the loop completely (so it skips validating all 
> > > > > constraints written after the label).
> > > > > 4. The code needs to verify that the user correctly specified the "l" 
> > > > > constraint modifier.
> > > > Sorry not done yet.  
> > > For you comment 4:
> > > 
> > > The code needs to verify that the user correctly specified the "l" 
> > > constraint modifier.  We already emit error like following?
> > > 
> > > Do you mean, we need more checking here?  Thanks. 
> > > 
> > > n.c:4:35: error: unknown symbolic operand name in inline assembly string
> > >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > > ~~^~~
> > > n.c:8:15: error: use of undeclared label 'error1'
> > > : error1);
> > > 
> > > Test is:
> > > int frob(int x)
> > > {
> > >   int y;
> > >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > > : /* No outputs. */
> > > : "r"(x), "r"()
> > > : "memory"
> > > : error1);
> > >   return y;
> > > error:
> > >   return -1;
> > > }
> > > 
> > > 
> > I mean, there needs to be a diagnostic for the following:
> > 
> > ```
> > asm goto ("jne %h0"x);
> > ```
> > 
> > On a related note, there should also be a diagnostic for the following 
> > somewhere:
> > 
> > ```
> > asm ("jne %l0"::"r"(0));
> > ```
> Hi Eli,
> 
> Thanks for your review.
> 
> For case:
> asm goto ("jne %h0"x);
> 
> Without define label x, both clang and my current implementation give error 
> of "use of undeclared label"
> 
> if x is defined: gcc give error 
> asm_goto>!gcc
> gcc n.c
> n.c: Assembler messages:
> n.c:4: Error: operand type mismatch for `jne'
> 
> My current implementation don't emit error.  I think this is need to be done 
> in LLVM.  Am I right here?
> 
> For the case:
> asm ("jne %l0"::"r"(0));
> 
> gcc don't allow any modifier 'l' with  asm stmt but it allows with asm goto.  
> Is that something you are look for?  Thanks.
> 
> So I add code in AST/Stmt.cpp to emit error.
> .
>  return diag::err_asm_invalid_escape;
>   } else if (!this->isGCCAsmGoto() && EscapedChar == 'l' &&
>  isDigit(*CurPtr)) {
> DiagOffs = CurPtr-StrStart;
> return diag::err_asm_invalid_operand_number;
>   }
> 
For the first one, I was trying with Aarch64 gcc; I guess x86 doesn't emit the 
same error?  `void f() { x: asm goto ("jne %i0"x);}` should be the same for 
both.

> gcc don't allow any modifier 'l' with asm stmt but it allows with asm goto. 
> Is that something you are look for? Thanks.

We should reject any use of the "l" modifier that does not point to a label in 
the label list.  So we should also reject `void f(){x:asm goto ("jne 
%l0"::"r"(&)::x);}`.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56571/new/

https://reviews.llvm.org/D56571



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


[PATCH] D55483: Introduce the callback attribute and emit !callback metadata

2019-01-14 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert updated this revision to Diff 181622.
jdoerfert marked 2 inline comments as done.
jdoerfert added a comment.

Small fixes, allow "this" inside "callbacks"


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55483/new/

https://reviews.llvm.org/D55483

Files:
  include/clang/AST/ASTContext.h
  include/clang/Basic/Attr.td
  include/clang/Basic/AttrDocs.td
  include/clang/Basic/Builtins.def
  include/clang/Basic/Builtins.h
  include/clang/Basic/DiagnosticSemaKinds.td
  lib/AST/ASTContext.cpp
  lib/Basic/Builtins.cpp
  lib/CodeGen/CGOpenMPRuntime.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/Parse/ParseDecl.cpp
  lib/Sema/SemaDecl.cpp
  lib/Sema/SemaDeclAttr.cpp
  test/Analysis/retain-release.m
  test/CodeGen/attr-callback.c
  test/CodeGen/callback_annotated.c
  test/CodeGen/callback_openmp.c
  test/CodeGen/callback_pthread_create.c
  test/CodeGenCXX/attr-callback.cpp
  test/Misc/pragma-attribute-supported-attributes-list.test
  test/OpenMP/parallel_codegen.cpp
  test/Sema/attr-callback-broken.c
  test/Sema/attr-callback.c
  test/SemaCXX/attr-callback-broken.cpp
  test/SemaCXX/attr-callback.cpp
  utils/TableGen/ClangAttrEmitter.cpp

Index: utils/TableGen/ClangAttrEmitter.cpp
===
--- utils/TableGen/ClangAttrEmitter.cpp
+++ utils/TableGen/ClangAttrEmitter.cpp
@@ -775,6 +775,11 @@
 }
   };
 
+  struct VariadicParamOrParamIdxArgument : public VariadicArgument {
+VariadicParamOrParamIdxArgument(const Record , StringRef Attr)
+: VariadicArgument(Arg, Attr, "int") {}
+  };
+
   // Unique the enums, but maintain the original declaration ordering.
   std::vector
   uniqueEnumsInOrder(const std::vector ) {
@@ -1283,6 +1288,8 @@
 Ptr = llvm::make_unique(Arg, Attr);
   else if (ArgName == "VariadicParamIdxArgument")
 Ptr = llvm::make_unique(Arg, Attr);
+  else if (ArgName == "VariadicParamOrParamIdxArgument")
+Ptr = llvm::make_unique(Arg, Attr);
   else if (ArgName == "ParamIdxArgument")
 Ptr = llvm::make_unique(Arg, Attr, "ParamIdx");
   else if (ArgName == "VariadicIdentifierArgument")
@@ -2116,6 +2123,7 @@
  llvm::StringSwitch(
  Arg->getSuperClasses().back().first->getName())
  .Case("VariadicIdentifierArgument", true)
+ .Case("VariadicParamOrParamIdxArgument", true)
  .Default(false);
 }
 
Index: test/SemaCXX/attr-callback.cpp
===
--- /dev/null
+++ test/SemaCXX/attr-callback.cpp
@@ -0,0 +1,67 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+// expected-no-diagnostics
+
+class C_in_class {
+#include "../Sema/attr-callback.c"
+};
+
+struct Base {
+
+  void no_args_1(void (*callback)(void));
+  __attribute__((callback(1))) void no_args_2(void (*callback)(void));
+  __attribute__((callback(callback))) void no_args_3(void (*callback)(void)) {}
+
+  __attribute__((callback(1, 0))) virtual void
+  this_tr(void (*callback)(Base *));
+
+  __attribute__((callback(1, this, __, this))) virtual void
+  this_unknown_this(void (*callback)(Base *, Base *, Base *));
+
+  __attribute__((callback(1))) virtual void
+  virtual_1(void (*callback)(void));
+
+  __attribute__((callback(callback))) virtual void
+  virtual_2(void (*callback)(void));
+
+  __attribute__((callback(1))) virtual void
+  virtual_3(void (*callback)(void));
+};
+
+__attribute__((callback(1))) void
+Base::no_args_1(void (*callback)(void)) {
+}
+
+void Base::no_args_2(void (*callback)(void)) {
+}
+
+struct Derived_1 : public Base {
+
+  __attribute__((callback(1, 0))) virtual void
+  this_tr(void (*callback)(Base *)) override;
+
+  __attribute__((callback(1))) virtual void
+  virtual_1(void (*callback)(void)) override {}
+
+  virtual void
+  virtual_3(void (*callback)(void)) override {}
+};
+
+struct Derived_2 : public Base {
+
+  __attribute__((callback(callback))) virtual void
+  virtual_1(void (*callback)(void)) override;
+
+  virtual void
+  virtual_2(void (*callback)(void)) override;
+
+  virtual void
+  virtual_3(void (*callback)(void)) override;
+};
+
+void Derived_2::virtual_1(void (*callback)(void)) {}
+
+__attribute__((callback(1))) void
+Derived_2::virtual_2(void (*callback)(void)) {}
+
+void Derived_2::virtual_3(void (*callback)(void)) {}
Index: test/SemaCXX/attr-callback-broken.cpp
===
--- /dev/null
+++ test/SemaCXX/attr-callback-broken.cpp
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+class C_in_class {
+#define HAS_THIS
+#include "../Sema/attr-callback-broken.c"
+#undef HAS_THIS
+};
Index: test/Sema/attr-callback.c
===
--- /dev/null
+++ test/Sema/attr-callback.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+// expected-no-diagnostics
+
+__attribute__((callback(1))) void no_args(void (*callback)(void));
+__attribute__((callback(1, 2, 3))) void 

[PATCH] D56671: [COFF, ARM64] Add __nop intrinsic

2019-01-14 Thread Eli Friedman via Phabricator via cfe-commits
efriedma accepted this revision.
efriedma added a comment.
This revision is now accepted and ready to land.

LGTM

I'm assuming this isn't on the list of intrinsics that we must not implement as 
an inline function in intrin.h... if it is, we'll have to reimplement it at 
some point.  But this is clearly an improvement, in any case.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56671/new/

https://reviews.llvm.org/D56671



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


r351112 - NFC: Fix nits I missed before

2019-01-14 Thread Stephen Kelly via cfe-commits
Author: steveire
Date: Mon Jan 14 11:50:34 2019
New Revision: 351112

URL: http://llvm.org/viewvc/llvm-project?rev=351112=rev
Log:
NFC: Fix nits I missed before

Modified:
cfe/trunk/lib/AST/ASTDumper.cpp
cfe/trunk/lib/AST/TextNodeDumper.cpp

Modified: cfe/trunk/lib/AST/ASTDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=351112=35=351112=diff
==
--- cfe/trunk/lib/AST/ASTDumper.cpp (original)
+++ cfe/trunk/lib/AST/ASTDumper.cpp Mon Jan 14 11:50:34 2019
@@ -400,7 +400,7 @@ namespace  {
   dumpStmt(TA.getAsExpr());
 }
 void VisitPackTemplateArgument(const TemplateArgument ) {
-  for (const auto& TArg : TA.pack_elements())
+  for (const auto  : TA.pack_elements())
 dumpTemplateArgument(TArg);
 }
 

Modified: cfe/trunk/lib/AST/TextNodeDumper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=351112=35=351112=diff
==
--- cfe/trunk/lib/AST/TextNodeDumper.cpp (original)
+++ cfe/trunk/lib/AST/TextNodeDumper.cpp Mon Jan 14 11:50:34 2019
@@ -70,9 +70,8 @@ void TextNodeDumper::Visit(const Templat
   if (R.isValid())
 dumpSourceRange(R);
 
-  if (From) {
+  if (From)
 dumpDeclRef(From, Label);
-  }
 
   ConstTemplateArgumentVisitor::Visit(TA);
 }


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


[PATCH] D53153: [OpenCL] Mark kernel functions with default visibility

2019-01-14 Thread Scott Linder via Phabricator via cfe-commits
scott.linder added a comment.

In D53153#1355718 , @rjmccall wrote:

> In D53153#1353256 , @scott.linder 
> wrote:
>
> > In D53153#1317977 , @rjmccall 
> > wrote:
> >
> > > I think `-fvisibility=hidden` isn't good enough because you want to infer 
> > > hidden visibility even for external symbol references, and that's just 
> > > not how global visibility works.  But after this discussion, I'm prepared 
> > > to accept that (1) we should have some sort of single-image compiler mode 
> > > that implies that all symbols are defined within the image and (2) you 
> > > can make your toolchain imply that together with `-fvisibility=hidden` 
> > > and then have specific symbols opt in to non-hidden visibility if they 
> > > need to be accessible to whatever loader / runtime you have.
> >
> >
> > It seems that explicit visibility attributes on external symbol references 
> > (e.g. `__attribute__((visibility("hidden"))) extern int foo;`) are 
> > respected in Clang, so I don't understand the rationale for global 
> > visibility controls not applying to them as well. Can you describe why this 
> > is the case?
>
>
> Well, one answer is that that's the behavior that GCC defined when they added 
> global visibility controls, and it would be unreasonable for Clang to deviate 
> in such a fundamental way.  However, we do deviate in some other ways in our 
> interpretation of visibility attributes, so that's not a totally satisfactory 
> answer.
>
> The stronger answer is that GCC has a very good reason for this behavior.  
> Global visibility controls apply to all code in the translation unit.  While 
> programmers often mentally distinguish between "project" headers (which they 
> control) and "library" headers (which they do not), that is not a difference 
> that is known to the compiler.  Therefore, if global visibility controls 
> applied to external symbols, the compiler would end up assuming that all 
> external symbols not annotated as `default` are provided by the current 
> image.  That assumption would have been incompatible with essentially all 
> existing headers for dynamic libraries on GCC's core targets, including 
> system headers; in other words, it would have caused ubiquitous miscompiles.* 
>  It would be completely unreasonable to expect all those headers to be 
> changed just for the benefit of a single new compiler feature.  Therefore, 
> global visibility controls do not apply to external symbols because doing so 
> would make it impossible to actually enable global visibility controls.
>
> - GCC's rule helps a great deal even in C++, which is generally more 
> sensitive to global visibility: you can typically use an unannotated C++ 
> header under `-fvisibility=hidden` and have no problems unless you start 
> using its types as exceptions (and GCC tries to work around that, too) or 
> comparing the addresses of inline functions or template instantiations.
>
>   John.


Thank you for the context, that makes sense.

In terms of implementation of the above, currently at the AST level the 
LinkageComputer seems to assign global visibility to extern declarations, then 
during CodeGen this is simply not copied to the IR level unless the visibility 
was set explicitly. At first I was confused that the visibility of e.g. a 
`clang::Decl` and its `llvm::GlobalValue` could differ. Is there a reason why 
the implementation of LinkageComputer does not calculate the correct visibility 
here from the start? If the logic for extern declarations can be moved into the 
AST would it then be reasonable to add a distinct global visibility for extern 
declarations (something like `-fextern-visibility=`)? We could pair this with 
the existing global value visibility to effectively get the single-image 
compilation mode.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53153/new/

https://reviews.llvm.org/D53153



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


Re: r350856 - Split -Wdelete-non-virtual-dtor into two groups

2019-01-14 Thread Erik Pilkington via cfe-commits
Sure, for posterity: this was originally committed in r350585 and 
reverted in r350639. The original commit added 
-Wdelete-abstract-non-virtual-dtor as a group including 
-Wdelete-non-virtual-dtor, which led to strange cli behaviour.


Thanks!

On 1/13/19 5:28 PM, David Blaikie wrote:
Might be handy to summarize the changes from the previous reverted 
version of this patch (& mention the original commit revision and 
revert revision) - in the commit message is ideal, but in a reply to 
the commit after the fact will do in a pinch


On Fri, Jan 11, 2019 at 4:06 AM Erik Pilkington via cfe-commits 
mailto:cfe-commits@lists.llvm.org>> wrote:


Author: epilk
Date: Thu Jan 10 10:03:07 2019
New Revision: 350856

URL: http://llvm.org/viewvc/llvm-project?rev=350856=rev
Log:
Split -Wdelete-non-virtual-dtor into two groups

This group controls two diagnostics: deleting an abstract class with
a non-virtual dtor, which is a guaranteed crash, and deleting a
non-abstract polymorphic class with a non-virtual dtor, which is just
suspicious.

rdar://40380564

Differential revision: https://reviews.llvm.org/D56405

Added:
    cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp
Modified:
    cfe/trunk/include/clang/Basic/DiagnosticGroups.td
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td

Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
URL:

http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=350856=350855=350856=diff

==
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Thu Jan 10
10:03:07 2019
@@ -104,7 +104,11 @@ def UndefinedFuncTemplate : DiagGroup<"u
 def MissingNoEscape : DiagGroup<"missing-noescape">;

 def DeleteIncomplete : DiagGroup<"delete-incomplete">;
-def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">;
+def DeleteNonAbstractNonVirtualDtor :
DiagGroup<"delete-non-abstract-non-virtual-dtor">;
+def DeleteAbstractNonVirtualDtor :
DiagGroup<"delete-abstract-non-virtual-dtor">;
+def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor",
+  [DeleteNonAbstractNonVirtualDtor,
+ DeleteAbstractNonVirtualDtor]>;
 def AbstractFinalClass : DiagGroup<"abstract-final-class">;

 def CXX11CompatDeprecatedWritableStr :

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL:

http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=350856=350855=350856=diff

==
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Jan
10 10:03:07 2019
@@ -6455,12 +6455,12 @@ def warn_non_virtual_dtor : Warning<
 def warn_delete_non_virtual_dtor : Warning<
   "%select{delete|destructor}0 called on non-final %1 that has "
   "virtual functions but non-virtual destructor">,
-  InGroup, DefaultIgnore, ShowInSystemHeader;
+  InGroup, DefaultIgnore,
ShowInSystemHeader;
 def note_delete_non_virtual : Note<
   "qualify call to silence this warning">;
 def warn_delete_abstract_non_virtual_dtor : Warning<
   "%select{delete|destructor}0 called on %1 that is abstract but
has "
-  "non-virtual destructor">, InGroup,
ShowInSystemHeader;
+  "non-virtual destructor">,
InGroup, ShowInSystemHeader;
 def warn_overloaded_virtual : Warning<
   "%q0 hides overloaded virtual %select{function|functions}1">,
   InGroup, DefaultIgnore;

Added: cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp
URL:

http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp?rev=350856=auto

==
--- cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp (added)
+++ cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp Thu Jan 10
10:03:07 2019
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 %s -verify -DDIAG1
+// RUN: %clang_cc1 %s -verify -DDIAG1 -DDIAG2
-Wdelete-non-virtual-dtor
+// RUN: %clang_cc1 %s -verify -DDIAG1         -Wmost
-Wno-delete-non-abstract-non-virtual-dtor
+// RUN: %clang_cc1 %s -verify         -DDIAG2 -Wmost
-Wno-delete-abstract-non-virtual-dtor
+// RUN: %clang_cc1 %s -verify                 -Wmost
-Wno-delete-non-virtual-dtor
+
+#ifndef DIAG1
+#ifndef DIAG2
+// expected-no-diagnostics
+#endif
+#endif
+
+struct S1 {
+  ~S1() {}
+  virtual void abs() = 0;
+};
+
+void f1(S1 *s1) { delete s1; }
+#ifdef DIAG1
+// expected-warning@-2 {{delete called on 'S1' that is abstract
but has non-virtual 

[PATCH] D47819: [compiler-rt] [test] Disable sunrpc tests when rpc/xdr.h is missing

2019-01-14 Thread Michał Górny via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rCRT351109: [test] Disable sunrpc tests when rpc/xdr.h is 
missing (authored by mgorny, committed by ).

Repository:
  rCRT Compiler Runtime

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D47819/new/

https://reviews.llvm.org/D47819

Files:
  cmake/Modules/CompilerRTUtils.cmake
  cmake/base-config-ix.cmake
  lib/sanitizer_common/CMakeLists.txt
  test/lit.common.cfg
  test/lit.common.configured.in
  test/msan/Linux/sunrpc.cc
  test/msan/Linux/sunrpc_bytes.cc
  test/msan/Linux/sunrpc_string.cc
  test/tsan/sunrpc.cc

Index: cmake/base-config-ix.cmake
===
--- cmake/base-config-ix.cmake
+++ cmake/base-config-ix.cmake
@@ -8,6 +8,12 @@
 
 check_include_file(unwind.h HAVE_UNWIND_H)
 
+# Used by sanitizer_common and tests.
+check_include_file(rpc/xdr.h HAVE_RPC_XDR_H)
+if (NOT HAVE_RPC_XDR_H)
+  set(HAVE_RPC_XDR_H 0)
+endif()
+
 # Top level target used to build all compiler-rt libraries.
 add_custom_target(compiler-rt ALL)
 add_custom_target(install-compiler-rt)
Index: cmake/Modules/CompilerRTUtils.cmake
===
--- cmake/Modules/CompilerRTUtils.cmake
+++ cmake/Modules/CompilerRTUtils.cmake
@@ -58,14 +58,6 @@
   endif()
 endmacro()
 
-macro(append_have_file_definition filename varname list)
-  check_include_file("${filename}" "${varname}")
-  if (NOT ${varname})
-set("${varname}" 0)
-  endif()
-  list(APPEND ${list} "${varname}=${${varname}}")
-endmacro()
-
 macro(list_intersect output input1 input2)
   set(${output})
   foreach(it ${${input1}})
Index: test/lit.common.configured.in
===
--- test/lit.common.configured.in
+++ test/lit.common.configured.in
@@ -36,6 +36,7 @@
 set_default("use_lto", config.use_thinlto)
 set_default("use_newpm", False)
 set_default("android", @ANDROID_PYBOOL@)
+set_default("have_rpc_xdr_h", @HAVE_RPC_XDR_H@)
 config.available_features.add('target-is-%s' % config.target_arch)
 
 if config.enable_per_target_runtime_dir:
Index: test/tsan/sunrpc.cc
===
--- test/tsan/sunrpc.cc
+++ test/tsan/sunrpc.cc
@@ -1,3 +1,5 @@
+// REQUIRES: sunrpc
+
 // RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
 
 #include 
Index: test/msan/Linux/sunrpc_bytes.cc
===
--- test/msan/Linux/sunrpc_bytes.cc
+++ test/msan/Linux/sunrpc_bytes.cc
@@ -1,3 +1,5 @@
+// REQUIRES: sunrpc
+
 // RUN: %clangxx_msan -g -O0 %s -o %t && \
 // RUN: %run %t 2>&1
 // RUN: %clangxx_msan -g -O0 -DUNINIT=1 %s -o %t && \
Index: test/msan/Linux/sunrpc.cc
===
--- test/msan/Linux/sunrpc.cc
+++ test/msan/Linux/sunrpc.cc
@@ -1,3 +1,5 @@
+// REQUIRES: sunrpc
+
 // RUN: %clangxx_msan -g -O0 -DTYPE=int -DFN=xdr_int %s -o %t && \
 // RUN: %run %t 2>&1
 // RUN: %clangxx_msan -g -O0 -DTYPE=int -DFN=xdr_int -DUNINIT=1 %s -o %t && \
Index: test/msan/Linux/sunrpc_string.cc
===
--- test/msan/Linux/sunrpc_string.cc
+++ test/msan/Linux/sunrpc_string.cc
@@ -1,3 +1,5 @@
+// REQUIRES: sunrpc
+
 // RUN: %clangxx_msan -g -O0 %s -o %t && \
 // RUN: %run %t 2>&1
 // RUN: %clangxx_msan -g -O0 -DUNINIT=1 %s -o %t && \
Index: test/lit.common.cfg
===
--- test/lit.common.cfg
+++ test/lit.common.cfg
@@ -359,6 +359,9 @@
   if config.use_newpm:
 config.lto_flags += ["-fexperimental-new-pass-manager"]
 
+if config.have_rpc_xdr_h:
+  config.available_features.add('sunrpc')
+
 # Ask llvm-config about assertion mode.
 try:
   llvm_config_cmd = subprocess.Popen(
Index: lib/sanitizer_common/CMakeLists.txt
===
--- lib/sanitizer_common/CMakeLists.txt
+++ lib/sanitizer_common/CMakeLists.txt
@@ -192,10 +192,8 @@
 
 include_directories(..)
 
-set(SANITIZER_COMMON_DEFINITIONS)
-
-include(CheckIncludeFile)
-append_have_file_definition(rpc/xdr.h HAVE_RPC_XDR_H SANITIZER_COMMON_DEFINITIONS)
+set(SANITIZER_COMMON_DEFINITIONS
+  HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H})
 
 set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS})
 append_rtti_flag(OFF SANITIZER_CFLAGS)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351108 - Improve a -Wunguarded-availability note

2019-01-14 Thread Erik Pilkington via cfe-commits
Author: epilk
Date: Mon Jan 14 11:17:31 2019
New Revision: 351108

URL: http://llvm.org/viewvc/llvm-project?rev=351108=rev
Log:
Improve a -Wunguarded-availability note

Mention the deployment target, and don't say "partial" which doesn't
really mean anything to users.

rdar://problem/33601513

Differential revision: https://reviews.llvm.org/D56523

Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaDeclAttr.cpp
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/attr-availability.c
cfe/trunk/test/Sema/availability-guard-format.mm
cfe/trunk/test/SemaObjC/attr-availability.m
cfe/trunk/test/SemaObjC/property-deprecated-warning.m
cfe/trunk/test/SemaObjC/unguarded-availability-new.m
cfe/trunk/test/SemaObjC/unguarded-availability.m

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=351108=351107=351108=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Jan 14 11:17:31 
2019
@@ -4565,7 +4565,10 @@ def warn_unavailable_fwdclass_message :
 InGroup;
 def note_availability_specified_here : Note<
   "%0 has been explicitly marked "
-  "%select{unavailable|deleted|deprecated|partial}1 here">;
+  "%select{unavailable|deleted|deprecated}1 here">;
+def note_partial_availability_specified_here : Note<
+  "%0 has been marked as being introduced in %1 %2 here, "
+  "but the deployment target is %1 %3">;
 def note_implicitly_deleted : Note<
   "explicitly defaulted function was implicitly deleted here">;
 def warn_not_enough_argument : Warning<

Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=351108=351107=351108=diff
==
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Mon Jan 14 11:17:31 2019
@@ -7584,14 +7584,16 @@ static void DoEmitAvailabilityWarning(Se
 unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new
  : diag::warn_unguarded_availability;
 
-S.Diag(Loc, Warning)
-<< OffendingDecl
-<< AvailabilityAttr::getPrettyPlatformName(
-   S.getASTContext().getTargetInfo().getPlatformName())
-<< Introduced.getAsString();
+std::string PlatformName = AvailabilityAttr::getPrettyPlatformName(
+S.getASTContext().getTargetInfo().getPlatformName());
 
-S.Diag(OffendingDecl->getLocation(), 
diag::note_availability_specified_here)
-<< OffendingDecl << /* partial */ 3;
+S.Diag(Loc, Warning) << OffendingDecl << PlatformName
+ << Introduced.getAsString();
+
+S.Diag(OffendingDecl->getLocation(),
+   diag::note_partial_availability_specified_here)
+<< OffendingDecl << PlatformName << Introduced.getAsString()
+<< S.Context.getTargetInfo().getPlatformMinVersion().getAsString();
 
 if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {
   if (const auto *TD = dyn_cast(Enclosing))
@@ -8045,15 +8047,18 @@ void DiagnoseUnguardedAvailability::Diag
 ? diag::warn_unguarded_availability_new
 : diag::warn_unguarded_availability;
 
+std::string PlatformName = AvailabilityAttr::getPrettyPlatformName(
+SemaRef.getASTContext().getTargetInfo().getPlatformName());
+
 SemaRef.Diag(Range.getBegin(), DiagKind)
-<< Range << D
-<< AvailabilityAttr::getPrettyPlatformName(
-   SemaRef.getASTContext().getTargetInfo().getPlatformName())
-<< Introduced.getAsString();
+<< Range << D << PlatformName << Introduced.getAsString();
 
 SemaRef.Diag(OffendingDecl->getLocation(),
- diag::note_availability_specified_here)
-<< OffendingDecl << /* partial */ 3;
+ diag::note_partial_availability_specified_here)
+<< OffendingDecl << PlatformName << Introduced.getAsString()
+<< SemaRef.Context.getTargetInfo()
+   .getPlatformMinVersion()
+   .getAsString();
 
 auto FixitDiag =
 SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence)

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=351108=351107=351108=diff
==
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Jan 14 11:17:31 2019
@@ -121,7 +121,7 @@ void Sema::NoteDeletedFunction(FunctionD
 return NoteDeletedInheritingConstructor(Ctor);
 
   Diag(Decl->getLocation(), diag::note_availability_specified_here)
-<< Decl << 

[PATCH] D56523: Improve a -Wunguarded-availability note

2019-01-14 Thread Phabricator via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351108: Improve a -Wunguarded-availability note (authored by 
epilk, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D56523?vs=181130=181616#toc

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56523/new/

https://reviews.llvm.org/D56523

Files:
  include/clang/Basic/DiagnosticSemaKinds.td
  lib/Sema/SemaDeclAttr.cpp
  lib/Sema/SemaExpr.cpp
  test/Sema/attr-availability.c
  test/Sema/availability-guard-format.mm
  test/SemaObjC/attr-availability.m
  test/SemaObjC/property-deprecated-warning.m
  test/SemaObjC/unguarded-availability-new.m
  test/SemaObjC/unguarded-availability.m

Index: lib/Sema/SemaDeclAttr.cpp
===
--- lib/Sema/SemaDeclAttr.cpp
+++ lib/Sema/SemaDeclAttr.cpp
@@ -7584,14 +7584,16 @@
 unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new
  : diag::warn_unguarded_availability;
 
-S.Diag(Loc, Warning)
-<< OffendingDecl
-<< AvailabilityAttr::getPrettyPlatformName(
-   S.getASTContext().getTargetInfo().getPlatformName())
-<< Introduced.getAsString();
+std::string PlatformName = AvailabilityAttr::getPrettyPlatformName(
+S.getASTContext().getTargetInfo().getPlatformName());
 
-S.Diag(OffendingDecl->getLocation(), diag::note_availability_specified_here)
-<< OffendingDecl << /* partial */ 3;
+S.Diag(Loc, Warning) << OffendingDecl << PlatformName
+ << Introduced.getAsString();
+
+S.Diag(OffendingDecl->getLocation(),
+   diag::note_partial_availability_specified_here)
+<< OffendingDecl << PlatformName << Introduced.getAsString()
+<< S.Context.getTargetInfo().getPlatformMinVersion().getAsString();
 
 if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {
   if (const auto *TD = dyn_cast(Enclosing))
@@ -8045,15 +8047,18 @@
 ? diag::warn_unguarded_availability_new
 : diag::warn_unguarded_availability;
 
+std::string PlatformName = AvailabilityAttr::getPrettyPlatformName(
+SemaRef.getASTContext().getTargetInfo().getPlatformName());
+
 SemaRef.Diag(Range.getBegin(), DiagKind)
-<< Range << D
-<< AvailabilityAttr::getPrettyPlatformName(
-   SemaRef.getASTContext().getTargetInfo().getPlatformName())
-<< Introduced.getAsString();
+<< Range << D << PlatformName << Introduced.getAsString();
 
 SemaRef.Diag(OffendingDecl->getLocation(),
- diag::note_availability_specified_here)
-<< OffendingDecl << /* partial */ 3;
+ diag::note_partial_availability_specified_here)
+<< OffendingDecl << PlatformName << Introduced.getAsString()
+<< SemaRef.Context.getTargetInfo()
+   .getPlatformMinVersion()
+   .getAsString();
 
 auto FixitDiag =
 SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence)
Index: lib/Sema/SemaExpr.cpp
===
--- lib/Sema/SemaExpr.cpp
+++ lib/Sema/SemaExpr.cpp
@@ -121,7 +121,7 @@
 return NoteDeletedInheritingConstructor(Ctor);
 
   Diag(Decl->getLocation(), diag::note_availability_specified_here)
-<< Decl << true;
+<< Decl << 1;
 }
 
 /// Determine whether a FunctionDecl was ever declared with an
Index: include/clang/Basic/DiagnosticSemaKinds.td
===
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -4565,7 +4565,10 @@
 InGroup;
 def note_availability_specified_here : Note<
   "%0 has been explicitly marked "
-  "%select{unavailable|deleted|deprecated|partial}1 here">;
+  "%select{unavailable|deleted|deprecated}1 here">;
+def note_partial_availability_specified_here : Note<
+  "%0 has been marked as being introduced in %1 %2 here, "
+  "but the deployment target is %1 %3">;
 def note_implicitly_deleted : Note<
   "explicitly defaulted function was implicitly deleted here">;
 def warn_not_enough_argument : Warning<
Index: test/Sema/attr-availability.c
===
--- test/Sema/attr-availability.c
+++ test/Sema/attr-availability.c
@@ -16,13 +16,13 @@
 ATSFontGetPostScriptName(int flags) __attribute__((availability(macosx,introduced=8.0,obsoleted=9.0, message="use ATSFontGetFullPostScriptName"))); // expected-note {{'ATSFontGetPostScriptName' has been explicitly marked unavailable here}}
 
 #if defined(WARN_PARTIAL)
-// expected-note@+3 {{has been explicitly marked partial here}}
+// expected-note@+3 {{'PartiallyAvailable' has been marked as being introduced in macOS 10.8 here, but the deployment target is macOS 10.5.0}}
 #endif
 extern void
 PartiallyAvailable() 

[PATCH] D54589: [clang][UBSan] Sanitization for alignment assumptions.

2019-01-14 Thread Phabricator via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351105: [clang][UBSan] Sanitization for alignment 
assumptions. (authored by lebedevri, committed by ).

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54589/new/

https://reviews.llvm.org/D54589

Files:
  docs/ReleaseNotes.rst
  docs/UndefinedBehaviorSanitizer.rst
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CGCall.cpp
  lib/CodeGen/CGExprScalar.cpp
  lib/CodeGen/CGStmtOpenMP.cpp
  lib/CodeGen/CodeGenFunction.cpp
  lib/CodeGen/CodeGenFunction.h
  test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp
  test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp
  test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
  test/CodeGen/catch-alignment-assumption-blacklist.c
  
test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp
  
test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp
  test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
  test/CodeGen/catch-alignment-assumption-openmp.cpp

Index: lib/CodeGen/CGStmtOpenMP.cpp
===
--- lib/CodeGen/CGStmtOpenMP.cpp
+++ lib/CodeGen/CGStmtOpenMP.cpp
@@ -1472,7 +1472,8 @@
  "alignment is not power of 2");
   if (Alignment != 0) {
 llvm::Value *PtrValue = CGF.EmitScalarExpr(E);
-CGF.EmitAlignmentAssumption(PtrValue, Alignment);
+CGF.EmitAlignmentAssumption(
+PtrValue, E, /*No second loc needed*/ SourceLocation(), Alignment);
   }
 }
   }
Index: lib/CodeGen/CGBuiltin.cpp
===
--- lib/CodeGen/CGBuiltin.cpp
+++ lib/CodeGen/CGBuiltin.cpp
@@ -1904,15 +1904,17 @@
 return RValue::get(Result);
   }
   case Builtin::BI__builtin_assume_aligned: {
-Value *PtrValue = EmitScalarExpr(E->getArg(0));
+const Expr *Ptr = E->getArg(0);
+Value *PtrValue = EmitScalarExpr(Ptr);
 Value *OffsetValue =
   (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr;
 
 Value *AlignmentValue = EmitScalarExpr(E->getArg(1));
 ConstantInt *AlignmentCI = cast(AlignmentValue);
-unsigned Alignment = (unsigned) AlignmentCI->getZExtValue();
+unsigned Alignment = (unsigned)AlignmentCI->getZExtValue();
 
-EmitAlignmentAssumption(PtrValue, Alignment, OffsetValue);
+EmitAlignmentAssumption(PtrValue, Ptr, /*The expr loc is sufficient.*/ SourceLocation(),
+Alignment, OffsetValue);
 return RValue::get(PtrValue);
   }
   case Builtin::BI__assume:
Index: lib/CodeGen/CodeGenFunction.h
===
--- lib/CodeGen/CodeGenFunction.h
+++ lib/CodeGen/CodeGenFunction.h
@@ -131,6 +131,7 @@
   SANITIZER_CHECK(ShiftOutOfBounds, shift_out_of_bounds, 0)\
   SANITIZER_CHECK(SubOverflow, sub_overflow, 0)\
   SANITIZER_CHECK(TypeMismatch, type_mismatch, 1)  \
+  SANITIZER_CHECK(AlignmentAssumption, alignment_assumption, 0)\
   SANITIZER_CHECK(VLABoundNotPositive, vla_bound_not_positive, 0)
 
 enum SanitizerHandler {
@@ -2633,12 +2634,6 @@
   ComplexPairTy EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV,
  bool isInc, bool isPre);
 
-  void EmitAlignmentAssumption(llvm::Value *PtrValue, unsigned Alignment,
-   llvm::Value *OffsetValue = nullptr) {
-Builder.CreateAlignmentAssumption(CGM.getDataLayout(), PtrValue, Alignment,
-  OffsetValue);
-  }
-
   /// Converts Location to a DebugLoc, if debug information is enabled.
   llvm::DebugLoc SourceLocToDebugLoc(SourceLocation Location);
 
@@ -2802,11 +2797,27 @@
   PeepholeProtection protectFromPeepholes(RValue rvalue);
   void unprotectFromPeepholes(PeepholeProtection protection);
 
-  void EmitAlignmentAssumption(llvm::Value *PtrValue, llvm::Value *Alignment,
-   llvm::Value *OffsetValue = nullptr) {
-Builder.CreateAlignmentAssumption(CGM.getDataLayout(), PtrValue, Alignment,
-  OffsetValue);
-  }
+  void EmitAlignmentAssumptionCheck(llvm::Value *Ptr, QualType Ty,
+SourceLocation Loc,
+SourceLocation AssumptionLoc,
+llvm::Value *Alignment,
+llvm::Value *OffsetValue,
+

[PATCH] D54589: [clang][UBSan] Sanitization for alignment assumptions.

2019-01-14 Thread Roman Lebedev via Phabricator via cfe-commits
lebedev.ri updated this revision to Diff 181608.
lebedev.ri added a comment.

Rebased before commit, NFC.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54589/new/

https://reviews.llvm.org/D54589

Files:
  docs/ReleaseNotes.rst
  docs/UndefinedBehaviorSanitizer.rst
  lib/CodeGen/CGBuiltin.cpp
  lib/CodeGen/CGCall.cpp
  lib/CodeGen/CGExprScalar.cpp
  lib/CodeGen/CGStmtOpenMP.cpp
  lib/CodeGen/CodeGenFunction.cpp
  lib/CodeGen/CodeGenFunction.h
  test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp
  test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp
  test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp
  
test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
  test/CodeGen/catch-alignment-assumption-blacklist.c
  
test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp
  
test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp
  test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
  test/CodeGen/catch-alignment-assumption-openmp.cpp

Index: test/CodeGen/catch-alignment-assumption-openmp.cpp
===
--- /dev/null
+++ test/CodeGen/catch-alignment-assumption-openmp.cpp
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -fopenmp-simd -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
+// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
+// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
+// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
+
+// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char *'\00" }
+// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 30 }, {{.*}}* @[[CHAR]] }
+
+void func(char *data) {
+  // CHECK: define void @{{.*}}(i8* %[[DATA:.*]])
+  // CHECK-NEXT: [[ENTRY:.*]]:
+  // CHECK-NEXT:   %[[DATA_ADDR:.*]] = alloca i8*, align 8
+  // CHECK:   store i8* %[[DATA]], i8** %[[DATA_ADDR]], align 8
+  // CHECK:   %[[DATA_RELOADED:.*]] = load i8*, i8** %[[DATA_ADDR]], align 8
+  // CHECK-NEXT:   %[[PTRINT:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64
+  // CHECK-NEXT:   %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 1073741823
+  // CHECK-NEXT:   %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
+  // CHECK-SANITIZE-NEXT:   %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64, !nosanitize
+  // CHECK-SANITIZE-NEXT:   br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
+  // CHECK-SANITIZE:  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
+  // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
+  // CHECK-SANITIZE-RECOVER-NEXT:   call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
+  // CHECK-SANITIZE-TRAP-NEXT:  call void @llvm.trap(){{.*}}, !nosanitize
+  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
+  // CHECK-SANITIZE:  [[CONT]]:
+  // CHECK-NEXT:call void @llvm.assume(i1 %[[MASKCOND]])
+
+#line 100
+#pragma omp for simd aligned(data : 0x4000)
+  for (int x = 0; x < 1; x++)
+data[x] = data[x];
+}
Index: test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
===
--- /dev/null
+++ test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
+// RUN: %clang_cc1 -fsanitize=alignment 

r351105 - [clang][UBSan] Sanitization for alignment assumptions.

2019-01-14 Thread Roman Lebedev via cfe-commits
Author: lebedevri
Date: Mon Jan 14 11:09:27 2019
New Revision: 351105

URL: http://llvm.org/viewvc/llvm-project?rev=351105=rev
Log:
[clang][UBSan] Sanitization for alignment assumptions.

Summary:
UB isn't nice. It's cool and powerful, but not nice.
Having a way to detect it is nice though.
[[ https://wg21.link/p1007r3 | P1007R3: std::assume_aligned ]] / 
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1007r2.pdf says:
```
We propose to add this functionality via a library function instead of a core 
language attribute.
...
If the pointer passed in is not aligned to at least N bytes, calling 
assume_aligned results in undefined behaviour.
```

This differential teaches clang to sanitize all the various variants of this 
assume-aligned attribute.

Requires D54588 for LLVM IRBuilder changes.
The compiler-rt part is D54590.

Reviewers: ABataev, craig.topper, vsk, rsmith, rnk, #sanitizers, erichkeane, 
filcab, rjmccall

Reviewed By: rjmccall

Subscribers: chandlerc, ldionne, EricWF, mclow.lists, cfe-commits, bkramer

Tags: #sanitizers

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

Added:

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp

cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp
Modified:
cfe/trunk/docs/ReleaseNotes.rst
cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/CodeGen/CGCall.cpp
cfe/trunk/lib/CodeGen/CGExprScalar.cpp
cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h

Modified: cfe/trunk/docs/ReleaseNotes.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=351105=351104=351105=diff
==
--- cfe/trunk/docs/ReleaseNotes.rst (original)
+++ cfe/trunk/docs/ReleaseNotes.rst Mon Jan 14 11:09:27 2019
@@ -321,6 +321,49 @@ Undefined Behavior Sanitizer (UBSan)
 * The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) has
   learned to sanitize compound assignment operators.
 
+* ``alignment`` check has learned to sanitize the assume_aligned-like 
attributes:
+
+  .. code-block:: c++
+
+  typedef char **__attribute__((align_value(1024))) aligned_char;
+  struct ac_struct {
+aligned_char a;
+  };
+  char **load_from_ac_struct(struct ac_struct *x) {
+return x->a; // <- check that loaded 'a' is aligned
+  }
+
+  char **passthrough(__attribute__((align_value(1024))) char **x) {
+return x; // <- check the pointer passed as function argument
+  }
+
+  char **__attribute__((alloc_align(2)))
+  alloc_align(int size, unsigned long alignment);
+
+  char **caller(int size) {
+return alloc_align(size, 1024); // <- check returned pointer
+  }
+
+  char **__attribute__((assume_aligned(1024))) get_ptr();
+
+  char **caller2() {
+return get_ptr(); // <- check returned pointer
+  }
+
+  void *caller3(char **x) {
+return __builtin_assume_aligned(x, 1024);  // <- check returned pointer
+  }
+
+  void *caller4(char **x, unsigned long offset) {
+return __builtin_assume_aligned(x, 1024, offset);  // <- check 
returned pointer accounting for the offest
+  }
+
+  void process(char *data, int width) {
+  #pragma omp for simd aligned(data : 1024) // <- aligned clause will 
be checked.
+  for (int x = 0; x < width; x++)
+  data[x] *= data[x];
+  }
+
 Core Analysis Improvements
 ==
 

Modified: cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UndefinedBehaviorSanitizer.rst?rev=351105=351104=351105=diff
==
--- cfe/trunk/docs/UndefinedBehaviorSanitizer.rst (original)
+++ cfe/trunk/docs/UndefinedBehaviorSanitizer.rst Mon Jan 14 11:09:27 2019
@@ -72,7 +72,7 @@ Available checks
 Available checks are:
 
   -  ``-fsanitize=alignment``: Use of a misaligned pointer 

[clang-tools-extra] r351100 - Revert r351051 "[clangd] Unlink VFS working dir from OS working dir."

2019-01-14 Thread Amara Emerson via cfe-commits
Author: aemerson
Date: Mon Jan 14 10:59:17 2019
New Revision: 351100

URL: http://llvm.org/viewvc/llvm-project?rev=351100=rev
Log:
Revert r351051 "[clangd] Unlink VFS working dir from OS working dir."

The llvm commit r351050 broke some bots and was reverted.

Modified:
clang-tools-extra/trunk/clangd/FSProvider.cpp

Modified: clang-tools-extra/trunk/clangd/FSProvider.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/FSProvider.cpp?rev=351100=351099=351100=diff
==
--- clang-tools-extra/trunk/clangd/FSProvider.cpp (original)
+++ clang-tools-extra/trunk/clangd/FSProvider.cpp Mon Jan 14 10:59:17 2019
@@ -75,10 +75,9 @@ clang::clangd::RealFileSystemProvider::g
 // FIXME: Try to use a similar approach in Sema instead of relying on
 //propagation of the 'isVolatile' flag through all layers.
 #ifdef _WIN32
-  return new VolatileFileSystem(
-  llvm::vfs::createPhysicalFileSystem().release());
+  return new VolatileFileSystem(llvm::vfs::getRealFileSystem());
 #else
-  return llvm::vfs::createPhysicalFileSystem().release();
+  return llvm::vfs::getRealFileSystem();
 #endif
 }
 } // namespace clangd


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


[PATCH] D56523: Improve a -Wunguarded-availability note

2019-01-14 Thread Alex Lorenz via Phabricator via cfe-commits
arphaman accepted this revision.
arphaman added a comment.
This revision is now accepted and ready to land.

LGTM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56523/new/

https://reviews.llvm.org/D56523



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


[PATCH] D55226: [Fix][StaticAnalyzer] Bug 39792 - False positive on strcpy targeting struct member

2019-01-14 Thread George Karpenkov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL351097: [analyzer] [PR39792] false positive on strcpy 
targeting struct members (authored by george.karpenkov, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D55226?vs=176676=181603#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55226/new/

https://reviews.llvm.org/D55226

Files:
  cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
  cfe/trunk/test/Analysis/security-syntax-checks.m


Index: cfe/trunk/test/Analysis/security-syntax-checks.m
===
--- cfe/trunk/test/Analysis/security-syntax-checks.m
+++ cfe/trunk/test/Analysis/security-syntax-checks.m
@@ -177,6 +177,11 @@
   strcpy(x, "abcd");
 }
 
+void test_strcpy_safe_2() {
+  struct {char s1[100];} s;
+  strcpy(s.s1, "hello");
+}
+
 //===--===
 // strcat()
 //===--===
Index: cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
===
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
@@ -651,14 +651,14 @@
 
   const auto *Target = CE->getArg(0)->IgnoreImpCasts(),
  *Source = CE->getArg(1)->IgnoreImpCasts();
-  if (const auto *DeclRef = dyn_cast(Target))
-if (const auto *Array = dyn_cast(DeclRef->getType())) {
-  uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
-  if (const auto *String = dyn_cast(Source)) {
-if (ArraySize >= String->getLength() + 1)
-  return;
-  }
+
+  if (const auto *Array = dyn_cast(Target->getType())) {
+uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
+if (const auto *String = dyn_cast(Source)) {
+  if (ArraySize >= String->getLength() + 1)
+return;
 }
+  }
 
   // Issue a warning.
   PathDiagnosticLocation CELoc =


Index: cfe/trunk/test/Analysis/security-syntax-checks.m
===
--- cfe/trunk/test/Analysis/security-syntax-checks.m
+++ cfe/trunk/test/Analysis/security-syntax-checks.m
@@ -177,6 +177,11 @@
   strcpy(x, "abcd");
 }
 
+void test_strcpy_safe_2() {
+  struct {char s1[100];} s;
+  strcpy(s.s1, "hello");
+}
+
 //===--===
 // strcat()
 //===--===
Index: cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
===
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
@@ -651,14 +651,14 @@
 
   const auto *Target = CE->getArg(0)->IgnoreImpCasts(),
  *Source = CE->getArg(1)->IgnoreImpCasts();
-  if (const auto *DeclRef = dyn_cast(Target))
-if (const auto *Array = dyn_cast(DeclRef->getType())) {
-  uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
-  if (const auto *String = dyn_cast(Source)) {
-if (ArraySize >= String->getLength() + 1)
-  return;
-  }
+
+  if (const auto *Array = dyn_cast(Target->getType())) {
+uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
+if (const auto *String = dyn_cast(Source)) {
+  if (ArraySize >= String->getLength() + 1)
+return;
 }
+  }
 
   // Issue a warning.
   PathDiagnosticLocation CELoc =
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351097 - [analyzer] [PR39792] false positive on strcpy targeting struct members

2019-01-14 Thread George Karpenkov via cfe-commits
Author: george.karpenkov
Date: Mon Jan 14 10:54:48 2019
New Revision: 351097

URL: http://llvm.org/viewvc/llvm-project?rev=351097=rev
Log:
[analyzer] [PR39792] false positive on strcpy targeting struct members

Patch by Pierre van Houtryve.

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

Modified:
cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
cfe/trunk/test/Analysis/security-syntax-checks.m

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp?rev=351097=351096=351097=diff
==
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp Mon Jan 
14 10:54:48 2019
@@ -651,14 +651,14 @@ void WalkAST::checkCall_strcpy(const Cal
 
   const auto *Target = CE->getArg(0)->IgnoreImpCasts(),
  *Source = CE->getArg(1)->IgnoreImpCasts();
-  if (const auto *DeclRef = dyn_cast(Target))
-if (const auto *Array = dyn_cast(DeclRef->getType())) {
-  uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
-  if (const auto *String = dyn_cast(Source)) {
-if (ArraySize >= String->getLength() + 1)
-  return;
-  }
+
+  if (const auto *Array = dyn_cast(Target->getType())) {
+uint64_t ArraySize = BR.getContext().getTypeSize(Array) / 8;
+if (const auto *String = dyn_cast(Source)) {
+  if (ArraySize >= String->getLength() + 1)
+return;
 }
+  }
 
   // Issue a warning.
   PathDiagnosticLocation CELoc =

Modified: cfe/trunk/test/Analysis/security-syntax-checks.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/security-syntax-checks.m?rev=351097=351096=351097=diff
==
--- cfe/trunk/test/Analysis/security-syntax-checks.m (original)
+++ cfe/trunk/test/Analysis/security-syntax-checks.m Mon Jan 14 10:54:48 2019
@@ -177,6 +177,11 @@ void test_strcpy_safe() {
   strcpy(x, "abcd");
 }
 
+void test_strcpy_safe_2() {
+  struct {char s1[100];} s;
+  strcpy(s.s1, "hello");
+}
+
 //===--===
 // strcat()
 //===--===


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


r351096 - [analyzer] [NFC] Remove unused undefined method.

2019-01-14 Thread George Karpenkov via cfe-commits
Author: george.karpenkov
Date: Mon Jan 14 10:54:35 2019
New Revision: 351096

URL: http://llvm.org/viewvc/llvm-project?rev=351096=rev
Log:
[analyzer] [NFC] Remove unused undefined method.

Wow, at no point the linker or compiler complaints about that!

Modified:

cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h

Modified: 
cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h?rev=351096=351095=351096=diff
==
--- 
cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h 
(original)
+++ 
cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h 
Mon Jan 14 10:54:35 2019
@@ -342,8 +342,6 @@ public:
 
   void processObjCLiterals(CheckerContext , const Expr *Ex) const;
 
-  const ProgramPointTag *getDeadSymbolTag(SymbolRef sym) const;
-
   ProgramStateRef handleSymbolDeath(ProgramStateRef state,
 SymbolRef sid, RefVal V,
 SmallVectorImpl ) const;


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


[PATCH] D55226: [Fix][StaticAnalyzer] Bug 39792 - False positive on strcpy targeting struct member

2019-01-14 Thread George Karpenkov via Phabricator via cfe-commits
george.karpenkov added a comment.

@Pierre-vh The patch does not compile due to unmatched braces. Please do test 
and compile before submitting!


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55226/new/

https://reviews.llvm.org/D55226



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


[PATCH] D56571: [RFC prototype] Implementation of asm-goto support in clang

2019-01-14 Thread Jennifer Yu via Phabricator via cfe-commits
jyu2 marked an inline comment as done.
jyu2 added inline comments.



Comment at: lib/Sema/SemaStmtAsm.cpp:470
+if (NS->isGCCAsmGoto() &&
+Exprs[ConstraintIdx]->getStmtClass() == Stmt::AddrLabelExprClass)
+  break;

efriedma wrote:
> jyu2 wrote:
> > jyu2 wrote:
> > > efriedma wrote:
> > > > jyu2 wrote:
> > > > > efriedma wrote:
> > > > > > jyu2 wrote:
> > > > > > > efriedma wrote:
> > > > > > > > This looks suspicious; an AddrLabelExpr could be an input or 
> > > > > > > > output, e.g. `"r"(&)`.
> > > > > > > Syntax for asm goto:
> > > > > > >  Syntax:
> > > > > > >asm [volatile] goto ( AssemblerTemplate
> > > > > > >:
> > > > > > >: InputOperands
> > > > > > >: Clobbers
> > > > > > >: GotoLabels)
> > > > > > > 
> > > > > > >  Only input is allowed.  Output is not allowed
> > > > > > > 
> > > > > > That doesn't really address my point here... ignore the "or output" 
> > > > > > part of the comment.
> > > > > Sorry did not realize that.  Thank you so much for catching that.  
> > > > > Need to add other condition "ConstraintIdx > NS->getNumInputs() - 1", 
> > > > > change to :
> > > > > 
> > > > > if (NS->isGCCAsmGoto() && ConstraintIdx > NS->getNumInputs() - 1 &&
> > > > > Exprs[ConstraintIdx]->getStmtClass() == 
> > > > > Stmt::AddrLabelExprClass)
> > > > >   break;
> > > > > 
> > > > > Is this ok with you?  Thanks
> > > > That's the right idea. But I still see a few issues at that point:
> > > > 
> > > > 1. The AddrLabelExprClass check is redundant.
> > > > 2. "NS->getNumInputs() - 1" can overflow; probably should use 
> > > > "ConstraintIdx >= NS->getNumInputs()".
> > > > 3. "break" exits the loop completely (so it skips validating all 
> > > > constraints written after the label).
> > > > 4. The code needs to verify that the user correctly specified the "l" 
> > > > constraint modifier.
> > > Sorry not done yet.  
> > For you comment 4:
> > 
> > The code needs to verify that the user correctly specified the "l" 
> > constraint modifier.  We already emit error like following?
> > 
> > Do you mean, we need more checking here?  Thanks. 
> > 
> > n.c:4:35: error: unknown symbolic operand name in inline assembly string
> >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > ~~^~~
> > n.c:8:15: error: use of undeclared label 'error1'
> > : error1);
> > 
> > Test is:
> > int frob(int x)
> > {
> >   int y;
> >   asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
> > : /* No outputs. */
> > : "r"(x), "r"()
> > : "memory"
> > : error1);
> >   return y;
> > error:
> >   return -1;
> > }
> > 
> > 
> I mean, there needs to be a diagnostic for the following:
> 
> ```
> asm goto ("jne %h0"x);
> ```
> 
> On a related note, there should also be a diagnostic for the following 
> somewhere:
> 
> ```
> asm ("jne %l0"::"r"(0));
> ```
Hi Eli,

Thanks for your review.

For case:
asm goto ("jne %h0"x);

Without define label x, both clang and my current implementation give error of 
"use of undeclared label"

if x is defined: gcc give error 
asm_goto>!gcc
gcc n.c
n.c: Assembler messages:
n.c:4: Error: operand type mismatch for `jne'

My current implementation don't emit error.  I think this is need to be done in 
LLVM.  Am I right here?

For the case:
asm ("jne %l0"::"r"(0));

gcc don't allow any modifier 'l' with  asm stmt but it allows with asm goto.  
Is that something you are look for?  Thanks.

So I add code in AST/Stmt.cpp to emit error.
.
 return diag::err_asm_invalid_escape;
  } else if (!this->isGCCAsmGoto() && EscapedChar == 'l' &&
 isDigit(*CurPtr)) {
DiagOffs = CurPtr-StrStart;
return diag::err_asm_invalid_operand_number;
  }



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56571/new/

https://reviews.llvm.org/D56571



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


[PATCH] D55226: [Fix][StaticAnalyzer] Bug 39792 - False positive on strcpy targeting struct member

2019-01-14 Thread George Karpenkov via Phabricator via cfe-commits
george.karpenkov added a comment.

Whoops, sorry. There were holidays, and then I did forget about this patch. 
I'll commit this now.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55226/new/

https://reviews.llvm.org/D55226



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


[PATCH] D55226: [Fix][StaticAnalyzer] Bug 39792 - False positive on strcpy targeting struct member

2019-01-14 Thread Pierre van Houtryve via Phabricator via cfe-commits
Pierre-vh added a comment.

Hello!

I'm trying one last ping since it's been a month and it hasn't been commited (I 
think).


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55226/new/

https://reviews.llvm.org/D55226



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


[PATCH] D47819: [compiler-rt] [test] Disable sunrpc tests when rpc/xdr.h is missing

2019-01-14 Thread Peter Wu via Phabricator via cfe-commits
Lekensteyn accepted this revision.
Lekensteyn added a comment.
This revision is now accepted and ready to land.

In D47819#1356498 , @mgorny wrote:

>   PASS: MemorySanitizer-X86_64 :: Linux/sunrpc_bytes.cc (2932 of 6195)
>   PASS: MemorySanitizer-X86_64 :: Linux/sunrpc_string.cc (2935 of 6195)
>   PASS: MemorySanitizer-X86_64 :: Linux/sunrpc.cc (2974 of 6195)
>   PASS: ThreadSanitizer-x86_64 :: sunrpc.cc (5110 of 6195)
>
>
> So yep, it works. Tested both ways now.


Thanks for testing! It looks good to me.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D47819/new/

https://reviews.llvm.org/D47819



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


[PATCH] D47819: [compiler-rt] [test] Disable sunrpc tests when rpc/xdr.h is missing

2019-01-14 Thread Michał Górny via Phabricator via cfe-commits
mgorny added a comment.

  PASS: MemorySanitizer-X86_64 :: Linux/sunrpc_bytes.cc (2932 of 6195)
  PASS: MemorySanitizer-X86_64 :: Linux/sunrpc_string.cc (2935 of 6195)
  PASS: MemorySanitizer-X86_64 :: Linux/sunrpc.cc (2974 of 6195)
  PASS: ThreadSanitizer-x86_64 :: sunrpc.cc (5110 of 6195)

So yep, it works. Tested both ways now.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D47819/new/

https://reviews.llvm.org/D47819



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


r351089 - [WebAssembly] Remove old builtins

2019-01-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Mon Jan 14 10:28:10 2019
New Revision: 351089

URL: http://llvm.org/viewvc/llvm-project?rev=351089=rev
Log:
[WebAssembly] Remove old builtins

This removes the old grow_memory and mem.grow-style builtins, leaving just
the memory.grow-style builtins.

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

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/test/CodeGen/builtins-wasm.c

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=351089=351088=351089=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Mon Jan 14 10:28:10 
2019
@@ -26,14 +26,6 @@
 BUILTIN(__builtin_wasm_memory_size, "zIi", "n")
 BUILTIN(__builtin_wasm_memory_grow, "zIiz", "n")
 
-// These are the old names.
-BUILTIN(__builtin_wasm_mem_size, "zIi", "n")
-BUILTIN(__builtin_wasm_mem_grow, "zIiz", "n")
-
-// These are the old old names. They also lack the immediate field.
-BUILTIN(__builtin_wasm_current_memory, "z", "n")
-BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
-
 // Floating point min/max
 BUILTIN(__builtin_wasm_min_f32, "fff", "nc")
 BUILTIN(__builtin_wasm_max_f32, "fff", "nc")

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351089=351088=351089=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Jan 14 10:28:10 2019
@@ -13087,31 +13087,6 @@ Value *CodeGenFunction::EmitWebAssemblyB
 Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_grow, ResultType);
 return Builder.CreateCall(Callee, Args);
   }
-  case WebAssembly::BI__builtin_wasm_mem_size: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *I = EmitScalarExpr(E->getArg(0));
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_size, ResultType);
-return Builder.CreateCall(Callee, I);
-  }
-  case WebAssembly::BI__builtin_wasm_mem_grow: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *Args[] = {
-  EmitScalarExpr(E->getArg(0)),
-  EmitScalarExpr(E->getArg(1))
-};
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_mem_grow, ResultType);
-return Builder.CreateCall(Callee, Args);
-  }
-  case WebAssembly::BI__builtin_wasm_current_memory: {
-llvm::Type *ResultType = ConvertType(E->getType());
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_current_memory, 
ResultType);
-return Builder.CreateCall(Callee);
-  }
-  case WebAssembly::BI__builtin_wasm_grow_memory: {
-Value *X = EmitScalarExpr(E->getArg(0));
-Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_grow_memory, 
X->getType());
-return Builder.CreateCall(Callee, X);
-  }
   case WebAssembly::BI__builtin_wasm_throw: {
 Value *Tag = EmitScalarExpr(E->getArg(0));
 Value *Obj = EmitScalarExpr(E->getArg(1));

Modified: cfe/trunk/test/CodeGen/builtins-wasm.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-wasm.c?rev=351089=351088=351089=diff
==
--- cfe/trunk/test/CodeGen/builtins-wasm.c (original)
+++ cfe/trunk/test/CodeGen/builtins-wasm.c Mon Jan 14 10:28:10 2019
@@ -26,30 +26,6 @@ __SIZE_TYPE__ memory_grow(__SIZE_TYPE__
   // WEBASSEMBLY64: call i64 @llvm.wasm.memory.grow.i64(i32 0, i64 %{{.*}})
 }
 
-__SIZE_TYPE__ mem_size(void) {
-  return __builtin_wasm_mem_size(0);
-  // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.mem.size.i32(i32 0)
-  // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.mem.size.i64(i32 0)
-}
-
-__SIZE_TYPE__ mem_grow(__SIZE_TYPE__ delta) {
-  return __builtin_wasm_mem_grow(0, delta);
-  // WEBASSEMBLY32: call i32 @llvm.wasm.mem.grow.i32(i32 0, i32 %{{.*}})
-  // WEBASSEMBLY64: call i64 @llvm.wasm.mem.grow.i64(i32 0, i64 %{{.*}})
-}
-
-__SIZE_TYPE__ current_memory(void) {
-  return __builtin_wasm_current_memory();
-  // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.current.memory.i32()
-  // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.current.memory.i64()
-}
-
-__SIZE_TYPE__ grow_memory(__SIZE_TYPE__ delta) {
-  return __builtin_wasm_grow_memory(delta);
-  // WEBASSEMBLY32: call i32 @llvm.wasm.grow.memory.i32(i32 %{{.*}})
-  // WEBASSEMBLY64: call i64 @llvm.wasm.grow.memory.i64(i64 %{{.*}})
-}
-
 void throw(unsigned int tag, void *obj) {
   return __builtin_wasm_throw(tag, obj);
   // WEBASSEMBLY32: call void @llvm.wasm.throw(i32 %{{.*}}, i8* %{{.*}})


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


[PATCH] D53763: [libc++] [test] Fix logic error in tests; enable for MSVC previews

2019-01-14 Thread Casey Carter via Phabricator via cfe-commits
CaseyCarter added a comment.

In D53763#1356356 , @mclow.lists wrote:

> I'm a bit concerned about the `TEST_HAS_NO_SPACESHIP_OPERATOR` and how it 
> tracks with `_LIBCPP_HAS_NO_SPACESHIP_OPERATOR`, but I'm not going to hold 
> this up for that.


Same. I tried to convince the compiler guys to define a feature-test macro, but 
they're paranoid about doing so before it's in the standard. We can clean this 
up when that happens.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53763/new/

https://reviews.llvm.org/D53763



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


[PATCH] D54176: [PGO] clang part of change for context-sensitive PGO.

2019-01-14 Thread Rong Xu via Phabricator via cfe-commits
xur updated this revision to Diff 181587.
xur added a comment.

Update the patch to sync with  https://reviews.llvm.org/D54175


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54176/new/

https://reviews.llvm.org/D54176

Files:
  include/clang/Basic/CodeGenOptions.h
  include/clang/Driver/Options.td
  lib/CodeGen/BackendUtil.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains/Clang.cpp
  lib/Driver/ToolChains/CommonArgs.cpp
  lib/Frontend/CompilerInvocation.cpp
  test/CodeGen/Inputs/pgotestir.proftext
  test/CodeGen/Inputs/pgotestir_cs.proftext
  test/CodeGen/cspgo-instrumentation.c
  test/CodeGen/cspgo-instrumentation_thinlto.c

Index: test/CodeGen/cspgo-instrumentation_thinlto.c
===
--- test/CodeGen/cspgo-instrumentation_thinlto.c
+++ test/CodeGen/cspgo-instrumentation_thinlto.c
@@ -0,0 +1,52 @@
+// Test if CSPGO instrumentation and use pass are invoked in thinlto.
+//
+// RUN: rm -rf %t && mkdir %t
+// RUN: llvm-profdata merge -o %t/noncs.profdata %S/Inputs/pgotestir.proftext
+//
+// Ensure Pass PGOInstrumentationGenPass is not invoked in PreLink.
+// RUN: %clang_cc1 -O2 -fprofile-instrument-use-path=%t/noncs.profdata -fprofile-instrument=csllvm %s -fprofile-instrument-path=default.profraw -flto=thin -mllvm -debug-pass=Structure -emit-llvm-bc -o %t/foo_fe.bc 2>&1 | FileCheck %s -check-prefix=CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE
+// RUN: %clang_cc1 -O2 -fprofile-instrument-use-path=%t/noncs.profdata -fprofile-instrument=csllvm %s -fprofile-instrument-path=default.profraw  -flto=thin -fexperimental-new-pass-manager -fdebug-pass-manager -emit-llvm-bc -o %t/foo_fe_pm.bc 2>&1 | FileCheck %s -check-prefix=CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE-NEWPM
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE: PGOInstrumentationUsePass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE: PGOInstrumentationGenCreateVarPass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE-NOT: PGOInstrumentationGenPass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE-NEWPM: Running pass: PGOInstrumentationUse
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE-NEWPM: Running pass: PGOInstrumentationGenCreateVar
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-PRE-NEWPM-NOT: Running pass: PGOInstrumentationGen on
+//
+// RUN: llvm-lto -thinlto -o %t/foo %t/foo_fe.bc
+// RUN: llvm-lto -thinlto -o %t/foo_pm %t/foo_fe_pm.bc
+// Ensure Pass PGOInstrumentationGenPass is invoked in PostLink.
+// RUN: %clang_cc1 -O2 -x ir %t/foo_fe.bc -fthinlto-index=%t/foo.thinlto.bc -fprofile-instrument=csllvm -fprofile-instrument-path=default.profraw  -flto=thin -emit-llvm -mllvm -debug-pass=Structure -o - |& FileCheck %s -check-prefix=CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST
+// RUN: %clang_cc1 -O2 -x ir %t/foo_fe_pm.bc -fthinlto-index=%t/foo_pm.thinlto.bc -fexperimental-new-pass-manager -fdebug-pass-manager  -fprofile-instrument=csllvm -fprofile-instrument-path=default.profraw  -flto=thin -emit-llvm -o - |& FileCheck %s -check-prefix=CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NEWPM
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NOT: PGOInstrumentationUsePass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NOT: PGOInstrumentationGenCreateVarPass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST: PGOInstrumentationGenPass
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NEWPM-NOT: Running pass: PGOInstrumentationUse
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NEWPM-NOT: Running pass: PGOInstrumentationGenCreateVar
+// CHECK-CSPGOGENPASS-INVOKED-INSTR-GEN-POST-NEWPM: Running pass: PGOInstrumentationGen on
+//
+// RUN: llvm-profdata merge -o %t/cs.profdata %S/Inputs/pgotestir_cs.proftext
+//
+// Ensure Pass PGOInstrumentationUsePass is invoked Once in PreLink.
+// RUN: %clang_cc1 -O2 -fprofile-instrument-use-path=%t/cs.profdata %s -flto=thin -mllvm -debug-pass=Structure -emit-llvm-bc -o %t/foo_fe.bc 2>&1 | FileCheck %s -check-prefix=CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE
+// RUN: %clang_cc1 -O2 -fprofile-instrument-use-path=%t/cs.profdata %s -flto=thin -fexperimental-new-pass-manager -fdebug-pass-manager -emit-llvm-bc -o %t/foo_fe_pm.bc 2>&1 | FileCheck %s -check-prefix=CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE-NEWPM
+// CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE: PGOInstrumentationUsePass
+// CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE-NOT: PGOInstrumentationUsePass
+// CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE-NEWPM: Running pass: PGOInstrumentationUse
+// CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-PRE-NEWPM-NOT: Running pass: PGOInstrumentationUse
+//
+// RUN: llvm-lto -thinlto -o %t/foo %t/foo_fe.bc
+// RUN: llvm-lto -thinlto -o %t/foo_pm %t/foo_fe_pm.bc
+// Ensure Pass PGOInstrumentationUSEPass is invoked in PostLink.
+// RUN: %clang_cc1 -O2 -x ir %t/foo_fe.bc -fthinlto-index=%t/foo.thinlto.bc -fprofile-instrument-use-path=%t_cs.profdata -flto=thin -emit-llvm -mllvm -debug-pass=Structure -o - 2>&1 | FileCheck %s -check-prefix=CHECK-CSPGOUSEPASS-INVOKED-INSTR-USE-POST
+// RUN: %clang_cc1 -O2 -x ir 

[PATCH] D56650: [lld] [ELF] Support customizing behavior on target triple

2019-01-14 Thread Rui Ueyama via Phabricator via cfe-commits
ruiu accepted this revision.
ruiu added a comment.
This revision is now accepted and ready to land.

Let me make it clear again that I'm *not* okay with this approach. Please 
explicitly pass command line arguments from the compiler driver to the linker.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56650/new/

https://reviews.llvm.org/D56650



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


[PATCH] D56241: [Sema] expose a control flag for integer to pointer ext warning

2019-01-14 Thread Kristina Brooks via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC351082: [Sema] Expose a control flag for integer to pointer 
ext warning (authored by kristina, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D56241?vs=180143=181585#toc

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56241/new/

https://reviews.llvm.org/D56241

Files:
  include/clang/Basic/DiagnosticSemaKinds.td
  test/Misc/warning-flags.c
  test/Sema/ext-typecheck-comparison-of-pointer-integer.c


Index: include/clang/Basic/DiagnosticSemaKinds.td
===
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -5875,7 +5875,8 @@
 def err_typecheck_comparison_of_fptr_to_void : Error<
   "equality comparison between function pointer and void pointer (%0 and %1)">;
 def ext_typecheck_comparison_of_pointer_integer : ExtWarn<
-  "comparison between pointer and integer (%0 and %1)">;
+  "comparison between pointer and integer (%0 and %1)">,
+  InGroup>;
 def err_typecheck_comparison_of_pointer_integer : Error<
   "comparison between pointer and integer (%0 and %1)">;
 def ext_typecheck_comparison_of_distinct_pointers : ExtWarn<
Index: test/Misc/warning-flags.c
===
--- test/Misc/warning-flags.c
+++ test/Misc/warning-flags.c
@@ -18,7 +18,7 @@
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (75):
+CHECK: Warnings without flags (74):
 CHECK-NEXT:   ext_excess_initializers
 CHECK-NEXT:   ext_excess_initializers_in_char_array_initializer
 CHECK-NEXT:   ext_expected_semi_decl_list
@@ -29,7 +29,6 @@
 CHECK-NEXT:   ext_new_paren_array_nonconst
 CHECK-NEXT:   ext_plain_complex
 CHECK-NEXT:   ext_template_arg_extra_parens
-CHECK-NEXT:   ext_typecheck_comparison_of_pointer_integer
 CHECK-NEXT:   ext_typecheck_cond_incompatible_operands
 CHECK-NEXT:   ext_typecheck_ordered_comparison_of_pointer_integer
 CHECK-NEXT:   ext_using_undefined_std
Index: test/Sema/ext-typecheck-comparison-of-pointer-integer.c
===
--- test/Sema/ext-typecheck-comparison-of-pointer-integer.c
+++ test/Sema/ext-typecheck-comparison-of-pointer-integer.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify 
-DEXPECTWARNING %s 
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify 
-Wno-pointer-integer-compare %s 
+
+#ifdef EXPECTWARNING
+// expected-warning@+6 {{comparison between pointer and integer ('int' and 
'int *')}}
+#else
+// expected-no-diagnostics 
+#endif
+
+int test_ext_typecheck_comparison_of_pointer_integer(int integer, int * 
pointer) {
+   return integer != pointer; 
+}


Index: include/clang/Basic/DiagnosticSemaKinds.td
===
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -5875,7 +5875,8 @@
 def err_typecheck_comparison_of_fptr_to_void : Error<
   "equality comparison between function pointer and void pointer (%0 and %1)">;
 def ext_typecheck_comparison_of_pointer_integer : ExtWarn<
-  "comparison between pointer and integer (%0 and %1)">;
+  "comparison between pointer and integer (%0 and %1)">,
+  InGroup>;
 def err_typecheck_comparison_of_pointer_integer : Error<
   "comparison between pointer and integer (%0 and %1)">;
 def ext_typecheck_comparison_of_distinct_pointers : ExtWarn<
Index: test/Misc/warning-flags.c
===
--- test/Misc/warning-flags.c
+++ test/Misc/warning-flags.c
@@ -18,7 +18,7 @@
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (75):
+CHECK: Warnings without flags (74):
 CHECK-NEXT:   ext_excess_initializers
 CHECK-NEXT:   ext_excess_initializers_in_char_array_initializer
 CHECK-NEXT:   ext_expected_semi_decl_list
@@ -29,7 +29,6 @@
 CHECK-NEXT:   ext_new_paren_array_nonconst
 CHECK-NEXT:   ext_plain_complex
 CHECK-NEXT:   ext_template_arg_extra_parens
-CHECK-NEXT:   ext_typecheck_comparison_of_pointer_integer
 CHECK-NEXT:   ext_typecheck_cond_incompatible_operands
 CHECK-NEXT:   ext_typecheck_ordered_comparison_of_pointer_integer
 CHECK-NEXT:   ext_using_undefined_std
Index: test/Sema/ext-typecheck-comparison-of-pointer-integer.c
===
--- test/Sema/ext-typecheck-comparison-of-pointer-integer.c
+++ test/Sema/ext-typecheck-comparison-of-pointer-integer.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify -DEXPECTWARNING %s 
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify -Wno-pointer-integer-compare %s 
+
+#ifdef EXPECTWARNING
+// expected-warning@+6 {{comparison between 

r351082 - [Sema] Expose a control flag for integer to pointer ext warning

2019-01-14 Thread Kristina Brooks via cfe-commits
Author: kristina
Date: Mon Jan 14 10:16:51 2019
New Revision: 351082

URL: http://llvm.org/viewvc/llvm-project?rev=351082=rev
Log:
[Sema] Expose a control flag for integer to pointer ext warning

While building openJDK11u, it seems that some of the code in the
native core libraries make liberal use of integer to pointer
comparisons. We currently have no flag to disabled this warning.
This add such a flag.

Patch by Kader (abdoul-kader keita)

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


Added:
cfe/trunk/test/Sema/ext-typecheck-comparison-of-pointer-integer.c
Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/test/Misc/warning-flags.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=351082=351081=351082=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Jan 14 10:16:51 
2019
@@ -5875,7 +5875,8 @@ def ext_typecheck_comparison_of_fptr_to_
 def err_typecheck_comparison_of_fptr_to_void : Error<
   "equality comparison between function pointer and void pointer (%0 and %1)">;
 def ext_typecheck_comparison_of_pointer_integer : ExtWarn<
-  "comparison between pointer and integer (%0 and %1)">;
+  "comparison between pointer and integer (%0 and %1)">,
+  InGroup>;
 def err_typecheck_comparison_of_pointer_integer : Error<
   "comparison between pointer and integer (%0 and %1)">;
 def ext_typecheck_comparison_of_distinct_pointers : ExtWarn<

Modified: cfe/trunk/test/Misc/warning-flags.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/warning-flags.c?rev=351082=351081=351082=diff
==
--- cfe/trunk/test/Misc/warning-flags.c (original)
+++ cfe/trunk/test/Misc/warning-flags.c Mon Jan 14 10:16:51 2019
@@ -18,7 +18,7 @@ This test serves two purposes:
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (75):
+CHECK: Warnings without flags (74):
 CHECK-NEXT:   ext_excess_initializers
 CHECK-NEXT:   ext_excess_initializers_in_char_array_initializer
 CHECK-NEXT:   ext_expected_semi_decl_list
@@ -29,7 +29,6 @@ CHECK-NEXT:   ext_missing_whitespace_aft
 CHECK-NEXT:   ext_new_paren_array_nonconst
 CHECK-NEXT:   ext_plain_complex
 CHECK-NEXT:   ext_template_arg_extra_parens
-CHECK-NEXT:   ext_typecheck_comparison_of_pointer_integer
 CHECK-NEXT:   ext_typecheck_cond_incompatible_operands
 CHECK-NEXT:   ext_typecheck_ordered_comparison_of_pointer_integer
 CHECK-NEXT:   ext_using_undefined_std

Added: cfe/trunk/test/Sema/ext-typecheck-comparison-of-pointer-integer.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/ext-typecheck-comparison-of-pointer-integer.c?rev=351082=auto
==
--- cfe/trunk/test/Sema/ext-typecheck-comparison-of-pointer-integer.c (added)
+++ cfe/trunk/test/Sema/ext-typecheck-comparison-of-pointer-integer.c Mon Jan 
14 10:16:51 2019
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify 
-DEXPECTWARNING %s 
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only  -verify 
-Wno-pointer-integer-compare %s 
+
+#ifdef EXPECTWARNING
+// expected-warning@+6 {{comparison between pointer and integer ('int' and 
'int *')}}
+#else
+// expected-no-diagnostics 
+#endif
+
+int test_ext_typecheck_comparison_of_pointer_integer(int integer, int * 
pointer) {
+   return integer != pointer; 
+}


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


[PATCH] D54945: This commit adds a chapter about clang-tidy integrations

2019-01-14 Thread Eugene Zelenko via Phabricator via cfe-commits
Eugene.Zelenko added a comment.

In D54945#1355920 , @MarinaKalashina 
wrote:

> @Eugene.Zelenko
>
> > I would suggest to rename contribution to Contributing (see LLVM 
> > documentation) and integrations to Integrations.
>
> Sure, done.
>
> > Will be also good idea to fix D55523  
> > script warnings.
>
> The script warns about double spaces and line width in the table, for example:
>
>   warning: line 39 contains double spaces
>   warning: line 39 is in excess of 80 characters (196)
>
>
> These spaces and width are intended since they 'draw' the table layout. Do 
> you think we could ignore such warnings in this particular case?


Sure, it's fine to leave table as it is. Same thing is done in LLDB code where 
tables are excluded from Clang-format.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54945/new/

https://reviews.llvm.org/D54945



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


[PATCH] D56597: [clangd] Add Limit parameter for xref.

2019-01-14 Thread Haojian Wu via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL351081: [clangd] Add Limit parameter for xref. (authored by 
hokein, committed by ).
Herald added a subscriber: llvm-commits.

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56597/new/

https://reviews.llvm.org/D56597

Files:
  clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
  clang-tools-extra/trunk/clangd/ClangdServer.cpp
  clang-tools-extra/trunk/clangd/ClangdServer.h
  clang-tools-extra/trunk/clangd/XRefs.cpp
  clang-tools-extra/trunk/clangd/XRefs.h
  clang-tools-extra/trunk/clangd/index/Index.h
  clang-tools-extra/trunk/clangd/index/MemIndex.cpp
  clang-tools-extra/trunk/clangd/index/Merge.cpp
  clang-tools-extra/trunk/clangd/index/dex/Dex.cpp
  clang-tools-extra/trunk/unittests/clangd/DexTests.cpp
  clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp
  clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp

Index: clang-tools-extra/trunk/clangd/XRefs.cpp
===
--- clang-tools-extra/trunk/clangd/XRefs.cpp
+++ clang-tools-extra/trunk/clangd/XRefs.cpp
@@ -704,7 +704,9 @@
 }
 
 std::vector findReferences(ParsedAST , Position Pos,
- const SymbolIndex *Index) {
+ uint32_t Limit, const SymbolIndex *Index) {
+  if (!Limit)
+Limit = std::numeric_limits::max();
   std::vector Results;
   const SourceManager  = AST.getASTContext().getSourceManager();
   auto MainFilePath =
@@ -733,26 +735,30 @@
   }
 
   // Now query the index for references from other files.
-  if (!Index)
-return Results;
-  RefsRequest Req;
-  for (const Decl *D : TargetDecls) {
-// Not all symbols can be referenced from outside (e.g. function-locals).
-// TODO: we could skip TU-scoped symbols here (e.g. static functions) if
-// we know this file isn't a header. The details might be tricky.
-if (D->getParentFunctionOrMethod())
-  continue;
-if (auto ID = getSymbolID(D))
-  Req.IDs.insert(*ID);
+  if (Index && Results.size() < Limit) {
+RefsRequest Req;
+Req.Limit = Limit;
+
+for (const Decl *D : TargetDecls) {
+  // Not all symbols can be referenced from outside (e.g. function-locals).
+  // TODO: we could skip TU-scoped symbols here (e.g. static functions) if
+  // we know this file isn't a header. The details might be tricky.
+  if (D->getParentFunctionOrMethod())
+continue;
+  if (auto ID = getSymbolID(D))
+Req.IDs.insert(*ID);
+}
+if (Req.IDs.empty())
+  return Results;
+Index->refs(Req, [&](const Ref ) {
+  auto LSPLoc = toLSPLocation(R.Location, *MainFilePath);
+  // Avoid indexed results for the main file - the AST is authoritative.
+  if (LSPLoc && LSPLoc->uri.file() != *MainFilePath)
+Results.push_back(std::move(*LSPLoc));
+});
   }
-  if (Req.IDs.empty())
-return Results;
-  Index->refs(Req, [&](const Ref ) {
-auto LSPLoc = toLSPLocation(R.Location, *MainFilePath);
-// Avoid indexed results for the main file - the AST is authoritative.
-if (LSPLoc && LSPLoc->uri.file() != *MainFilePath)
-  Results.push_back(std::move(*LSPLoc));
-  });
+  if (Results.size() > Limit)
+Results.resize(Limit);
   return Results;
 }
 
Index: clang-tools-extra/trunk/clangd/ClangdServer.h
===
--- clang-tools-extra/trunk/clangd/ClangdServer.h
+++ clang-tools-extra/trunk/clangd/ClangdServer.h
@@ -181,7 +181,7 @@
Callback> CB);
 
   /// Retrieve locations for symbol references.
-  void findReferences(PathRef File, Position Pos,
+  void findReferences(PathRef File, Position Pos, uint32_t Limit,
   Callback> CB);
 
   /// Run formatting for \p Rng inside \p File with content \p Code.
Index: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
===
--- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
+++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
@@ -710,7 +710,7 @@
 void ClangdLSPServer::onReference(const ReferenceParams ,
   Callback> Reply) {
   Server->findReferences(Params.textDocument.uri.file(), Params.position,
- std::move(Reply));
+ CCOpts.Limit, std::move(Reply));
 }
 
 void ClangdLSPServer::onSymbolInfo(const TextDocumentPositionParams ,
Index: clang-tools-extra/trunk/clangd/index/Index.h
===
--- clang-tools-extra/trunk/clangd/index/Index.h
+++ clang-tools-extra/trunk/clangd/index/Index.h
@@ -476,6 +476,10 @@
 struct RefsRequest {
   llvm::DenseSet IDs;
   RefKind Filter = RefKind::All;
+  /// If set, limit the number of refers returned from the index. The index may
+  /// choose to return less than this, e.g. it tries to avoid 

[clang-tools-extra] r351081 - [clangd] Add Limit parameter for xref.

2019-01-14 Thread Haojian Wu via cfe-commits
Author: hokein
Date: Mon Jan 14 10:11:09 2019
New Revision: 351081

URL: http://llvm.org/viewvc/llvm-project?rev=351081=rev
Log:
[clangd] Add Limit parameter for xref.

Reviewers: sammccall

Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, 
cfe-commits

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

Modified:
clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
clang-tools-extra/trunk/clangd/ClangdServer.cpp
clang-tools-extra/trunk/clangd/ClangdServer.h
clang-tools-extra/trunk/clangd/XRefs.cpp
clang-tools-extra/trunk/clangd/XRefs.h
clang-tools-extra/trunk/clangd/index/Index.h
clang-tools-extra/trunk/clangd/index/MemIndex.cpp
clang-tools-extra/trunk/clangd/index/Merge.cpp
clang-tools-extra/trunk/clangd/index/dex/Dex.cpp
clang-tools-extra/trunk/unittests/clangd/DexTests.cpp
clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp
clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp

Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp?rev=351081=351080=351081=diff
==
--- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Mon Jan 14 10:11:09 2019
@@ -710,7 +710,7 @@ void ClangdLSPServer::onChangeConfigurat
 void ClangdLSPServer::onReference(const ReferenceParams ,
   Callback> Reply) {
   Server->findReferences(Params.textDocument.uri.file(), Params.position,
- std::move(Reply));
+ CCOpts.Limit, std::move(Reply));
 }
 
 void ClangdLSPServer::onSymbolInfo(const TextDocumentPositionParams ,

Modified: clang-tools-extra/trunk/clangd/ClangdServer.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdServer.cpp?rev=351081=351080=351081=diff
==
--- clang-tools-extra/trunk/clangd/ClangdServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdServer.cpp Mon Jan 14 10:11:09 2019
@@ -500,13 +500,13 @@ void ClangdServer::documentSymbols(llvm:
Bind(Action, std::move(CB)));
 }
 
-void ClangdServer::findReferences(PathRef File, Position Pos,
+void ClangdServer::findReferences(PathRef File, Position Pos, uint32_t Limit,
   Callback> CB) {
-  auto Action = [Pos, this](Callback> CB,
-llvm::Expected InpAST) {
+  auto Action = [Pos, Limit, this](Callback> CB,
+   llvm::Expected InpAST) {
 if (!InpAST)
   return CB(InpAST.takeError());
-CB(clangd::findReferences(InpAST->AST, Pos, Index));
+CB(clangd::findReferences(InpAST->AST, Pos, Limit, Index));
   };
 
   WorkScheduler.runWithAST("References", File, Bind(Action, std::move(CB)));

Modified: clang-tools-extra/trunk/clangd/ClangdServer.h
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdServer.h?rev=351081=351080=351081=diff
==
--- clang-tools-extra/trunk/clangd/ClangdServer.h (original)
+++ clang-tools-extra/trunk/clangd/ClangdServer.h Mon Jan 14 10:11:09 2019
@@ -181,7 +181,7 @@ public:
Callback> CB);
 
   /// Retrieve locations for symbol references.
-  void findReferences(PathRef File, Position Pos,
+  void findReferences(PathRef File, Position Pos, uint32_t Limit,
   Callback> CB);
 
   /// Run formatting for \p Rng inside \p File with content \p Code.

Modified: clang-tools-extra/trunk/clangd/XRefs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/XRefs.cpp?rev=351081=351080=351081=diff
==
--- clang-tools-extra/trunk/clangd/XRefs.cpp (original)
+++ clang-tools-extra/trunk/clangd/XRefs.cpp Mon Jan 14 10:11:09 2019
@@ -704,7 +704,9 @@ llvm::Optional getHover(ParsedAST
 }
 
 std::vector findReferences(ParsedAST , Position Pos,
- const SymbolIndex *Index) {
+ uint32_t Limit, const SymbolIndex *Index) 
{
+  if (!Limit)
+Limit = std::numeric_limits::max();
   std::vector Results;
   const SourceManager  = AST.getASTContext().getSourceManager();
   auto MainFilePath =
@@ -733,26 +735,30 @@ std::vector findReferences(Par
   }
 
   // Now query the index for references from other files.
-  if (!Index)
-return Results;
-  RefsRequest Req;
-  for (const Decl *D : TargetDecls) {
-// Not all symbols can be referenced from outside (e.g. function-locals).
-// TODO: we could skip TU-scoped symbols here (e.g. static functions) if
-// we know this file isn't a header. The details might be tricky.
-if 

[PATCH] D56671: [COFF, ARM64] Add __nop intrinsic

2019-01-14 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang created this revision.
mgrang added reviewers: rnk, efriedma, TomTan, haripul, ssijaric.
Herald added subscribers: kristof.beyls, javed.absar.

Repository:
  rC Clang

https://reviews.llvm.org/D56671

Files:
  lib/Headers/intrin.h
  test/Headers/ms-arm64-intrin.cpp


Index: test/Headers/ms-arm64-intrin.cpp
===
--- /dev/null
+++ test/Headers/ms-arm64-intrin.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
+
+// REQUIRES: aarch64-registered-target
+
+#include 
+
+void f() {
+// CHECK: nop
+  __nop();
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -549,6 +549,9 @@
 __halt(void) {
   __asm__ volatile ("hlt");
 }
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 static __inline__ void __DEFAULT_FN_ATTRS
 __nop(void) {
   __asm__ volatile ("nop");


Index: test/Headers/ms-arm64-intrin.cpp
===
--- /dev/null
+++ test/Headers/ms-arm64-intrin.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -triple arm64-windows \
+// RUN: -fms-compatibility -fms-compatibility-version=17.00 \
+// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -isystem %S/Inputs/include %s -S -o - 2>&1 | FileCheck %s
+
+// REQUIRES: aarch64-registered-target
+
+#include 
+
+void f() {
+// CHECK: nop
+  __nop();
+}
Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -549,6 +549,9 @@
 __halt(void) {
   __asm__ volatile ("hlt");
 }
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
 static __inline__ void __DEFAULT_FN_ATTRS
 __nop(void) {
   __asm__ volatile ("nop");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


  1   2   3   >