[PATCH] D157283: [clang] Match -isysroot behaviour with system compiler on Darwin

2023-08-23 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D157283#4611447 , @PiotrZSL wrote:

> I don't know how, but somehow this change breaks 
> clang-tidy/infrastructure/clang-tidy-mac-libcxx.cpp test.

I think we have a patch for that... @ldionne WDYT about upstreaming 
9edb9a711503d540cf3126c0fde11ce9a0d9a7aa 
 ?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157283

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


[PATCH] D157283: [clang] Match -isysroot behaviour with system compiler on Darwin

2023-08-23 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM, thank you!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157283

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


[PATCH] D157925: [MachineOutliner][LTO] Enable outlining of linkonceodr functions on all targets.

2023-08-14 Thread Jon Roelofs via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1a135bceb66b: [MachineOutliner][LTO] Enable outlining of 
linkonceodr functions on all targets. (authored by jroelofs).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157925

Files:
  clang/lib/Driver/ToolChains/Darwin.cpp
  clang/test/Driver/darwin-ld.c


Index: clang/test/Driver/darwin-ld.c
===
--- clang/test/Driver/darwin-ld.c
+++ clang/test/Driver/darwin-ld.c
@@ -358,11 +358,31 @@
 // Check that we can pass the outliner down to the linker.
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -moutline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MOUTLINE %s < %t.log
-// MOUTLINE: {{ld(.exe)?"}}
-// MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: FileCheck -check-prefix=ARM64-MOUTLINE %s < %t.log
+// ARM64-MOUTLINE: {{ld(.exe)?"}}
+// ARM64-MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -moutline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARM64E-MOUTLINE %s < %t.log
+// ARM64E-MOUTLINE: {{ld(.exe)?"}}
+// ARM64E-MOUTLINE-SAME: "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target armv7em-apple-darwin -moutline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARMV7EM-MOUTLINE %s < %t.log
+// ARMV7EM-MOUTLINE: {{ld(.exe)?"}}
+// ARMV7EM-MOUTLINE-SAME: "-mllvm" "-enable-linkonceodr-outlining"
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -mno-outline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MNO_OUTLINE %s < %t.log
-// MNO_OUTLINE: {{ld(.exe)?"}}
-// MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never"
+// RUN: FileCheck -check-prefix=ARM64-MNO_OUTLINE %s < %t.log
+// ARM64-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARM64-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -mno-outline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARM64E-MNO_OUTLINE %s < %t.log
+// ARM64E-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARM64E-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target armv7em-apple-darwin -mno-outline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARMV7EM-MNO_OUTLINE %s < %t.log
+// ARMV7EM-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARMV7EM-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" 
"-mllvm" "-enable-linkonceodr-outlining"
\ No newline at end of file
Index: clang/lib/Driver/ToolChains/Darwin.cpp
===
--- clang/lib/Driver/ToolChains/Darwin.cpp
+++ clang/lib/Driver/ToolChains/Darwin.cpp
@@ -615,10 +615,6 @@
   if (getMachOToolChain().getMachOArchName(Args) == "arm64") {
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back("-enable-machine-outliner");
-
-// Outline from linkonceodr functions by default in LTO.
-CmdArgs.push_back("-mllvm");
-CmdArgs.push_back("-enable-linkonceodr-outlining");
   }
 } else {
   // Disable all outlining behaviour if we have mno-outline. We need to do
@@ -629,6 +625,12 @@
 }
   }
 
+  // Outline from linkonceodr functions by default in LTO, whenever the 
outliner
+  // is enabled.  Note that the target may enable the machine outliner
+  // independently of -moutline.
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back("-enable-linkonceodr-outlining");
+
   // Setup statistics file output.
   SmallString<128> StatsFile =
   getStatsFileName(Args, Output, Inputs[0], getToolChain().getDriver());


Index: clang/test/Driver/darwin-ld.c
===
--- clang/test/Driver/darwin-ld.c
+++ clang/test/Driver/darwin-ld.c
@@ -358,11 +358,31 @@
 // Check that we can pass the outliner down to the linker.
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -moutline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MOUTLINE %s < %t.log
-// MOUTLINE: {{ld(.exe)?"}}
-// MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: FileCheck -check-prefix=ARM64-MOUTLINE %s < %t.log
+// ARM64-MOUTLINE: {{ld(.exe)?"}}
+// ARM64-MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -moutline -### 

[PATCH] D157925: [MachineOutliner][LTO] Enable outlining of linkonceodr functions on all targets.

2023-08-14 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
jroelofs added reviewers: aemerson, tellenbach.
Herald added subscribers: ormris, inglorion.
Herald added a project: All.
jroelofs requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang.

... that have the outliner enabled.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D157925

Files:
  clang/lib/Driver/ToolChains/Darwin.cpp
  clang/test/Driver/darwin-ld.c


Index: clang/test/Driver/darwin-ld.c
===
--- clang/test/Driver/darwin-ld.c
+++ clang/test/Driver/darwin-ld.c
@@ -358,11 +358,31 @@
 // Check that we can pass the outliner down to the linker.
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -moutline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MOUTLINE %s < %t.log
-// MOUTLINE: {{ld(.exe)?"}}
-// MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: FileCheck -check-prefix=ARM64-MOUTLINE %s < %t.log
+// ARM64-MOUTLINE: {{ld(.exe)?"}}
+// ARM64-MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -moutline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARM64E-MOUTLINE %s < %t.log
+// ARM64E-MOUTLINE: {{ld(.exe)?"}}
+// ARM64E-MOUTLINE-SAME: "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target armv7em-apple-darwin -moutline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARMV7EM-MOUTLINE %s < %t.log
+// ARMV7EM-MOUTLINE: {{ld(.exe)?"}}
+// ARMV7EM-MOUTLINE-SAME: "-mllvm" "-enable-linkonceodr-outlining"
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -mno-outline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MNO_OUTLINE %s < %t.log
-// MNO_OUTLINE: {{ld(.exe)?"}}
-// MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never"
+// RUN: FileCheck -check-prefix=ARM64-MNO_OUTLINE %s < %t.log
+// ARM64-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARM64-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -mno-outline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARM64E-MNO_OUTLINE %s < %t.log
+// ARM64E-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARM64E-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" "-mllvm" 
"-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target armv7em-apple-darwin -mno-outline -### %t.o 2> %t.log
+// RUN: FileCheck -check-prefix=ARMV7EM-MNO_OUTLINE %s < %t.log
+// ARMV7EM-MNO_OUTLINE: {{ld(.exe)?"}}
+// ARMV7EM-MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" 
"-mllvm" "-enable-linkonceodr-outlining"
\ No newline at end of file
Index: clang/lib/Driver/ToolChains/Darwin.cpp
===
--- clang/lib/Driver/ToolChains/Darwin.cpp
+++ clang/lib/Driver/ToolChains/Darwin.cpp
@@ -615,10 +615,6 @@
   if (getMachOToolChain().getMachOArchName(Args) == "arm64") {
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back("-enable-machine-outliner");
-
-// Outline from linkonceodr functions by default in LTO.
-CmdArgs.push_back("-mllvm");
-CmdArgs.push_back("-enable-linkonceodr-outlining");
   }
 } else {
   // Disable all outlining behaviour if we have mno-outline. We need to do
@@ -629,6 +625,12 @@
 }
   }
 
+  // Outline from linkonceodr functions by default in LTO, whenever the 
outliner
+  // is enabled.  Note that the target may enable the machine outliner
+  // independently of -moutline.
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back("-enable-linkonceodr-outlining");
+
   // Setup statistics file output.
   SmallString<128> StatsFile =
   getStatsFileName(Args, Output, Inputs[0], getToolChain().getDriver());


Index: clang/test/Driver/darwin-ld.c
===
--- clang/test/Driver/darwin-ld.c
+++ clang/test/Driver/darwin-ld.c
@@ -358,11 +358,31 @@
 // Check that we can pass the outliner down to the linker.
 // RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
 // RUN:   %clang -target arm64-apple-darwin -moutline -### %t.o 2> %t.log
-// RUN: FileCheck -check-prefix=MOUTLINE %s < %t.log
-// MOUTLINE: {{ld(.exe)?"}}
-// MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: FileCheck -check-prefix=ARM64-MOUTLINE %s < %t.log
+// ARM64-MOUTLINE: {{ld(.exe)?"}}
+// ARM64-MOUTLINE-SAME: "-mllvm" "-enable-machine-outliner" "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=7.0 \
+// RUN:   %clang -target arm64e-apple-darwin -moutline -### %t.o 2> %t.log
+// RU

[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-08 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

Flaky test? Here's a later build where it succeeds, but the change has nothing 
to do with clangd: https://lab.llvm.org/buildbot/#/builders/168/builds/14997


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

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


[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-07 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D157119#4564546 , @vitalybuka 
wrote:

> I suspect one of your recent changes broke 
> https://lab.llvm.org/buildbot/#/builders/168/builds/14944
> Can you please take a look?

Happy to take a look, but there are 28 commits in the blame list for that 
build... what makes you suspect it's the one change that only *adds* build 
dependencies?  ISTM the `clangd` binary should be bit-identical before/after 
this change, right?

I can't reproduce the failure locally. Do we have a way to re-trigger that job 
for specific commits & bisect the blame list?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

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


[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

missed one more: 3d756c32cdf005d0f4c05f561fec4a37b64b7ddd 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

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


[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

back-porting to the release branch: 
https://github.com/llvm/llvm-project/issues/64432


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

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


[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2fb1c1082c01: cmake: add missing dependencies on 
ClangDriverOptions tablegen (authored by jroelofs).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

Files:
  clang-tools-extra/clang-apply-replacements/CMakeLists.txt
  clang-tools-extra/clang-change-namespace/CMakeLists.txt
  clang-tools-extra/clang-doc/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/find-all-symbols/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt
  clang-tools-extra/clang-move/CMakeLists.txt
  clang-tools-extra/clang-query/CMakeLists.txt
  clang-tools-extra/clang-reorder-fields/CMakeLists.txt
  clang-tools-extra/clang-tidy/CMakeLists.txt
  clang-tools-extra/clang-tidy/abseil/CMakeLists.txt
  clang-tools-extra/clang-tidy/altera/CMakeLists.txt
  clang-tools-extra/clang-tidy/android/CMakeLists.txt
  clang-tools-extra/clang-tidy/boost/CMakeLists.txt
  clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
  clang-tools-extra/clang-tidy/cert/CMakeLists.txt
  clang-tools-extra/clang-tidy/concurrency/CMakeLists.txt
  clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt
  clang-tools-extra/clang-tidy/darwin/CMakeLists.txt
  clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt
  clang-tools-extra/clang-tidy/google/CMakeLists.txt
  clang-tools-extra/clang-tidy/hicpp/CMakeLists.txt
  clang-tools-extra/clang-tidy/linuxkernel/CMakeLists.txt
  clang-tools-extra/clang-tidy/llvm/CMakeLists.txt
  clang-tools-extra/clang-tidy/llvmlibc/CMakeLists.txt
  clang-tools-extra/clang-tidy/misc/CMakeLists.txt
  clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
  clang-tools-extra/clang-tidy/mpi/CMakeLists.txt
  clang-tools-extra/clang-tidy/objc/CMakeLists.txt
  clang-tools-extra/clang-tidy/performance/CMakeLists.txt
  clang-tools-extra/clang-tidy/plugin/CMakeLists.txt
  clang-tools-extra/clang-tidy/portability/CMakeLists.txt
  clang-tools-extra/clang-tidy/readability/CMakeLists.txt
  clang-tools-extra/clang-tidy/tool/CMakeLists.txt
  clang-tools-extra/clang-tidy/utils/CMakeLists.txt
  clang-tools-extra/clang-tidy/zircon/CMakeLists.txt
  clang-tools-extra/clangd/index/remote/unimplemented/CMakeLists.txt
  clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
  clang-tools-extra/clangd/xpc/CMakeLists.txt
  clang-tools-extra/include-cleaner/lib/CMakeLists.txt
  clang-tools-extra/modularize/CMakeLists.txt
  clang-tools-extra/pp-trace/CMakeLists.txt
  clang-tools-extra/pseudo/lib/CMakeLists.txt
  clang/CMakeLists.txt
  clang/lib/AST/CMakeLists.txt
  clang/lib/ASTMatchers/CMakeLists.txt
  clang/lib/ASTMatchers/Dynamic/CMakeLists.txt
  clang/lib/Analysis/CMakeLists.txt
  clang/lib/Basic/CMakeLists.txt
  clang/lib/Index/CMakeLists.txt
  clang/lib/Parse/CMakeLists.txt
  clang/lib/Sema/CMakeLists.txt
  clang/lib/Serialization/CMakeLists.txt
  clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt

Index: clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
===
--- clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
+++ clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
@@ -148,4 +148,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Serialization/CMakeLists.txt
===
--- clang/lib/Serialization/CMakeLists.txt
+++ clang/lib/Serialization/CMakeLists.txt
@@ -34,4 +34,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Sema/CMakeLists.txt
===
--- clang/lib/Sema/CMakeLists.txt
+++ clang/lib/Sema/CMakeLists.txt
@@ -71,6 +71,7 @@
   DEPENDS
   ClangOpenCLBuiltinsImpl
   omp_gen
+  ClangDriverOptions
 
   LINK_LIBS
   clangAST
Index: clang/lib/Parse/CMakeLists.txt
===
--- clang/lib/Parse/CMakeLists.txt
+++ clang/lib/Parse/CMakeLists.txt
@@ -32,4 +32,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Index/CMakeLists.txt
===
--- clang/lib/Index/CMakeLists.txt
+++ clang/lib/Index/CMakeLists.txt
@@ -28,4 +28,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -125,6 +125,7 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
 
 target_link_libraries(clangBasic
Index: clang/lib/Analysis/CMakeLists.txt
===
--- clang/lib/Analysis/CMakeLists.txt
+++ clang/lib/Analysis/CMakeLists.txt
@@ -43,6 +43,7 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
 

[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

related discussion: 
https://discourse.llvm.org/t/rfc-permanently-fixing-the-missing-tablegen-dependency-issue/70442/14


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157119

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


[PATCH] D157119: cmake: add missing dependencies on ClangDriverOptions tablegen

2023-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
jroelofs added a reviewer: steven_wu.
Herald added subscribers: PiotrZSL, kadircet, steakhal, carlosgalvezp, 
abrachet, martong, arphaman, kbarton, nemanjai.
Herald added a reviewer: NoQ.
Herald added a reviewer: njames93.
Herald added a project: All.
jroelofs requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added projects: clang, clang-tools-extra.

The modules build trips over this frequently because there is no textual 
include of the tablegen output, but the module includes it.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D157119

Files:
  clang-tools-extra/clang-apply-replacements/CMakeLists.txt
  clang-tools-extra/clang-change-namespace/CMakeLists.txt
  clang-tools-extra/clang-doc/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/find-all-symbols/CMakeLists.txt
  clang-tools-extra/clang-include-fixer/plugin/CMakeLists.txt
  clang-tools-extra/clang-move/CMakeLists.txt
  clang-tools-extra/clang-query/CMakeLists.txt
  clang-tools-extra/clang-reorder-fields/CMakeLists.txt
  clang-tools-extra/clang-tidy/CMakeLists.txt
  clang-tools-extra/clang-tidy/abseil/CMakeLists.txt
  clang-tools-extra/clang-tidy/altera/CMakeLists.txt
  clang-tools-extra/clang-tidy/android/CMakeLists.txt
  clang-tools-extra/clang-tidy/boost/CMakeLists.txt
  clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
  clang-tools-extra/clang-tidy/cert/CMakeLists.txt
  clang-tools-extra/clang-tidy/concurrency/CMakeLists.txt
  clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt
  clang-tools-extra/clang-tidy/darwin/CMakeLists.txt
  clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt
  clang-tools-extra/clang-tidy/google/CMakeLists.txt
  clang-tools-extra/clang-tidy/hicpp/CMakeLists.txt
  clang-tools-extra/clang-tidy/linuxkernel/CMakeLists.txt
  clang-tools-extra/clang-tidy/llvm/CMakeLists.txt
  clang-tools-extra/clang-tidy/llvmlibc/CMakeLists.txt
  clang-tools-extra/clang-tidy/misc/CMakeLists.txt
  clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
  clang-tools-extra/clang-tidy/mpi/CMakeLists.txt
  clang-tools-extra/clang-tidy/objc/CMakeLists.txt
  clang-tools-extra/clang-tidy/performance/CMakeLists.txt
  clang-tools-extra/clang-tidy/plugin/CMakeLists.txt
  clang-tools-extra/clang-tidy/portability/CMakeLists.txt
  clang-tools-extra/clang-tidy/readability/CMakeLists.txt
  clang-tools-extra/clang-tidy/tool/CMakeLists.txt
  clang-tools-extra/clang-tidy/utils/CMakeLists.txt
  clang-tools-extra/clang-tidy/zircon/CMakeLists.txt
  clang-tools-extra/clangd/index/remote/unimplemented/CMakeLists.txt
  clang-tools-extra/clangd/refactor/tweaks/CMakeLists.txt
  clang-tools-extra/clangd/xpc/CMakeLists.txt
  clang-tools-extra/include-cleaner/lib/CMakeLists.txt
  clang-tools-extra/modularize/CMakeLists.txt
  clang-tools-extra/pp-trace/CMakeLists.txt
  clang-tools-extra/pseudo/lib/CMakeLists.txt
  clang/CMakeLists.txt
  clang/lib/AST/CMakeLists.txt
  clang/lib/ASTMatchers/CMakeLists.txt
  clang/lib/ASTMatchers/Dynamic/CMakeLists.txt
  clang/lib/Analysis/CMakeLists.txt
  clang/lib/Basic/CMakeLists.txt
  clang/lib/Index/CMakeLists.txt
  clang/lib/Parse/CMakeLists.txt
  clang/lib/Sema/CMakeLists.txt
  clang/lib/Serialization/CMakeLists.txt
  clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt

Index: clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
===
--- clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
+++ clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
@@ -148,4 +148,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Serialization/CMakeLists.txt
===
--- clang/lib/Serialization/CMakeLists.txt
+++ clang/lib/Serialization/CMakeLists.txt
@@ -34,4 +34,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Sema/CMakeLists.txt
===
--- clang/lib/Sema/CMakeLists.txt
+++ clang/lib/Sema/CMakeLists.txt
@@ -71,6 +71,7 @@
   DEPENDS
   ClangOpenCLBuiltinsImpl
   omp_gen
+  ClangDriverOptions
 
   LINK_LIBS
   clangAST
Index: clang/lib/Parse/CMakeLists.txt
===
--- clang/lib/Parse/CMakeLists.txt
+++ clang/lib/Parse/CMakeLists.txt
@@ -32,4 +32,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Index/CMakeLists.txt
===
--- clang/lib/Index/CMakeLists.txt
+++ clang/lib/Index/CMakeLists.txt
@@ -28,4 +28,5 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -125,6 +125,7 @@
 
   DEPENDS
   omp_gen
+  ClangDriverOptions
   )
 
 target_link_libraries(cla

[PATCH] D74094: [IRGen] Emit lifetime intrinsics around temporary aggregate argument allocas

2023-08-03 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a subscriber: lei.
jroelofs added a comment.

In D74094#4559037 , @dexonsmith wrote:

> In D74094#4554327 , @foad wrote:
>
>> Hi @erik.pilkington, I see this got reverted:
>
> I'm not sure if @erik.pilkington is still watching Phabricator, but in any 
> case I think (like me) he no longer has rdar access. Since this was a Linux 
> PPC bot, it's possible Erik didn't get far investigating the failure. Three 
> years later, the sands may have shifted substantially... maybe the best 
> option to is rebase and investigate the new failures (if any).
>
> @akyrtzi @arphaman @jroelofs, is one of you available to check 
> rdar://58552124, in case it has extra context from the PPC bot failure?

I found rdar://59400672&60009515, which track the revert and reminder to 
investigate.  Neither go into any more detail on how/why it broke that bot, 
unfortunately.  I also found 
https://reviews.llvm.org/rGfafc6e4fdf3673dcf557d6c8ae0c0a4bb3184402 has a tiny 
bit more context than this review.  Maybe @lei can share the reproducer 
mentioned in that thread?  Otherwise, as Duncan said, I think your best bet is 
to try to re-land and see what breaks.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D74094

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-08-01 Thread Jon Roelofs via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGed83797f3cbf: [Intrinsics][ObjC] Mark objc_retain and 
friends as thisreturn. (authored by jroelofs).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
  llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll

Index: llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
===
--- llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
+++ llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
@@ -9,7 +9,7 @@
 define ptr @test_objc_autorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = notail call ptr @objc_autorelease(ptr %arg0)
+; CHECK-NEXT: %0 = notail call ptr @objc_autorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.autorelease(ptr %arg0)
@@ -39,7 +39,7 @@
 define ptr @test_objc_autoreleaseReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_autoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_autoreleaseReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_autoreleaseReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.autoreleaseReturnValue(ptr %arg0)
@@ -119,7 +119,7 @@
 define ptr @test_objc_retain(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retain
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retain(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retain(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retain(ptr %arg0)
@@ -129,7 +129,7 @@
 define ptr @test_objc_retainAutorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call ptr @objc_retainAutorelease(ptr %arg0)
+; CHECK-NEXT: %0 = call ptr @objc_retainAutorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retainAutorelease(ptr %arg0)
@@ -139,7 +139,7 @@
 define ptr @test_objc_retainAutoreleaseReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleaseReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleaseReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = tail call ptr @llvm.objc.retainAutoreleaseReturnValue(ptr %arg0)
@@ -149,7 +149,7 @@
 define ptr @test_objc_retainAutoreleasedReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleasedReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleasedReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr %arg0)
@@ -213,7 +213,7 @@
 define ptr @test_objc_unsafeClaimAutoreleasedReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_unsafeClaimAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue(ptr %arg0)
@@ -260,7 +260,7 @@
 define ptr @test_objc_retain_autorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retain_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call ptr @objc_retain_autorelease(ptr %arg0)
+; CHECK-NEXT: %0 = call ptr @objc_retain_autorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retain.autorelease(ptr %arg0)
Index: llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
===
--- llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -162,6 +162,16 @@
 CallInst::TailCallKind TCK = CI->getTailCallKind();
 NewCI->setTailCallKind(std::max(TCK, OverridingTCK));
 
+// Transfer the 'returned' attribute from the intrinsic to the call site.
+// By applying this only to intrinsic call sites, we avoid applying it to
+// non-ARC explicit calls to things like objc_retain which have not been
+// auto-upgraded to use the intrinsics.
+unsigned Index;
+if (F.getAttributes().hasAttrSomewhere(Attribute::Returned, &Index) &&
+Index)
+  NewCI->addParamAttr(Index - AttributeList::FirstArgIndex,
+  Attribute::Returned);
+
 if (!CI->use_empty())
   CI->replaceAllUsesWith(NewCI);
 CI->eraseFromParent();
Index: llvm/include/llv

[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-08-01 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 546219.
jroelofs added a comment.

Rebase. Avoid the dependency on D156735 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
  llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll

Index: llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
===
--- llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
+++ llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
@@ -9,7 +9,7 @@
 define ptr @test_objc_autorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = notail call ptr @objc_autorelease(ptr %arg0)
+; CHECK-NEXT: %0 = notail call ptr @objc_autorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.autorelease(ptr %arg0)
@@ -39,7 +39,7 @@
 define ptr @test_objc_autoreleaseReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_autoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_autoreleaseReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_autoreleaseReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.autoreleaseReturnValue(ptr %arg0)
@@ -119,7 +119,7 @@
 define ptr @test_objc_retain(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retain
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retain(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retain(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retain(ptr %arg0)
@@ -129,7 +129,7 @@
 define ptr @test_objc_retainAutorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call ptr @objc_retainAutorelease(ptr %arg0)
+; CHECK-NEXT: %0 = call ptr @objc_retainAutorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retainAutorelease(ptr %arg0)
@@ -139,7 +139,7 @@
 define ptr @test_objc_retainAutoreleaseReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleaseReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleaseReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = tail call ptr @llvm.objc.retainAutoreleaseReturnValue(ptr %arg0)
@@ -149,7 +149,7 @@
 define ptr @test_objc_retainAutoreleasedReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleasedReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_retainAutoreleasedReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr %arg0)
@@ -213,7 +213,7 @@
 define ptr @test_objc_unsafeClaimAutoreleasedReturnValue(ptr %arg0) {
 ; CHECK-LABEL: test_objc_unsafeClaimAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr %arg0)
+; CHECK-NEXT: %0 = tail call ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue(ptr %arg0)
@@ -260,7 +260,7 @@
 define ptr @test_objc_retain_autorelease(ptr %arg0) {
 ; CHECK-LABEL: test_objc_retain_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call ptr @objc_retain_autorelease(ptr %arg0)
+; CHECK-NEXT: %0 = call ptr @objc_retain_autorelease(ptr returned %arg0)
 ; CHECK-NEXT: ret ptr %0
 entry:
   %0 = call ptr @llvm.objc.retain.autorelease(ptr %arg0)
Index: llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
===
--- llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -162,6 +162,16 @@
 CallInst::TailCallKind TCK = CI->getTailCallKind();
 NewCI->setTailCallKind(std::max(TCK, OverridingTCK));
 
+// Transfer the 'returned' attribute from the intrinsic to the call site.
+// By applying this only to intrinsic call sites, we avoid applying it to
+// non-ARC explicit calls to things like objc_retain which have not been
+// auto-upgraded to use the intrinsics.
+unsigned Index;
+if (F.getAttributes().hasAttrSomewhere(Attribute::Returned, &Index) &&
+Index)
+  NewCI->addParamAttr(Index - AttributeList::FirstArgIndex,
+  Attribute::Returned);
+
 if (!CI->use_empty())
   CI->replaceAllUsesWith(NewCI);
 CI->eraseFromParent();
Index: llvm/include/llvm/IR/Intrinsics.td
==

[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-07-31 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 545781.

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

https://reviews.llvm.org/D105671

Files:
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp

Index: llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
===
--- llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -162,6 +162,16 @@
 CallInst::TailCallKind TCK = CI->getTailCallKind();
 NewCI->setTailCallKind(std::max(TCK, OverridingTCK));
 
+// Transfer the 'returned' attribute from the intrinsic to the call site.
+// By applying this only to intrinsic call sites, we avoid applying it to
+// non-ARC explicit calls to things like objc_retain which have not been
+// auto-upgraded to use the intrinsics.
+unsigned Index;
+if (F.getAttributes().hasAttrSomewhere(Attribute::Returned, &Index) &&
+Index)
+  NewCI->addParamAttr(Index - AttributeList::FirstArgIndex,
+  Attribute::Returned);
+
 if (!CI->use_empty())
   CI->replaceAllUsesWith(NewCI);
 CI->eraseFromParent();
Index: llvm/include/llvm/IR/Intrinsics.td
===
--- llvm/include/llvm/IR/Intrinsics.td
+++ llvm/include/llvm/IR/Intrinsics.td
@@ -720,11 +720,13 @@
 // eliminate retain and releases where possible.
 
 def int_objc_autorelease: Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_autoreleasePoolPop : Intrinsic<[], [llvm_ptr_ty]>;
 def int_objc_autoreleasePoolPush: Intrinsic<[llvm_ptr_ty], []>;
 def int_objc_autoreleaseReturnValue : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_copyWeak   : Intrinsic<[],
 [llvm_ptr_ty,
  llvm_ptr_ty]>;
@@ -741,13 +743,17 @@
  llvm_ptr_ty]>;
 def int_objc_release: Intrinsic<[], [llvm_ptr_ty]>;
 def int_objc_retain : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutorelease  : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutoreleaseReturnValue   : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutoreleasedReturnValue  : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainBlock: Intrinsic<[llvm_ptr_ty],
 [llvm_ptr_ty]>;
 def int_objc_storeStrong: Intrinsic<[],
@@ -762,7 +768,8 @@
 [llvm_vararg_ty],
 [IntrInaccessibleMemOnly]>;
 def int_objc_unsafeClaimAutoreleasedReturnValue : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainedObject : Intrinsic<[llvm_ptr_ty],
 [llvm_ptr_ty]>;
 def int_objc_unretainedObject   : Intrinsic<[llvm_ptr_ty],
@@ -770,7 +777,8 @@
 def int_objc_unretainedPointer  : Intrinsic<[llvm_ptr_ty],
 [llvm_ptr_ty]>;
 def int_objc_retain_autorelease : Intrinsic<[llvm_ptr_ty],
-

[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-07-31 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

oops, uploaded the wrong patch to this review.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-07-31 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 545779.
jroelofs added a comment.

Move the `stripPointerCasts()` change into its own review: 
https://reviews.llvm.org/D156735


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  llvm/include/llvm/IR/Value.h
  llvm/lib/IR/Value.cpp
  llvm/unittests/IR/InstructionsTest.cpp


Index: llvm/unittests/IR/InstructionsTest.cpp
===
--- llvm/unittests/IR/InstructionsTest.cpp
+++ llvm/unittests/IR/InstructionsTest.cpp
@@ -458,6 +458,35 @@
  wrap(V2Int32PtrAS1Ty), true));
 }
 
+TEST(InstructionsTest, StripPointerCasts) {
+  LLVMContext C;
+  Type *I64PtrTy = Type::getInt64PtrTy(C);
+  Type *I32PtrTy = Type::getInt32PtrTy(C);
+
+  Module M("M", C);
+  FunctionType *FTy =
+  FunctionType::get(I64PtrTy, {I64PtrTy}, false);
+  auto *F = Function::Create(FTy, Function::ExternalLinkage, "", M);
+  auto *BB = BasicBlock::Create(C, "bb", F);
+  IRBuilder<> Builder(C);
+  Builder.SetInsertPoint(BB);
+
+  Value *A0 = F->getArg(0);
+  Function *SSACopy = Intrinsic::getDeclaration(&M, Intrinsic::ssa_copy, 
{A0->getType()});
+  CallInst *Call = Builder.CreateCall(SSACopy, {A0});
+  Value *Cast = Builder.CreateBitCast(Call, I32PtrTy);
+
+  // When stripping for alias analysis, it is okay to look through returned
+  // argument functions, since the pointer is unchanged.
+  EXPECT_EQ(Cast->stripPointerCastsForAliasAnalysis(), A0);
+
+  // Otherwise, this is not okay.
+  EXPECT_EQ(Cast->stripPointerCasts(), Call);
+  EXPECT_EQ(Cast->stripPointerCastsAndAliases(), Call);
+  EXPECT_EQ(Cast->stripPointerCastsSameRepresentation(), Call);
+  EXPECT_EQ(Cast->stripInBoundsConstantOffsets(), Call);
+}
+
 TEST(InstructionsTest, VectorGep) {
   LLVMContext C;
 
Index: llvm/lib/IR/Value.cpp
===
--- llvm/lib/IR/Value.cpp
+++ llvm/lib/IR/Value.cpp
@@ -662,7 +662,8 @@
   V = cast(V)->getIncomingValue(0);
 } else {
   if (const auto *Call = dyn_cast(V)) {
-if (const Value *RV = Call->getReturnedArgOperand()) {
+if (const Value *RV = Call->getReturnedArgOperand();
+RV && StripKind == PSK_ForAliasAnalysis) {
   V = RV;
   continue;
 }
Index: llvm/include/llvm/IR/Value.h
===
--- llvm/include/llvm/IR/Value.h
+++ llvm/include/llvm/IR/Value.h
@@ -656,7 +656,7 @@
   }
 
   /// Strip off pointer casts, all-zero GEPs, single-argument phi nodes and
-  /// invariant group info.
+  /// invariant group info.  Looks through returned arg functions.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'. This function should be used only in


Index: llvm/unittests/IR/InstructionsTest.cpp
===
--- llvm/unittests/IR/InstructionsTest.cpp
+++ llvm/unittests/IR/InstructionsTest.cpp
@@ -458,6 +458,35 @@
  wrap(V2Int32PtrAS1Ty), true));
 }
 
+TEST(InstructionsTest, StripPointerCasts) {
+  LLVMContext C;
+  Type *I64PtrTy = Type::getInt64PtrTy(C);
+  Type *I32PtrTy = Type::getInt32PtrTy(C);
+
+  Module M("M", C);
+  FunctionType *FTy =
+  FunctionType::get(I64PtrTy, {I64PtrTy}, false);
+  auto *F = Function::Create(FTy, Function::ExternalLinkage, "", M);
+  auto *BB = BasicBlock::Create(C, "bb", F);
+  IRBuilder<> Builder(C);
+  Builder.SetInsertPoint(BB);
+
+  Value *A0 = F->getArg(0);
+  Function *SSACopy = Intrinsic::getDeclaration(&M, Intrinsic::ssa_copy, {A0->getType()});
+  CallInst *Call = Builder.CreateCall(SSACopy, {A0});
+  Value *Cast = Builder.CreateBitCast(Call, I32PtrTy);
+
+  // When stripping for alias analysis, it is okay to look through returned
+  // argument functions, since the pointer is unchanged.
+  EXPECT_EQ(Cast->stripPointerCastsForAliasAnalysis(), A0);
+
+  // Otherwise, this is not okay.
+  EXPECT_EQ(Cast->stripPointerCasts(), Call);
+  EXPECT_EQ(Cast->stripPointerCastsAndAliases(), Call);
+  EXPECT_EQ(Cast->stripPointerCastsSameRepresentation(), Call);
+  EXPECT_EQ(Cast->stripInBoundsConstantOffsets(), Call);
+}
+
 TEST(InstructionsTest, VectorGep) {
   LLVMContext C;
 
Index: llvm/lib/IR/Value.cpp
===
--- llvm/lib/IR/Value.cpp
+++ llvm/lib/IR/Value.cpp
@@ -662,7 +662,8 @@
   V = cast(V)->getIncomingValue(0);
 } else {
   if (const auto *Call = dyn_cast(V)) {
-if (const Value *RV = Call->getReturnedArgOperand()) {
+if (const Value *RV = Call->getReturnedArgOperand();
+RV && StripKind == PSK_ForAliasAnalysis) {
   V = RV;
   continue;
 }
Index: llvm/include/llvm/IR/Value.h

[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-07-31 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D105671#4547848 , @nikic wrote:

> Please separate the change to stripPointerCasts() into a separate review.

https://reviews.llvm.org/D156735


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2023-07-31 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 545752.
Herald added a project: All.

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/include/llvm/IR/Value.h
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
  llvm/lib/IR/Value.cpp

Index: llvm/lib/IR/Value.cpp
===
--- llvm/lib/IR/Value.cpp
+++ llvm/lib/IR/Value.cpp
@@ -662,7 +662,8 @@
   V = cast(V)->getIncomingValue(0);
 } else {
   if (const auto *Call = dyn_cast(V)) {
-if (const Value *RV = Call->getReturnedArgOperand()) {
+if (const Value *RV = Call->getReturnedArgOperand();
+RV && StripKind == PSK_ForAliasAnalysis) {
   V = RV;
   continue;
 }
Index: llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
===
--- llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -162,6 +162,16 @@
 CallInst::TailCallKind TCK = CI->getTailCallKind();
 NewCI->setTailCallKind(std::max(TCK, OverridingTCK));
 
+// Transfer the 'returned' attribute from the intrinsic to the call site.
+// By applying this only to intrinsic call sites, we avoid applying it to
+// non-ARC explicit calls to things like objc_retain which have not been
+// auto-upgraded to use the intrinsics.
+unsigned Index;
+if (F.getAttributes().hasAttrSomewhere(Attribute::Returned, &Index) &&
+Index)
+  NewCI->addParamAttr(Index - AttributeList::FirstArgIndex,
+  Attribute::Returned);
+
 if (!CI->use_empty())
   CI->replaceAllUsesWith(NewCI);
 CI->eraseFromParent();
Index: llvm/include/llvm/IR/Value.h
===
--- llvm/include/llvm/IR/Value.h
+++ llvm/include/llvm/IR/Value.h
@@ -656,7 +656,7 @@
   }
 
   /// Strip off pointer casts, all-zero GEPs, single-argument phi nodes and
-  /// invariant group info.
+  /// invariant group info. Looks through returned arg functions.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'. This function should be used only in
Index: llvm/include/llvm/IR/Intrinsics.td
===
--- llvm/include/llvm/IR/Intrinsics.td
+++ llvm/include/llvm/IR/Intrinsics.td
@@ -720,11 +720,13 @@
 // eliminate retain and releases where possible.
 
 def int_objc_autorelease: Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_autoreleasePoolPop : Intrinsic<[], [llvm_ptr_ty]>;
 def int_objc_autoreleasePoolPush: Intrinsic<[llvm_ptr_ty], []>;
 def int_objc_autoreleaseReturnValue : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_copyWeak   : Intrinsic<[],
 [llvm_ptr_ty,
  llvm_ptr_ty]>;
@@ -741,13 +743,17 @@
  llvm_ptr_ty]>;
 def int_objc_release: Intrinsic<[], [llvm_ptr_ty]>;
 def int_objc_retain : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutorelease  : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutoreleaseReturnValue   : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainAutoreleasedReturnValue  : Intrinsic<[llvm_ptr_ty],
-[llvm_ptr_ty]>;
+[llvm_ptr_ty],
+[Returned>]>;
 def int_objc_retainBlock

[PATCH] D141918: WIP: [Clang] Emit 'unwindabort' when applicable.

2023-07-28 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/lib/CodeGen/CGCall.cpp:5391
   if (FPtr->hasFnAttribute(llvm::Attribute::NoUnwind))
 CannotThrow = true;
+

Is there coverage for a nounwind callee + an unwindabort call?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141918

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


[PATCH] D141918: WIP: [Clang] Emit 'unwindabort' when applicable.

2023-07-26 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.
Herald added a subscriber: jplehr.



Comment at: clang/lib/CodeGen/CodeGenFunction.h:2021
+  /* Indicates whether we should generate calls using unwindabort, instead of a
+   * terminate landingpad, for the current EH Scope. */
+  bool shouldUseUnwindAbort() const;

Other method docs in the file use `///`-style doxygen comments.



Comment at: clang/test/CodeGenCXX/exceptions.cpp:81
 
-  //   rdar://11904428
-  //   Terminate landing pads should call __cxa_begin_catch first.

FWI(was)W, this radar points at:  https://bugs.llvm.org/show_bug.cgi?id=11893


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141918

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


[PATCH] D155509: Revert "Remove rdar links; NFC"

2023-07-18 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

Do you think this and the other patch are good candidates for 
`.git-blame-ignore-revs` entries?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D155509

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


[PATCH] D154357: [Driver] Recognize powerpc-unknown-eabi as a bare-metal toolchain

2023-07-10 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

gcc docs seem to indicate that these are valid triples:

https://gcc.gnu.org/install/specific.html#powerpc-x-eabi


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154357

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


[PATCH] D154357: [Driver] Recognize powerpc-unknown-eabi as a bare-metal toolchain

2023-07-10 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

I don't think those failures look related.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154357

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


[PATCH] D154502: [AST] Fix bug in UnresolvedSet::erase of last element

2023-07-05 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/unittests/AST/UnresolvedSetTest.cpp:11
+};
+} // namespace clang
+

jroelofs wrote:
> This ODR violation broke the build for me because it's picking up the 
> definition from Decl.h instead of this one.
> 
> ```
> /Users/jonathan_roelofs/llvm-upstream/clang/unittests/AST/UnresolvedSetTest.cpp:30:1:
>  error: call to implicitly-deleted default constructor of 'UnresolvedSetTest'
> TEST_F(UnresolvedSetTest, Size) { EXPECT_EQ(set.size(), 4u); }
> ^
> /Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/gtest.h:2368:3:
>  note: expanded from macro 'TEST_F'
>   GTEST_TEST_(test_fixture, test_name, test_fixture, \
>   ^
> /Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/internal/gtest-internal.h:1362:5:
>  note: expanded from macro 'GTEST_TEST_'
> GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {}   
> \
> ^
> /Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/internal/gtest-internal.h:1351:3:
>  note: expanded from macro 'GTEST_TEST_CLASS_NAME_'
>   test_suite_name##_##test_name##_Test
>   ^
> :30:1: note: expanded from here
> UnresolvedSetTest_Size_Test
> ^
> /Users/jonathan_roelofs/llvm-upstream/clang/unittests/AST/UnresolvedSetTest.cpp:19:13:
>  note: default constructor of 'UnresolvedSetTest' is implicitly deleted 
> because field 'n0' has no default constructor
>   NamedDecl n0, n1, n2, n3;
> ^
> ```
> 
> Maybe it needs to be something like this instead?
> 
> ```
> diff --git a/clang/unittests/AST/UnresolvedSetTest.cpp 
> b/clang/unittests/AST/UnresolvedSetTest.cpp
> index ada857e0e382..3c9077ddc3ec 100644
> --- a/clang/unittests/AST/UnresolvedSetTest.cpp
> +++ b/clang/unittests/AST/UnresolvedSetTest.cpp
> @@ -1,22 +1,23 @@
>  #include "clang/AST/UnresolvedSet.h"
> +#include "clang/AST/Decl.h"
>  #include "gtest/gtest.h"
>  
> -namespace clang {
> -class NamedDecl {
> +namespace dummy {
> +class NamedDecl : public clang::NamedDecl {
>// DeclAccessPair assumes that NamedDecl is at least 4-byte aligned, so we
>// we need to have a dummy value to make this dummy NamedDecl also be 
> aligned.
>[[maybe_unused]] int dummy;
>  
>  public:
> -  NamedDecl() {}
> +  NamedDecl() : clang::NamedDecl(clang::NamedDecl::Kind(0), nullptr, 
> clang::SourceLocation::getFromRawEncoding(0), clang::DeclarationName()) {}
>  };
> -} // namespace clang
> +} // namespace dummy
>  
>  using namespace clang;
>  
>  class UnresolvedSetTest : public ::testing::Test {
>  protected:
> -  NamedDecl n0, n1, n2, n3;
> +  dummy::NamedDecl n0, n1, n2, n3;
>UnresolvedSet<2> set;
>  
>void SetUp() override {
> 
> ```
You might need to build with `-DLLVM_ENABLE_MODULES=On` to see this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154502

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


[PATCH] D154502: [AST] Fix bug in UnresolvedSet::erase of last element

2023-07-05 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/unittests/AST/UnresolvedSetTest.cpp:11
+};
+} // namespace clang
+

This ODR violation broke the build for me because it's picking up the 
definition from Decl.h instead of this one.

```
/Users/jonathan_roelofs/llvm-upstream/clang/unittests/AST/UnresolvedSetTest.cpp:30:1:
 error: call to implicitly-deleted default constructor of 'UnresolvedSetTest'
TEST_F(UnresolvedSetTest, Size) { EXPECT_EQ(set.size(), 4u); }
^
/Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/gtest.h:2368:3:
 note: expanded from macro 'TEST_F'
  GTEST_TEST_(test_fixture, test_name, test_fixture, \
  ^
/Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/internal/gtest-internal.h:1362:5:
 note: expanded from macro 'GTEST_TEST_'
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {}   \
^
/Users/jonathan_roelofs/llvm-upstream/third-party/unittest/googletest/include/gtest/internal/gtest-internal.h:1351:3:
 note: expanded from macro 'GTEST_TEST_CLASS_NAME_'
  test_suite_name##_##test_name##_Test
  ^
:30:1: note: expanded from here
UnresolvedSetTest_Size_Test
^
/Users/jonathan_roelofs/llvm-upstream/clang/unittests/AST/UnresolvedSetTest.cpp:19:13:
 note: default constructor of 'UnresolvedSetTest' is implicitly deleted because 
field 'n0' has no default constructor
  NamedDecl n0, n1, n2, n3;
^
```

Maybe it needs to be something like this instead?

```
diff --git a/clang/unittests/AST/UnresolvedSetTest.cpp 
b/clang/unittests/AST/UnresolvedSetTest.cpp
index ada857e0e382..3c9077ddc3ec 100644
--- a/clang/unittests/AST/UnresolvedSetTest.cpp
+++ b/clang/unittests/AST/UnresolvedSetTest.cpp
@@ -1,22 +1,23 @@
 #include "clang/AST/UnresolvedSet.h"
+#include "clang/AST/Decl.h"
 #include "gtest/gtest.h"
 
-namespace clang {
-class NamedDecl {
+namespace dummy {
+class NamedDecl : public clang::NamedDecl {
   // DeclAccessPair assumes that NamedDecl is at least 4-byte aligned, so we
   // we need to have a dummy value to make this dummy NamedDecl also be 
aligned.
   [[maybe_unused]] int dummy;
 
 public:
-  NamedDecl() {}
+  NamedDecl() : clang::NamedDecl(clang::NamedDecl::Kind(0), nullptr, 
clang::SourceLocation::getFromRawEncoding(0), clang::DeclarationName()) {}
 };
-} // namespace clang
+} // namespace dummy
 
 using namespace clang;
 
 class UnresolvedSetTest : public ::testing::Test {
 protected:
-  NamedDecl n0, n1, n2, n3;
+  dummy::NamedDecl n0, n1, n2, n3;
   UnresolvedSet<2> set;
 
   void SetUp() override {

```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154502

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


[PATCH] D154357: [Driver] Recognize powerpc-unknown-eabi as a bare-metal toolchain

2023-07-03 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

> It seems to me that maybe anything with OS none (although that doesn’t seem 
> to be distinguished from unknown)

I considered splitting `none` from `unknown` in Triple, but never had the time 
to do it. I think this would be good for baremetal toolchains in light of the 
gcc installation detection machinery taking over whenever there isn't otherwise 
a match.

> or with environment eabi should be treated as bare-metal, but I don’t have a 
> lot of experience in this regard.

IIRC there are `arm-linux-eabi` toolchains in the wild, which are not baremetal.




Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:168
+
+  if (Triple.getVendor() != llvm::Triple::UnknownVendor)
+return false;

does this break your use cases re: having `indel` as the vendor? or will you 
have a downstream patch to exempt `indel` from this check?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154357

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


[PATCH] D150740: [clang] Add `__attribute__((nooutline))`

2023-05-16 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM




Comment at: clang/include/clang/Basic/Attr.td:1474
+  let Spellings = [Clang<"nooutline">];
+  let Subjects = SubjectList<[Function, ObjCMethod]>;
+  let Documentation = [NoOutlineDocs];

does it make sense on `Block` too?


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

https://reviews.llvm.org/D150740

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


[PATCH] D150325: WIP: Prototype #ifdef-enforced DEPENDS on tablegen output

2023-05-10 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

link back to the discourse thread: 
https://discourse.llvm.org/t/rfc-permanently-fixing-the-missing-tablegen-dependency-issue/70442/14?u=jroelofs


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D150325

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


[PATCH] D150325: WIP: Prototype #ifdef-enforced DEPENDS on tablegen output

2023-05-10 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
Herald added subscribers: steakhal, wenlei, martong, arphaman, hiraditya.
Herald added a reviewer: NoQ.
Herald added a reviewer: ributzka.
Herald added a project: All.
jroelofs requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits, MaskRay.
Herald added a reviewer: dang.
Herald added projects: clang, LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D150325

Files:
  clang/include/clang/Driver/CMakeLists.txt
  clang/lib/ARCMigrate/CMakeLists.txt
  clang/lib/Analysis/plugins/CheckerDependencyHandling/CMakeLists.txt
  clang/lib/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt
  clang/lib/Analysis/plugins/SampleAnalyzer/CMakeLists.txt
  clang/lib/CodeGen/CMakeLists.txt
  clang/lib/CrossTU/CMakeLists.txt
  clang/lib/Driver/CMakeLists.txt
  clang/lib/ExtractAPI/CMakeLists.txt
  clang/lib/Frontend/Rewrite/CMakeLists.txt
  clang/lib/Index/CMakeLists.txt
  clang/lib/StaticAnalyzer/Core/CMakeLists.txt
  clang/lib/StaticAnalyzer/Frontend/CMakeLists.txt
  clang/lib/Tooling/ASTDiff/CMakeLists.txt
  clang/lib/Tooling/DumpTool/CMakeLists.txt
  clang/lib/Tooling/Refactoring/CMakeLists.txt
  clang/lib/Tooling/Syntax/CMakeLists.txt
  clang/lib/Tooling/Transformer/CMakeLists.txt
  clang/tools/arcmt-test/CMakeLists.txt
  clang/tools/c-index-test/CMakeLists.txt
  clang/tools/clang-check/CMakeLists.txt
  clang/tools/clang-diff/CMakeLists.txt
  clang/tools/clang-extdef-mapping/CMakeLists.txt
  clang/tools/clang-fuzzer/handle-cxx/CMakeLists.txt
  clang/tools/clang-import-test/CMakeLists.txt
  clang/tools/clang-offload-bundler/CMakeLists.txt
  clang/tools/clang-refactor/CMakeLists.txt
  clang/tools/clang-rename/CMakeLists.txt
  clang/tools/clang-repl/CMakeLists.txt
  clang/tools/clang-scan-deps/CMakeLists.txt
  clang/tools/diagtool/CMakeLists.txt
  clang/tools/driver/CMakeLists.txt
  llvm/cmake/modules/AddLLVM.cmake
  llvm/lib/TableGen/Main.cpp

Index: llvm/lib/TableGen/Main.cpp
===
--- llvm/lib/TableGen/Main.cpp
+++ llvm/lib/TableGen/Main.cpp
@@ -96,6 +96,16 @@
   return 0;
 }
 
+static cl::opt
+DependencyGuardName("dependency-guard=", cl::Prefix, cl::Hidden, cl::init(""));
+
+static void EmitDependencyGuard(StringRef Name, raw_ostream &OS) {
+  OS << "#ifndef LLVM_DEPENDS_ON_" << Name << "\n"
+ << "#  error If you're seeing this message, there is a missing DEPENDS "
+ << Name << " in the CMake target that includes this file.\n"
+ << "#endif\n";
+}
+
 int llvm::TableGenMain(const char *argv0,
std::function MainFn) {
   RecordKeeper Records;
@@ -139,6 +149,9 @@
 status = MainFn(Out, Records);
   else
 return 1;
+  if (!DependencyGuardName.empty()) {
+EmitDependencyGuard(DependencyGuardName, Out);
+  }
   Records.stopBackendTimer();
   if (status)
 return 1;
Index: llvm/cmake/modules/AddLLVM.cmake
===
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -535,6 +535,10 @@
 
 set_target_properties(${obj_name} PROPERTIES FOLDER "Object Libraries")
 if(ARG_DEPENDS)
+  foreach(dependency ${ARG_DEPENDS})
+string(REPLACE "-" "_" dependency ${dependency})
+target_compile_definitions(${obj_name} PUBLIC -DLLVM_DEPENDS_ON_${dependency}=1)
+  endforeach()
   add_dependencies(${obj_name} ${ARG_DEPENDS})
 endif()
 # Treat link libraries like PUBLIC dependencies.  LINK_LIBS might
@@ -565,6 +569,12 @@
 if(ARG_OUTPUT_NAME)
   set(output_name OUTPUT_NAME "${ARG_OUTPUT_NAME}")
 endif()
+if(ARG_DEPENDS)
+  foreach(dependency ${ARG_DEPENDS})
+string(REPLACE "-" "_" dependency ${dependency})
+target_compile_definitions(${name_static} PRIVATE -DLLVM_DEPENDS_ON_${dependency}=1)
+  endforeach()
+endif()
 # DEPENDS has been appended to LLVM_COMMON_LIBS.
 llvm_add_library(${name_static} STATIC
   ${output_name}
@@ -590,6 +600,13 @@
 add_library(${name} STATIC ${ALL_FILES})
   endif()
 
+  if(ARG_DEPENDS)
+foreach(dependency ${ARG_DEPENDS})
+  string(REPLACE "-" "_" dependency ${dependency})
+  target_compile_definitions(${name} PRIVATE -DLLVM_DEPENDS_ON_${dependency}=1)
+endforeach()
+  endif()
+
   if(ARG_COMPONENT_LIB)
 set_target_properties(${name} PROPERTIES LLVM_COMPONENT TRUE)
 set_property(GLOBAL APPEND PROPERTY LLVM_COMPONENT_LIBS ${name})
@@ -950,9 +967,9 @@
   cmake_parse_arguments(ARG
 "DISABLE_LLVM_LINK_LLVM_DYLIB;IGNORE_EXTERNALIZE_DEBUGINFO;NO_INSTALL_RPATH;SUPPORT_PLUGINS"
 "ENTITLEMENTS;BUNDLE_PATH"
-""
+"DEPENDS"
 ${ARGN})
-  generate_llvm_objects(${name} ${ARG_UNPARSED_ARGUMENTS})
+  generate_llvm_objects(${name} ${ARG_UNPARSED_ARGUMENTS} DEPENDS ${ARG_DEPENDS})
   add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
 
   if(XCODE)
@@ -967,6 +984,11 @@
 add_executable(${name} ${ALL_FILES})
   end

[PATCH] D139822: Allow using BareMetal toolchain with LLVM_ENABLE_PER_TARGET_RUNTIME_DIR compiler-rt

2022-12-12 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139822

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2021-09-01 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D105671#2978248 , @rjmccall wrote:

> How does `stripPointerCasts` "see through" an attribute on the underlying 
> call instruction?

https://github.com/llvm/llvm-project/blob/bf77b11277411f6725cf09a66feb36d2c14bc8a7/llvm/lib/IR/Value.cpp#L652


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2021-08-30 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 369584.
jroelofs added a comment.
Herald added a subscriber: dexonsmith.

Rebased.

Also, turns out that `stripPointerCasts()` can see through the `thisreturn` 
attribute, which defeats a self retain optimization, breaking one of the clang 
tests. I tweaked a callback to make it configurable. Let me know if you see a 
better way of dealing with that.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/include/llvm/IR/Value.h
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
  llvm/lib/IR/Value.cpp
  llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll

Index: llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
===
--- llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
+++ llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
@@ -6,7 +6,7 @@
 define i8* @test_objc_autorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = notail call i8* @objc_autorelease(i8* %arg0)
+; CHECK-NEXT: %0 = notail call i8* @objc_autorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.autorelease(i8* %arg0)
@@ -113,20 +113,31 @@
   ret void
 }
 
+define i8* @test_objc_retain_intrinsic(i8* %arg0) {
+; CHECK-LABEL: test_objc_retain_intrinsic
+; CHECK-NEXT: entry
+; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* returned %arg0)
+; CHECK-NEXT: ret i8* %0
+entry:
+  %0 = call i8* @llvm.objc.retain(i8* %arg0)
+	ret i8* %0
+}
+
+; Explicit objc_retain calls should not be upgraded to be "thisreturn".
 define i8* @test_objc_retain(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retain
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retain(i8* %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
-  %0 = call i8* @llvm.objc.retain(i8* %arg0)
+  %0 = call i8* @objc_retain(i8* %arg0)
 	ret i8* %0
 }
 
 define i8* @test_objc_retainAutorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call i8* @objc_retainAutorelease(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retainAutorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retainAutorelease(i8* %arg0)
@@ -136,7 +147,7 @@
 define i8* @test_objc_retainAutoreleaseReturnValue(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %arg0)
+; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = tail call i8* @llvm.objc.retainAutoreleaseReturnValue(i8* %arg0)
@@ -146,7 +157,7 @@
 define i8* @test_objc_retainAutoreleasedReturnValue(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* %arg0)
+; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %arg0)
@@ -226,7 +237,7 @@
 define i8* @test_objc_retain_autorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retain_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call i8* @objc_retain_autorelease(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retain_autorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retain.autorelease(i8* %arg0)
@@ -265,6 +276,7 @@
 declare void @llvm.objc.moveWeak(i8**, i8**)
 declare void @llvm.objc.release(i8*)
 declare i8* @llvm.objc.retain(i8*)
+declare i8* @objc_retain(i8*)
 declare i8* @llvm.objc.retainAutorelease(i8*)
 declare i8* @llvm.objc.retainAutoreleaseReturnValue(i8*)
 declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*)
@@ -281,6 +293,7 @@
 
 attributes #0 = { nounwind }
 
+; CHECK: declare i8* @objc_retain(i8*) [[NLB:#[0-9]+]]
 ; CHECK: declare i8* @objc_autorelease(i8*)
 ; CHECK: declare void @objc_autoreleasePoolPop(i8*)
 ; CHECK: declare i8* @objc_autoreleasePoolPush()
@@ -291,8 +304,7 @@
 ; CHECK: declare i8* @objc_loadWeak(i8**)
 ; CHECK: declare i8* @objc_loadWeakRetained(i8**)
 ; CHECK: declare void @objc_moveWeak(i8**, i8**)
-; CHECK: declare void @objc_release(i8*) [[NLB:#[0-9]+]]
-; CHECK: declare i8* @objc_retain(i8*) [[NLB]]
+; CHECK: declare void @objc_release(i8*) [[NLB]]
 ; CHECK: declare i8* @objc_retainAutorelease(i8*)
 ; CHECK: declare i8* @objc_retainAutoreleaseReturnValue(i8*)
 ; CHECK: declare i8* @objc_retainAutoreleasedReturnValue(i8*)
Index: llvm/lib/IR/Value.cpp
===
--- llvm/l

[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2021-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D105671#2884483 , @rjmccall wrote:

> IIUC, we sometimes turn `-retain` message sends into calls to `objc_retain` 
> and so on.  Outside of ARC (the only time they're valid), these calls don't 
> have the semantics of guaranteeing to return their self argument.  So I think 
> this change is only fine if we're not applying it when doing that non-ARC 
> transformation.

I believe this is covered now. The `-retain => objc_retain` transformation 
emits normal function calls, and `objc_retain` calls are only transformed into 
intrinsic calls when ARC is enabled.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

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


[PATCH] D105671: [Intrinsics][ObjC] Mark objc_retain and friends as thisreturn.

2021-08-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 364215.
jroelofs added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Add a note/check to the `[x retain] => objc_retain(x)` test explaining why it 
shouldn't be lowered as an intrinsic call in the future.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105671

Files:
  clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m
  llvm/include/llvm/IR/Intrinsics.td
  llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
  llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll

Index: llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
===
--- llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
+++ llvm/test/Transforms/PreISelIntrinsicLowering/objc-arc.ll
@@ -6,7 +6,7 @@
 define i8* @test_objc_autorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = notail call i8* @objc_autorelease(i8* %arg0)
+; CHECK-NEXT: %0 = notail call i8* @objc_autorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.autorelease(i8* %arg0)
@@ -113,20 +113,31 @@
   ret void
 }
 
+define i8* @test_objc_retain_intrinsic(i8* %arg0) {
+; CHECK-LABEL: test_objc_retain_intrinsic
+; CHECK-NEXT: entry
+; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* returned %arg0)
+; CHECK-NEXT: ret i8* %0
+entry:
+  %0 = call i8* @llvm.objc.retain(i8* %arg0)
+	ret i8* %0
+}
+
+; Explicit objc_retain calls should not be upgraded to be "thisreturn".
 define i8* @test_objc_retain(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retain
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retain(i8* %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
-  %0 = call i8* @llvm.objc.retain(i8* %arg0)
+  %0 = call i8* @objc_retain(i8* %arg0)
 	ret i8* %0
 }
 
 define i8* @test_objc_retainAutorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call i8* @objc_retainAutorelease(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retainAutorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retainAutorelease(i8* %arg0)
@@ -136,7 +147,7 @@
 define i8* @test_objc_retainAutoreleaseReturnValue(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleaseReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %arg0)
+; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = tail call i8* @llvm.objc.retainAutoreleaseReturnValue(i8* %arg0)
@@ -146,7 +157,7 @@
 define i8* @test_objc_retainAutoreleasedReturnValue(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retainAutoreleasedReturnValue
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* %arg0)
+; CHECK-NEXT: %0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %arg0)
@@ -226,7 +237,7 @@
 define i8* @test_objc_retain_autorelease(i8* %arg0) {
 ; CHECK-LABEL: test_objc_retain_autorelease
 ; CHECK-NEXT: entry
-; CHECK-NEXT: %0 = call i8* @objc_retain_autorelease(i8* %arg0)
+; CHECK-NEXT: %0 = call i8* @objc_retain_autorelease(i8* returned %arg0)
 ; CHECK-NEXT: ret i8* %0
 entry:
   %0 = call i8* @llvm.objc.retain.autorelease(i8* %arg0)
@@ -265,6 +276,7 @@
 declare void @llvm.objc.moveWeak(i8**, i8**)
 declare void @llvm.objc.release(i8*)
 declare i8* @llvm.objc.retain(i8*)
+declare i8* @objc_retain(i8*)
 declare i8* @llvm.objc.retainAutorelease(i8*)
 declare i8* @llvm.objc.retainAutoreleaseReturnValue(i8*)
 declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*)
@@ -281,6 +293,7 @@
 
 attributes #0 = { nounwind }
 
+; CHECK: declare i8* @objc_retain(i8*) [[NLB:#[0-9]+]]
 ; CHECK: declare i8* @objc_autorelease(i8*)
 ; CHECK: declare void @objc_autoreleasePoolPop(i8*)
 ; CHECK: declare i8* @objc_autoreleasePoolPush()
@@ -291,8 +304,7 @@
 ; CHECK: declare i8* @objc_loadWeak(i8**)
 ; CHECK: declare i8* @objc_loadWeakRetained(i8**)
 ; CHECK: declare void @objc_moveWeak(i8**, i8**)
-; CHECK: declare void @objc_release(i8*) [[NLB:#[0-9]+]]
-; CHECK: declare i8* @objc_retain(i8*) [[NLB]]
+; CHECK: declare void @objc_release(i8*) [[NLB]]
 ; CHECK: declare i8* @objc_retainAutorelease(i8*)
 ; CHECK: declare i8* @objc_retainAutoreleaseReturnValue(i8*)
 ; CHECK: declare i8* @objc_retainAutoreleasedReturnValue(i8*)
Index: llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
===
--- llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -110,6 +110,16 @@
 CallInst::TailCallKind TCK = CI->getTailCallKind();
 NewCI->setTailCallKind(std::max

[PATCH] D105194: [PowerPC] Add PowerPC cmpb builtin and emit target indepedent code for XL compatibility

2021-07-20 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

I moved a couple of new tests from this patch from CodeGen -> CodeGen/PowerPC 
so they don't fail when the PPC backend isn't built: 
f6769b663a0d4432b5e00e0c03904a5dfba7b077 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105194

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


[PATCH] D98113: [Driver] Also search FilePaths for compiler-rt before falling back

2021-07-12 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

> compiler-rt depends on a libc, typically newlib, which then depends on your 
> compiler

The builtins should only depend on compiler-provided headers, and not on the 
rest of libc. Agreed re: the rest of compiler-rt.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D98113

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


[PATCH] D98113: [Driver] Also search FilePaths for compiler-rt before falling back

2021-07-12 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

Why do you want to ship the builtins as part of your sysroot?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D98113

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


[PATCH] D95070: Fix crash when emitting NullReturn guards for functions returning BOOL

2021-05-24 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs closed this revision.
jroelofs added a comment.

This landed in 1deee5cacbb76578367186d7ff2937b6fa79b827 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D95070

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


[PATCH] D102943: Hashing: use a 64-bit storage type on all platforms.

2021-05-21 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

why do module hashes need to be stable when cross-compiling?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D102943

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


[PATCH] D97068: Run non-filechecked commands in update_cc_test_checks.py

2021-03-10 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D97068#2617642 , @ggeorgakoudis 
wrote:

> Add triple to avoid spurious failures in tests

They're not really spurious, right... Doesn't this mean that 
`utils/update_cc_test_checks.py` is now broken for people who develop on a mac?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97068

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


[PATCH] D97068: Run non-filechecked commands in update_cc_test_checks.py

2021-03-08 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs reopened this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

Reverted in a24644bb1ce09b40c2d751569dd5bb37ea9c995d 
 to get 
the bots green again. Feel free to re-land with a fix.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97068

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


[PATCH] D97068: Run non-filechecked commands in update_cc_test_checks.py

2021-03-08 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D97068#2611696 , @ggeorgakoudis 
wrote:

> In D97068#2611269 , @thakis wrote:
>
>> Looks like this breaks tests on mac: http://45.33.8.238/macm1/5075/step_6.txt
>>
>> Please take a look, and revert for now if it takes a while to fix.
>
> Hey @thakis, it should be an easy fix. I see no check lines are generated and 
> I suspect something may be going wrong with the `cp` runline, but it's hard 
> to know without replicating it. Is there any way you can give me temporary 
> access to the mac machine to test things out?
>
> Otherwise, I will simplify the test to exclude the `cp` runline.

The issue has something to do with Darwin's USER_LABEL_PREFIX mangling 
inserting an `_` prefix. This "fixes" the test, but doesn't solve whatever 
underlying problem is there:

  diff --git 
a/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c 
b/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c
  index bf18179392dc..a0a826c3d0b4 100644
  --- a/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c
  +++ b/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c
  @@ -1,7 +1,7 @@
   // Check that the non-clang/non-filechecked runlines execute
   // RUN: cp %s %s.copy.c
  -// RUN: %clang_cc1 -fopenmp %s.copy.c -emit-llvm-bc -o %t-host.bc
  -// RUN: %clang_cc1 -fopenmp -fopenmp-host-ir-file-path %t-host.bc %s.copy.c 
-emit-llvm -o - | FileCheck %s
  +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp %s.copy.c 
-emit-llvm-bc -o %t-host.bc
  +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp 
-fopenmp-host-ir-file-path %t-host.bc %s.copy.c -emit-llvm -o - | FileCheck %s
   
   void use(int);
   
  diff --git 
a/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c.expected 
b/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c.expected
  index ffc8caac0f23..3ad33fc683bd 100644
  --- 
a/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c.expected
  +++ 
b/clang/test/utils/update_cc_test_checks/Inputs/exec-all-runlines.c.expected
  @@ -1,8 +1,8 @@
   // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
   // Check that the non-clang/non-filechecked runlines execute
   // RUN: cp %s %s.copy.c
  -// RUN: %clang_cc1 -fopenmp %s.copy.c -emit-llvm-bc -o %t-host.bc
  -// RUN: %clang_cc1 -fopenmp -fopenmp-host-ir-file-path %t-host.bc %s.copy.c 
-emit-llvm -o - | FileCheck %s
  +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp %s.copy.c 
-emit-llvm-bc -o %t-host.bc
  +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp 
-fopenmp-host-ir-file-path %t-host.bc %s.copy.c -emit-llvm -o - | FileCheck %s
   
   void use(int);
   

You should be able to replicate the failure locally by setting an apple triple 
instead, i.e. `-triple x86_64-apple-macosx`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97068

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


[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-25 Thread Jon Roelofs via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7f6e3316456f: Support `#pragma clang section` directives on 
MachO targets (authored by jroelofs).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Sema/SemaAttr.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenCXX/clang-sections.cpp
  clang/test/Sema/pragma-clang-section-macho.c
  llvm/include/llvm/MC/MCSectionMachO.h
  llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  llvm/lib/MC/MCParser/DarwinAsmParser.cpp
  llvm/lib/MC/MCSectionMachO.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/AArch64/clang-section-macho.ll

Index: llvm/test/CodeGen/AArch64/clang-section-macho.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/clang-section-macho.ll
@@ -0,0 +1,11 @@
+;RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
+
+define dso_local void @foo() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { "implicit-section-name"="__TEXT,__mytext" }
+
+; CHECK:  .section	__TEXT,__mytext
+; CHECK-NEXT: .globl	_foo
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1919,9 +1919,8 @@
   StringRef ParsedSegment, ParsedSection;
   unsigned TAA = 0, StubSize = 0;
   bool TAAParsed;
-  std::string ErrorCode = MCSectionMachO::ParseSectionSpecifier(
-  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize);
-  assert(ErrorCode.empty() && "Invalid section specifier.");
+  cantFail(MCSectionMachO::ParseSectionSpecifier(
+  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize));
 
   // Ignore the globals from the __OBJC section. The ObjC runtime assumes
   // those conform to /usr/lib/objc/runtime.h, so we can't add redzones to
Index: llvm/lib/MC/MCSectionMachO.cpp
===
--- llvm/lib/MC/MCSectionMachO.cpp
+++ llvm/lib/MC/MCSectionMachO.cpp
@@ -174,12 +174,12 @@
 /// flavored .s file.  If successful, this fills in the specified Out
 /// parameters and returns an empty string.  When an invalid section
 /// specifier is present, this returns a string indicating the problem.
-std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
-  StringRef &Segment,// Out.
-  StringRef &Section,// Out.
-  unsigned  &TAA,// Out.
-  bool  &TAAParsed,  // Out.
-  unsigned  &StubSize) { // Out.
+Error MCSectionMachO::ParseSectionSpecifier(StringRef Spec,   // In.
+StringRef &Segment,   // Out.
+StringRef &Section,   // Out.
+unsigned &TAA,// Out.
+bool &TAAParsed,  // Out.
+unsigned &StubSize) { // Out.
   TAAParsed = false;
 
   SmallVector SplitSpec;
@@ -194,25 +194,23 @@
   StringRef Attrs = GetEmptyOrTrim(3);
   StringRef StubSizeStr = GetEmptyOrTrim(4);
 
-  // Verify that the segment is present and not too long.
-  if (Segment.empty() || Segment.size() > 16)
-return "mach-o section specifier requires a segment whose length is "
-   "between 1 and 16 characters";
-
-  // Verify that the section is present and not too long.
+  // Verify that the section is present.
   if (Section.empty())
-return "mach-o section specifier requires a segment and section "
-   "separated by a comma";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a segment "
+ "and section separated by a comma");
 
+  // Verify that the section is not too long.
   if (Section.size() > 16)
-return "mach-o section specifier requires a section whose length is "
-   "between 1 and 16 characters";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a section "
+ "whose length is between 1 and 16 characters");
 
   // If there is no comma after the section, we're done.
   TAA = 0;
   StubSize = 0;
   if (SectionType.empty

[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-24 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 326126.
jroelofs added a comment.

Mark section invalid if the target doesn't like how it's spelled.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Sema/SemaAttr.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenCXX/clang-sections.cpp
  clang/test/Sema/pragma-clang-section-macho.c
  llvm/include/llvm/MC/MCSectionMachO.h
  llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  llvm/lib/MC/MCParser/DarwinAsmParser.cpp
  llvm/lib/MC/MCSectionMachO.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/AArch64/clang-section-macho.ll

Index: llvm/test/CodeGen/AArch64/clang-section-macho.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/clang-section-macho.ll
@@ -0,0 +1,11 @@
+;RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
+
+define dso_local void @foo() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { "implicit-section-name"="__TEXT,__mytext" }
+
+; CHECK:  .section	__TEXT,__mytext
+; CHECK-NEXT: .globl	_foo
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1899,9 +1899,8 @@
   StringRef ParsedSegment, ParsedSection;
   unsigned TAA = 0, StubSize = 0;
   bool TAAParsed;
-  std::string ErrorCode = MCSectionMachO::ParseSectionSpecifier(
-  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize);
-  assert(ErrorCode.empty() && "Invalid section specifier.");
+  cantFail(MCSectionMachO::ParseSectionSpecifier(
+  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize));
 
   // Ignore the globals from the __OBJC section. The ObjC runtime assumes
   // those conform to /usr/lib/objc/runtime.h, so we can't add redzones to
Index: llvm/lib/MC/MCSectionMachO.cpp
===
--- llvm/lib/MC/MCSectionMachO.cpp
+++ llvm/lib/MC/MCSectionMachO.cpp
@@ -174,12 +174,12 @@
 /// flavored .s file.  If successful, this fills in the specified Out
 /// parameters and returns an empty string.  When an invalid section
 /// specifier is present, this returns a string indicating the problem.
-std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
-  StringRef &Segment,// Out.
-  StringRef &Section,// Out.
-  unsigned  &TAA,// Out.
-  bool  &TAAParsed,  // Out.
-  unsigned  &StubSize) { // Out.
+Error MCSectionMachO::ParseSectionSpecifier(StringRef Spec,   // In.
+StringRef &Segment,   // Out.
+StringRef &Section,   // Out.
+unsigned &TAA,// Out.
+bool &TAAParsed,  // Out.
+unsigned &StubSize) { // Out.
   TAAParsed = false;
 
   SmallVector SplitSpec;
@@ -194,25 +194,23 @@
   StringRef Attrs = GetEmptyOrTrim(3);
   StringRef StubSizeStr = GetEmptyOrTrim(4);
 
-  // Verify that the segment is present and not too long.
-  if (Segment.empty() || Segment.size() > 16)
-return "mach-o section specifier requires a segment whose length is "
-   "between 1 and 16 characters";
-
-  // Verify that the section is present and not too long.
+  // Verify that the section is present.
   if (Section.empty())
-return "mach-o section specifier requires a segment and section "
-   "separated by a comma";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a segment "
+ "and section separated by a comma");
 
+  // Verify that the section is not too long.
   if (Section.size() > 16)
-return "mach-o section specifier requires a section whose length is "
-   "between 1 and 16 characters";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a section "
+ "whose length is between 1 and 16 characters");
 
   // If there is no comma after the section, we're done.
   TAA = 0;
   StubSize = 0;
   if (SectionType.empty())
-return "";
+return Error::success();
 
   // Figure out which section type it is.
   auto Type

[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-24 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/lib/Sema/SemaAttr.cpp:304
 
+  if (llvm::Error E = Context.getTargetInfo().isValidSectionSpecifier(SecName))
+Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target)

t.p.northover wrote:
> Shouldn't this block return so the section doesn't get marked as valid later?
yes!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

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


[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-23 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 325798.
jroelofs added a comment.

`git clang-format`


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Sema/SemaAttr.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenCXX/clang-sections.cpp
  clang/test/Sema/pragma-clang-section-macho.c
  llvm/include/llvm/MC/MCSectionMachO.h
  llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  llvm/lib/MC/MCParser/DarwinAsmParser.cpp
  llvm/lib/MC/MCSectionMachO.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/AArch64/clang-section-macho.ll

Index: llvm/test/CodeGen/AArch64/clang-section-macho.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/clang-section-macho.ll
@@ -0,0 +1,11 @@
+;RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
+
+define dso_local void @foo() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { "implicit-section-name"="__TEXT,__mytext" }
+
+; CHECK:  .section	__TEXT,__mytext
+; CHECK-NEXT: .globl	_foo
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1899,9 +1899,8 @@
   StringRef ParsedSegment, ParsedSection;
   unsigned TAA = 0, StubSize = 0;
   bool TAAParsed;
-  std::string ErrorCode = MCSectionMachO::ParseSectionSpecifier(
-  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize);
-  assert(ErrorCode.empty() && "Invalid section specifier.");
+  cantFail(MCSectionMachO::ParseSectionSpecifier(
+  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize));
 
   // Ignore the globals from the __OBJC section. The ObjC runtime assumes
   // those conform to /usr/lib/objc/runtime.h, so we can't add redzones to
Index: llvm/lib/MC/MCSectionMachO.cpp
===
--- llvm/lib/MC/MCSectionMachO.cpp
+++ llvm/lib/MC/MCSectionMachO.cpp
@@ -174,12 +174,12 @@
 /// flavored .s file.  If successful, this fills in the specified Out
 /// parameters and returns an empty string.  When an invalid section
 /// specifier is present, this returns a string indicating the problem.
-std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
-  StringRef &Segment,// Out.
-  StringRef &Section,// Out.
-  unsigned  &TAA,// Out.
-  bool  &TAAParsed,  // Out.
-  unsigned  &StubSize) { // Out.
+Error MCSectionMachO::ParseSectionSpecifier(StringRef Spec,   // In.
+StringRef &Segment,   // Out.
+StringRef &Section,   // Out.
+unsigned &TAA,// Out.
+bool &TAAParsed,  // Out.
+unsigned &StubSize) { // Out.
   TAAParsed = false;
 
   SmallVector SplitSpec;
@@ -194,25 +194,23 @@
   StringRef Attrs = GetEmptyOrTrim(3);
   StringRef StubSizeStr = GetEmptyOrTrim(4);
 
-  // Verify that the segment is present and not too long.
-  if (Segment.empty() || Segment.size() > 16)
-return "mach-o section specifier requires a segment whose length is "
-   "between 1 and 16 characters";
-
-  // Verify that the section is present and not too long.
+  // Verify that the section is present.
   if (Section.empty())
-return "mach-o section specifier requires a segment and section "
-   "separated by a comma";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a segment "
+ "and section separated by a comma");
 
+  // Verify that the section is not too long.
   if (Section.size() > 16)
-return "mach-o section specifier requires a section whose length is "
-   "between 1 and 16 characters";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a section "
+ "whose length is between 1 and 16 characters");
 
   // If there is no comma after the section, we're done.
   TAA = 0;
   StubSize = 0;
   if (SectionType.empty())
-return "";
+return Error::success();
 
   // Figure out which section type it is.
   auto TypeDescriptor =
@@ -223,7 +221,9 @@
 
   // If we 

[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-22 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 325599.

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Sema/SemaAttr.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenCXX/clang-sections.cpp
  clang/test/Sema/pragma-clang-section-macho.c
  llvm/include/llvm/MC/MCSectionMachO.h
  llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  llvm/lib/MC/MCParser/DarwinAsmParser.cpp
  llvm/lib/MC/MCSectionMachO.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/AArch64/clang-section-macho.ll

Index: llvm/test/CodeGen/AArch64/clang-section-macho.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/clang-section-macho.ll
@@ -0,0 +1,11 @@
+;RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
+
+define dso_local void @foo() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { "implicit-section-name"="__TEXT,__mytext" }
+
+; CHECK:  .section	__TEXT,__mytext
+; CHECK-NEXT: .globl	_foo
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1899,9 +1899,11 @@
   StringRef ParsedSegment, ParsedSection;
   unsigned TAA = 0, StubSize = 0;
   bool TAAParsed;
-  std::string ErrorCode = MCSectionMachO::ParseSectionSpecifier(
-  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize);
-  assert(ErrorCode.empty() && "Invalid section specifier.");
+  cantFail(MCSectionMachO::ParseSectionSpecifier(Section,
+ ParsedSegment,
+ ParsedSection,
+ TAA, TAAParsed,
+ StubSize));
 
   // Ignore the globals from the __OBJC section. The ObjC runtime assumes
   // those conform to /usr/lib/objc/runtime.h, so we can't add redzones to
Index: llvm/lib/MC/MCSectionMachO.cpp
===
--- llvm/lib/MC/MCSectionMachO.cpp
+++ llvm/lib/MC/MCSectionMachO.cpp
@@ -174,12 +174,12 @@
 /// flavored .s file.  If successful, this fills in the specified Out
 /// parameters and returns an empty string.  When an invalid section
 /// specifier is present, this returns a string indicating the problem.
-std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
-  StringRef &Segment,// Out.
-  StringRef &Section,// Out.
-  unsigned  &TAA,// Out.
-  bool  &TAAParsed,  // Out.
-  unsigned  &StubSize) { // Out.
+Error MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
+StringRef &Segment,// Out.
+StringRef &Section,// Out.
+unsigned  &TAA,// Out.
+bool  &TAAParsed,  // Out.
+unsigned  &StubSize) { // Out.
   TAAParsed = false;
 
   SmallVector SplitSpec;
@@ -194,25 +194,23 @@
   StringRef Attrs = GetEmptyOrTrim(3);
   StringRef StubSizeStr = GetEmptyOrTrim(4);
 
-  // Verify that the segment is present and not too long.
-  if (Segment.empty() || Segment.size() > 16)
-return "mach-o section specifier requires a segment whose length is "
-   "between 1 and 16 characters";
-
-  // Verify that the section is present and not too long.
+  // Verify that the section is present.
   if (Section.empty())
-return "mach-o section specifier requires a segment and section "
-   "separated by a comma";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a segment "
+ "and section separated by a comma");
 
+  // Verify that the section is not too long.
   if (Section.size() > 16)
-return "mach-o section specifier requires a section whose length is "
-   "between 1 and 16 characters";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a section "
+ "whose length is between 1 and 16 characters");
 
   // If there is no comma after the section, we're done.
   TAA = 0;
   StubSize = 0;
   if (Section

[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-22 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: llvm/test/CodeGen/AArch64/clang-section-macho.ll:8
+
+attributes #0 = { "implicit-section-name"="TEXT,mytext" }
+

`"__TEXT,__mytext"`


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97233

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


[PATCH] D97233: Support `#pragma clang section` directives on MachO targets

2021-02-22 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
jroelofs added reviewers: t.p.northover, javed.absar, rogfer01.
Herald added a subscriber: hiraditya.
Herald added a reviewer: aaron.ballman.
jroelofs requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97233

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Sema/SemaAttr.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenCXX/clang-sections.cpp
  clang/test/Sema/pragma-clang-section-macho.c
  llvm/include/llvm/MC/MCSectionMachO.h
  llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
  llvm/lib/MC/MCParser/DarwinAsmParser.cpp
  llvm/lib/MC/MCSectionMachO.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/AArch64/clang-section-macho.ll

Index: llvm/test/CodeGen/AArch64/clang-section-macho.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/clang-section-macho.ll
@@ -0,0 +1,11 @@
+;RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
+
+define dso_local void @foo() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { "implicit-section-name"="TEXT,mytext" }
+
+; CHECK:  .section	TEXT,mytext
+; CHECK-NEXT: .globl	_foo
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1899,9 +1899,11 @@
   StringRef ParsedSegment, ParsedSection;
   unsigned TAA = 0, StubSize = 0;
   bool TAAParsed;
-  std::string ErrorCode = MCSectionMachO::ParseSectionSpecifier(
-  Section, ParsedSegment, ParsedSection, TAA, TAAParsed, StubSize);
-  assert(ErrorCode.empty() && "Invalid section specifier.");
+  cantFail(MCSectionMachO::ParseSectionSpecifier(Section,
+ ParsedSegment,
+ ParsedSection,
+ TAA, TAAParsed,
+ StubSize));
 
   // Ignore the globals from the __OBJC section. The ObjC runtime assumes
   // those conform to /usr/lib/objc/runtime.h, so we can't add redzones to
Index: llvm/lib/MC/MCSectionMachO.cpp
===
--- llvm/lib/MC/MCSectionMachO.cpp
+++ llvm/lib/MC/MCSectionMachO.cpp
@@ -174,12 +174,12 @@
 /// flavored .s file.  If successful, this fills in the specified Out
 /// parameters and returns an empty string.  When an invalid section
 /// specifier is present, this returns a string indicating the problem.
-std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
-  StringRef &Segment,// Out.
-  StringRef &Section,// Out.
-  unsigned  &TAA,// Out.
-  bool  &TAAParsed,  // Out.
-  unsigned  &StubSize) { // Out.
+Error MCSectionMachO::ParseSectionSpecifier(StringRef Spec,// In.
+StringRef &Segment,// Out.
+StringRef &Section,// Out.
+unsigned  &TAA,// Out.
+bool  &TAAParsed,  // Out.
+unsigned  &StubSize) { // Out.
   TAAParsed = false;
 
   SmallVector SplitSpec;
@@ -194,25 +194,23 @@
   StringRef Attrs = GetEmptyOrTrim(3);
   StringRef StubSizeStr = GetEmptyOrTrim(4);
 
-  // Verify that the segment is present and not too long.
-  if (Segment.empty() || Segment.size() > 16)
-return "mach-o section specifier requires a segment whose length is "
-   "between 1 and 16 characters";
-
-  // Verify that the section is present and not too long.
+  // Verify that the section is present.
   if (Section.empty())
-return "mach-o section specifier requires a segment and section "
-   "separated by a comma";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a segment "
+ "and section separated by a comma");
 
+  // Verify that the section is not too long.
   if (Section.size() > 16)
-return "mach-o section specifier requires a section whose length is "
-   "between 1 and 16 characters";
+return createStringError(inconvertibleErrorCode(),
+ "mach-o section specifier requires a secti

[PATCH] D95070: Fix crash when emitting NullReturn guards for functions returning BOOL

2021-01-20 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs updated this revision to Diff 317959.
jroelofs added a comment.

Fix formatting.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D95070

Files:
  clang/lib/CodeGen/CGObjCMac.cpp
  clang/test/CodeGenObjC/null-check-bool-ret.m


Index: clang/test/CodeGenObjC/null-check-bool-ret.m
===
--- /dev/null
+++ clang/test/CodeGenObjC/null-check-bool-ret.m
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple arm64e-apple-ios15.0.0 -emit-llvm-bc -fobjc-arc 
-disable-llvm-passes %s -emit-llvm -o - | FileCheck %s
+
+// rdar://73361264
+
+@protocol NSObject
+@end
+
+@interface NSObject 
+@end
+
+@interface WidgetTester : NSObject
+@end
+
+@implementation WidgetTester
+
+typedef struct {
+NSObject* impl;
+} widget_t;
+
+- (_Bool)withWidget:(widget_t)widget {
+return 0;
+}
+
+- (_Bool)testWidget:(widget_t)widget {
+return [self withWidget:widget];
+}
+
+@end
+
+// CHECK-LABEL: msgSend.call:
+// CHECK: [[CALL:%[^ ]+]] = call i1 bitcast (i8* (i8*, i8*, ...)* 
@objc_msgSend to
+// CHECK-NEXT: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.null-receiver:
+// CHECK: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.cont:
+// CHECK-NEXT: {{%[^ ]+}} = phi i1 [ [[CALL]], %msgSend.call ], [ false, 
%msgSend.null-receiver ]
Index: clang/lib/CodeGen/CGObjCMac.cpp
===
--- clang/lib/CodeGen/CGObjCMac.cpp
+++ clang/lib/CodeGen/CGObjCMac.cpp
@@ -1800,7 +1800,8 @@
 // If we've got a scalar return, build a phi.
 if (result.isScalar()) {
   // Derive the null-initialization value.
-  llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType);
+  llvm::Value *null =
+  CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(resultType), resultType);
 
   // If no join is necessary, just flow out.
   if (!contBB) return RValue::get(null);


Index: clang/test/CodeGenObjC/null-check-bool-ret.m
===
--- /dev/null
+++ clang/test/CodeGenObjC/null-check-bool-ret.m
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple arm64e-apple-ios15.0.0 -emit-llvm-bc -fobjc-arc -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s
+
+// rdar://73361264
+
+@protocol NSObject
+@end
+
+@interface NSObject 
+@end
+
+@interface WidgetTester : NSObject
+@end
+
+@implementation WidgetTester
+
+typedef struct {
+NSObject* impl;
+} widget_t;
+
+- (_Bool)withWidget:(widget_t)widget {
+return 0;
+}
+
+- (_Bool)testWidget:(widget_t)widget {
+return [self withWidget:widget];
+}
+
+@end
+
+// CHECK-LABEL: msgSend.call:
+// CHECK: [[CALL:%[^ ]+]] = call i1 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to
+// CHECK-NEXT: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.null-receiver:
+// CHECK: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.cont:
+// CHECK-NEXT: {{%[^ ]+}} = phi i1 [ [[CALL]], %msgSend.call ], [ false, %msgSend.null-receiver ]
Index: clang/lib/CodeGen/CGObjCMac.cpp
===
--- clang/lib/CodeGen/CGObjCMac.cpp
+++ clang/lib/CodeGen/CGObjCMac.cpp
@@ -1800,7 +1800,8 @@
 // If we've got a scalar return, build a phi.
 if (result.isScalar()) {
   // Derive the null-initialization value.
-  llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType);
+  llvm::Value *null =
+  CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(resultType), resultType);
 
   // If no join is necessary, just flow out.
   if (!contBB) return RValue::get(null);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D95070: Fix crash when emitting NullReturn guards for functions returning BOOL

2021-01-20 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
jroelofs added reviewers: rjmccall, arphaman.
jroelofs requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

CodeGenModule::EmitNullConstant() creates constants with their "in memory" 
type, not their "in vregs" type. The one place where this difference matters is 
when the type is _Bool, as that is an i1 when in vregs and an i8 in memory.

Fixes: rdar://73361264


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D95070

Files:
  clang/lib/CodeGen/CGObjCMac.cpp
  clang/test/CodeGenObjC/null-check-bool-ret.m


Index: clang/test/CodeGenObjC/null-check-bool-ret.m
===
--- /dev/null
+++ clang/test/CodeGenObjC/null-check-bool-ret.m
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple arm64e-apple-ios15.0.0 -emit-llvm-bc -fobjc-arc 
-disable-llvm-passes %s -emit-llvm -o - | FileCheck %s
+
+// rdar://73361264
+
+@protocol NSObject
+@end
+
+@interface NSObject 
+@end
+
+@interface WidgetTester : NSObject
+@end
+
+@implementation WidgetTester
+
+typedef struct {
+NSObject* impl;
+} widget_t;
+
+- (_Bool)withWidget:(widget_t)widget {
+return 0;
+}
+
+- (_Bool)testWidget:(widget_t)widget {
+return [self withWidget:widget];
+}
+
+@end
+
+// CHECK-LABEL: msgSend.call:
+// CHECK: [[CALL:%[^ ]+]] = call i1 bitcast (i8* (i8*, i8*, ...)* 
@objc_msgSend to
+// CHECK-NEXT: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.null-receiver:
+// CHECK: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.cont:
+// CHECK-NEXT: {{%[^ ]+}} = phi i1 [ [[CALL]], %msgSend.call ], [ false, 
%msgSend.null-receiver ]
Index: clang/lib/CodeGen/CGObjCMac.cpp
===
--- clang/lib/CodeGen/CGObjCMac.cpp
+++ clang/lib/CodeGen/CGObjCMac.cpp
@@ -1800,7 +1800,8 @@
 // If we've got a scalar return, build a phi.
 if (result.isScalar()) {
   // Derive the null-initialization value.
-  llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType);
+  llvm::Value *null = CGF.EmitFromMemory(
+CGF.CGM.EmitNullConstant(resultType), resultType);
 
   // If no join is necessary, just flow out.
   if (!contBB) return RValue::get(null);


Index: clang/test/CodeGenObjC/null-check-bool-ret.m
===
--- /dev/null
+++ clang/test/CodeGenObjC/null-check-bool-ret.m
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple arm64e-apple-ios15.0.0 -emit-llvm-bc -fobjc-arc -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s
+
+// rdar://73361264
+
+@protocol NSObject
+@end
+
+@interface NSObject 
+@end
+
+@interface WidgetTester : NSObject
+@end
+
+@implementation WidgetTester
+
+typedef struct {
+NSObject* impl;
+} widget_t;
+
+- (_Bool)withWidget:(widget_t)widget {
+return 0;
+}
+
+- (_Bool)testWidget:(widget_t)widget {
+return [self withWidget:widget];
+}
+
+@end
+
+// CHECK-LABEL: msgSend.call:
+// CHECK: [[CALL:%[^ ]+]] = call i1 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to
+// CHECK-NEXT: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.null-receiver:
+// CHECK: br label %msgSend.cont
+
+// CHECK-LABEL: msgSend.cont:
+// CHECK-NEXT: {{%[^ ]+}} = phi i1 [ [[CALL]], %msgSend.call ], [ false, %msgSend.null-receiver ]
Index: clang/lib/CodeGen/CGObjCMac.cpp
===
--- clang/lib/CodeGen/CGObjCMac.cpp
+++ clang/lib/CodeGen/CGObjCMac.cpp
@@ -1800,7 +1800,8 @@
 // If we've got a scalar return, build a phi.
 if (result.isScalar()) {
   // Derive the null-initialization value.
-  llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType);
+  llvm::Value *null = CGF.EmitFromMemory(
+CGF.CGM.EmitNullConstant(resultType), resultType);
 
   // If no join is necessary, just flow out.
   if (!contBB) return RValue::get(null);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D92677: Provide default location of sysroot for Baremetal toolchain.

2020-12-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:108
+
+  return std::string(SysRootDir.str());
+}

abidh wrote:
> jroelofs wrote:
> > Small string has an implicit conversion to std::string, so you can just 
> > `return SysRootDir;` here.
> I was getting a compile error on that. Looking in SmallString.h, it seems 
> that conversion to std::string is explicit.
ohh, I see what's going on. doxygen doesn't list the explicit keyword in the 
html page, so I thought it was implicit. sorry.


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

https://reviews.llvm.org/D92677

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


[PATCH] D92677: Provide default location of sysroot for Baremetal toolchain.

2020-12-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:105
+
+  return std::string(SysRootDir);
+}

did `return SysRootDir;` not work? Why do you need the explicit std::string 
ctor call?


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

https://reviews.llvm.org/D92677

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


[PATCH] D92677: Provide default location of sysroot for Baremetal toolchain.

2020-12-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM




Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:105
+
+  if (!llvm::sys::fs::exists(SysRootDir))
+return std::string();

Why not always add it, even if it doesn't exist? That's an easier failure mode 
to diagnose as a user, since you'll see the compiler appending paths that 
aren't there, rather than having magic behavior.



Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:108
+
+  return std::string(SysRootDir.str());
+}

Small string has an implicit conversion to std::string, so you can just `return 
SysRootDir;` here.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92677

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


[PATCH] D92176: Don't use sysroot/include when sysroot is empty.

2020-12-04 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92176

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


[PATCH] D91559: Add sysroot/lib to library search path of baremetal toolchain.

2020-11-16 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added inline comments.
This revision is now accepted and ready to land.



Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:39
+llvm::sys::path::append(SysRoot, "lib");
+getFilePaths().push_back(std::string(SysRoot.str()));
+  }

Is the explicit `std::string` ctor call necessary here? Since `SmallString` has 
an `operator std::string() const`, I think this can just be:

```
getFilePaths().push_back(SysRoot);
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D91559

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


[PATCH] D91442: [clang][Driver] Handle risvc in Baremetal.cpp.

2020-11-13 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

Seems reasonable.

I could see someone wanting to use `--gcc-toolchain` to point at the baremetal 
toolchain for their target, but that's unlikely to work out of the box anyway. 
I'd love to know where the Generic_GCC toolchain is used in practice, since 
that's always seemed quite fragile to me.




Comment at: clang/lib/Driver/Driver.cpp:5150
   case llvm::Triple::riscv64:
-TC = std::make_unique(*this, Target, Args);
+if (!Args.getLastArg(clang::driver::options::OPT_gcc_toolchain) &&
+toolchains::BareMetal::handlesTarget(Target))

for consistency and principle-of-least-surprise, maybe we should have the same 
check in the other place where `toolchains::BareMetal` is created?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D91442

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


[PATCH] D13673: Add initial support for the MUSL C library.

2020-11-13 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

More context: https://www.openwall.com/lists/musl/2013/03/29/13


Repository:
  rL LLVM

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

https://reviews.llvm.org/D13673

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


[PATCH] D13673: Add initial support for the MUSL C library.

2020-11-13 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D13673#2394064 , @ldionne wrote:

> @vkalintiris @jroelofs Is it possible to detect Musl through some macro? I'd 
> like to get rid of the CMake option -- this isn't the sort of property that 
> we want to set explicitly at configure time, it's the sort of property we 
> want to sniff out in the library instead.

I wish there was. Last I remember talking about it, Rich Felker was really 
against having one. I doubt this has changed.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D13673

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


[PATCH] D87164: Extending Baremetal toolchain's support for the rtlib option.

2020-09-18 Thread Jon Roelofs via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG51c5add8547a: Extending Baremetal toolchain's support 
for the rtlib option. (authored by jroelofs).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87164

Files:
  clang/lib/Driver/ToolChains/BareMetal.cpp
  clang/test/Driver/baremetal.cpp


Index: clang/test/Driver/baremetal.cpp
===
--- clang/test/Driver/baremetal.cpp
+++ clang/test/Driver/baremetal.cpp
@@ -83,3 +83,7 @@
 // RUN: %clangxx -target arm-none-eabi -mthread-model posix -v 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=CHECK-THREAD-MODEL-POSIX
 // CHECK-THREAD-MODEL-POSIX: Thread model: posix
+
+// RUN: %clang -### -target arm-none-eabi -rtlib=libgcc -v %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-RTLIB-GCC
+// CHECK-RTLIB-GCC: -lgcc
Index: clang/lib/Driver/ToolChains/BareMetal.cpp
===
--- clang/lib/Driver/ToolChains/BareMetal.cpp
+++ clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -156,8 +156,17 @@
 
 void BareMetal::AddLinkRuntimeLib(const ArgList &Args,
   ArgStringList &CmdArgs) const {
-  CmdArgs.push_back(Args.MakeArgString("-lclang_rt.builtins-" +
-   getTriple().getArchName()));
+  ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args);
+  switch (RLT) {
+  case ToolChain::RLT_CompilerRT:
+CmdArgs.push_back(
+Args.MakeArgString("-lclang_rt.builtins-" + 
getTriple().getArchName()));
+return;
+  case ToolChain::RLT_Libgcc:
+CmdArgs.push_back("-lgcc");
+return;
+  }
+  llvm_unreachable("Unhandled RuntimeLibType.");
 }
 
 void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,


Index: clang/test/Driver/baremetal.cpp
===
--- clang/test/Driver/baremetal.cpp
+++ clang/test/Driver/baremetal.cpp
@@ -83,3 +83,7 @@
 // RUN: %clangxx -target arm-none-eabi -mthread-model posix -v 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=CHECK-THREAD-MODEL-POSIX
 // CHECK-THREAD-MODEL-POSIX: Thread model: posix
+
+// RUN: %clang -### -target arm-none-eabi -rtlib=libgcc -v %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-RTLIB-GCC
+// CHECK-RTLIB-GCC: -lgcc
Index: clang/lib/Driver/ToolChains/BareMetal.cpp
===
--- clang/lib/Driver/ToolChains/BareMetal.cpp
+++ clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -156,8 +156,17 @@
 
 void BareMetal::AddLinkRuntimeLib(const ArgList &Args,
   ArgStringList &CmdArgs) const {
-  CmdArgs.push_back(Args.MakeArgString("-lclang_rt.builtins-" +
-   getTriple().getArchName()));
+  ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args);
+  switch (RLT) {
+  case ToolChain::RLT_CompilerRT:
+CmdArgs.push_back(
+Args.MakeArgString("-lclang_rt.builtins-" + getTriple().getArchName()));
+return;
+  case ToolChain::RLT_Libgcc:
+CmdArgs.push_back("-lgcc");
+return;
+  }
+  llvm_unreachable("Unhandled RuntimeLibType.");
 }
 
 void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D87164: Extending Baremetal toolchain's support for the rtlib option.

2020-09-17 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

btw, do you need me to commit it for you?


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

https://reviews.llvm.org/D87164

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


[PATCH] D87164: Extending Baremetal toolchain's support for the rtlib option.

2020-09-17 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

Yeah, this should do what you're after. LGTM


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

https://reviews.llvm.org/D87164

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


[PATCH] D87164: Extending Baremetal toolchain's support for the rtlib option.

2020-09-14 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

In D87164#2268366 , @mcarrasco wrote:

> @jroelofs no worries, thanks a lot for your time.
>
> Please tell me if I understood you correctly.
>
> It is acceptable just to append the -lgcc if -rtlib=libgcc is used, although 
> the user is responsible to ensure that correct paths are provided so libgcc 
> is found.

Kind of, yeah.

> I also agree with the above, although I just want to know if I got your words 
> correctly. In addition, you suggest that the build system should invoke clang 
> with a valid value in --resource-dir option in order find libgcc.

If you're putting together your own toolchain, then the right thing to do is to 
install libgcc into the folder where clang expects to find the compiler-rt 
builtins in the resource-dir. This is usually in a folder that's sibling to the 
compiler itself, something like lib/clang/$version/lib/baremetal, assuming 
clang lives at bin/clang.

> Could you point me where I can find more info regarding --resource-dir? So 
> far I only found this:
>
>   clang --help-hidden | grep resource-dir
> -print-resource-dir Print the resource directory pathname
> -resource-dirThe directory which holds the compiler resource 
> files
>
> Sincerly, I'm a little bit confused about: -sysroot, -gcc-toolchain and now 
> -resource-dir

I don't know of any docs for it off the top of my head, but roughly speaking:

- resource-dir is where the compiler is instructed to find the compiler-support 
libraries (i.e. compiler-rt or libgcc)
- sysroot is where libc, the stl, unwinder, c++ abi support library etc should 
live. The folder that this points at should have the same layout as root would 
(i.e. with $sysroot/usr/lib, $sysroot/usr/include, etc), were you building for 
the target from the target (not that that makes much sense for baremetal, but 
you get the picture).
- -gcc-toolchain is where to look for a gcc toolchain for your target. This is 
mainly for linux targets that rely on an installed gcc toolchain, and isn't 
hooked up for the bare metal side of things. This isn't necessary if you have a 
self-contained clang toolchain built that doesn't rely on those bits of gcc.

> Thanks for your feedback!
> Manuel.




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

https://reviews.llvm.org/D87164

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


[PATCH] D87164: Extending Baremetal toolchain's support for the rtlib option.

2020-09-09 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added a comment.

> The Baremetal toolchain currently has a fixed behavior regardless of the 
> -rtlib option's value. It is always linking against compiler-rt unless 
> -nodefaultlibs is enabled.
>
> This proposal slightly changes the code in such a way that enabling 
> -rtlib=libgcc implies linking against -libgcc.
>
> Something that I'm unsure about this patch is that we are not enforcing the 
> existence of such libgcc. By reading other toolchains, I understood that is 
> not always enforced. Do you think this policy is acceptable? If it is not, 
> how would you think it should be addressed?

I think it's fine. You'll get linker errors if the library can't be found.

> Context:
>
> So far I manually set an -L path to a valid libgcc on my system when clang is 
> invoked. In this particular case, I use arm-none-eabi-gcc -mthumb 
> -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -print-libgcc-file-name 
> which retrieves the path I want.
>
> Assume the user forwards a gcc-toolchain installation through 
> --gcc-toolchain. Would be a good idea to programmatically query 
> arm-none-eabi-gcc for the libgcc as described above?

I don't think it's appropriate to bake this into clang's driver. Instead, this 
should be done by the build script, and the resulting path should be fed in via 
the -resource-dir flag.

> If that is the case, how would be the most "llvm way" to do it? I'm not very 
> related to all abstractions and concepts from the framework.
>
> This is my very first contribution to LLVM so I'd really appreciate any 
> feedback in order to improve this proposal :)

Sorry it took me a few days to get around to reviewing this. Been a bit busy 
with a move thanks for the patch!




Comment at: clang/lib/Driver/ToolChains/BareMetal.cpp:164
+Args.MakeArgString("-lclang_rt.builtins-" + 
getTriple().getArchName()));
+break;
+  case ToolChain::RLT_Libgcc:

If you make these `break`s into `return`s, and put an 
`llvm_unreachable("unhandled RuntimeLibType");` after the switch, then whoever 
adds a new entry to that enum will get a nice warning showing them that they 
need to update this code.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87164

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


[PATCH] D73151: [analyzer] Fix handle leak false positive when the handle dies too early

2020-07-28 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added inline comments.



Comment at: clang/test/Analysis/fuchsia_handle.cpp:80
+  zx_status_t status = zx_channel_create(0, &sa, &sb);
+  // expected-note@-1 {{Handle allocated through 2nd parameter}}
+  if (status == 0) { // expected-note {{Assuming 'status' is equal to 0}}

jroelofs wrote:
> @xazax.hun, @dcoughlin Is it expected that these diagnostics be 
> non-deterministic? I'm seeing this test case fail sporadically [1] because 
> sometimes the analyzer sees that the 3rd argument leaks, and other times it 
> sees that the 2nd does.
> 
> The easy fix here would be to adjust the regex to be flexible against that 
> difference, but I didn't want to cover up an underlying issue by committing 
> that blindly:
> 
> ```
> // expected-note@-1 {{Handle allocated through (2nd|3rd) parameter}}
> ```
> 
> 1: 
> http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-expensive/17048/console
erm, wrong link. this is the correct one:

http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-expensive/17049/#showFailuresLink


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D73151

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


[PATCH] D73151: [analyzer] Fix handle leak false positive when the handle dies too early

2020-07-28 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs added subscribers: dcoughlin, jroelofs.
jroelofs added inline comments.
Herald added subscribers: ASDenysPetrov, martong.



Comment at: clang/test/Analysis/fuchsia_handle.cpp:80
+  zx_status_t status = zx_channel_create(0, &sa, &sb);
+  // expected-note@-1 {{Handle allocated through 2nd parameter}}
+  if (status == 0) { // expected-note {{Assuming 'status' is equal to 0}}

@xazax.hun, @dcoughlin Is it expected that these diagnostics be 
non-deterministic? I'm seeing this test case fail sporadically [1] because 
sometimes the analyzer sees that the 3rd argument leaks, and other times it 
sees that the 2nd does.

The easy fix here would be to adjust the regex to be flexible against that 
difference, but I didn't want to cover up an underlying issue by committing 
that blindly:

```
// expected-note@-1 {{Handle allocated through (2nd|3rd) parameter}}
```

1: 
http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-expensive/17048/console


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D73151

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


[PATCH] D80947: Add to the Coding Standard our that single-line bodies omit braces

2020-06-01 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs accepted this revision.
jroelofs added a comment.
This revision is now accepted and ready to land.

LGTM




Comment at: llvm/docs/CodingStandards.rst:1582
+clear that it is a single line. Note that comments should only be hoisted for 
loops and
+'if', and not in 'else if' or 'else', where it would be unclear whether the 
comment
+belonged to the preceeding condition, or the 'else'.

Elsewhere in this file uses double backticks around keywords that are inline in 
text.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80947



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


[PATCH] D80436: [clang][docs] Document additional bits of libc that -ffreestanding envs must provide

2020-05-26 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs closed this revision.
jroelofs added a comment.

1e06b169be3e59799b8dcaf16d1d03bd4c12da42 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80436



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


[PATCH] D80436: [clang][docs] Document additional bits of libc that -ffreestanding envs must provide

2020-05-22 Thread Jon Roelofs via Phabricator via cfe-commits
jroelofs created this revision.
jroelofs added reviewers: jyknight, echristo.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

See also discussion following: 
http://lists.llvm.org/pipermail/llvm-dev/2012-May/050098.html


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D80436

Files:
  clang/docs/CommandGuide/clang.rst


Index: clang/docs/CommandGuide/clang.rst
===
--- clang/docs/CommandGuide/clang.rst
+++ clang/docs/CommandGuide/clang.rst
@@ -246,7 +246,9 @@
 .. option:: -ffreestanding
 
  Indicate that the file should be compiled for a freestanding, not a hosted,
- environment.
+ environment. Note that it is assumed that a freestanding environment will
+ additionally provide `memcpy`, `memmove`, `memset` and `memcmp`
+ implementations, as these are needed for efficient codegen for many programs.
 
 .. option:: -fno-builtin
 


Index: clang/docs/CommandGuide/clang.rst
===
--- clang/docs/CommandGuide/clang.rst
+++ clang/docs/CommandGuide/clang.rst
@@ -246,7 +246,9 @@
 .. option:: -ffreestanding
 
  Indicate that the file should be compiled for a freestanding, not a hosted,
- environment.
+ environment. Note that it is assumed that a freestanding environment will
+ additionally provide `memcpy`, `memmove`, `memset` and `memcmp`
+ implementations, as these are needed for efficient codegen for many programs.
 
 .. option:: -fno-builtin
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits