[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-20 Thread Fangrui Song 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 rG5b899c22f3d2: [Driver] Detect libstdc++ include paths for 
native gcc on 32-bit non-Debian… (authored by MaskRay).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/test/Driver/Inputs/archlinux_i686_tree/lib/.keep
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/backward/.keep
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/i686-pc-linux-gnu/.keep
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crt1.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crti.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crtn.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtbegin.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtend.o
  clang/test/Driver/linux-cross.cpp

Index: clang/test/Driver/linux-cross.cpp
===
--- clang/test/Driver/linux-cross.cpp
+++ clang/test/Driver/linux-cross.cpp
@@ -1,5 +1,27 @@
 // UNSUPPORTED: system-windows
 
+/// Test native GCC installation on Arch Linux i686.
+// RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/archlinux_i686_tree \
+// RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
+// RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=ARCH_I686
+// ARCH_I686:  "-resource-dir" "[[RESOURCE:[^"]+]]"
+// ARCH_I686:  "-internal-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/i686-pc-linux-gnu"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/backward"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+/// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
+/// having it does no harm albeit not ideal.
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../i686-pc-linux-gnu/include"
+// ARCH_I686:  "-internal-externc-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// ARCH_I686:  "-L
+// ARCH_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
 /// Test native x86-64 in the tree.
 // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
 // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2941,31 +2941,27 @@
   if (!getVFS().exists(IncludeDir))
 return false;
 
+  // Debian native gcc uses g++-multiarch-incdir.diff which uses
+  // include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
+  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
+  std::string Dir = IncludeDir.str();
+  StringRef Include =
+  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
+  std::string Path =
+  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
+  .str();
+  if (DetectDebian && !getVFS().exists(Path))
+return false;
+
   // GPLUSPLUS_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, IncludeDir);
   // GPLUSPLUS_TOOL_INCLUDE_DIR. If Triple is not empty, add a target-dependent
   // include directory.
-  if (!Triple.empty()) {
-if (DetectDebian) {
-  // Debian native gcc has an awful patch g++-multiarch-incdir.diff which
-  // uses include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
-  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
-  std::string Dir = IncludeDir.str();
-  StringRef Include =
-  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
-  std::string Path =
-  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
-  .str();
-  if (getVFS().exists(Path))
-addSystemInclude(DriverArgs, CC1Args, Path);
-  else
-addSystemInclude(DriverArgs, CC1Args,
- IncludeDir + "/" + Triple + IncludeSuffix);
-} else {
-  addSystemInclude(DriverArgs, CC1Args,
-   Inc

[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-19 Thread Luke Benes via Phabricator via cfe-commits
lbenes added a comment.

LGTM. No more test failures or build errors. And the libreoffice .configure 
error has been resolved now too. Thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-19 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

If you can accept this, I'll submit it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-18 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay updated this revision to Diff 359654.
MaskRay added a comment.

fix test


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/test/Driver/Inputs/archlinux_i686_tree/lib/.keep
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/backward/.keep
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/i686-pc-linux-gnu/.keep
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crt1.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crti.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crtn.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtbegin.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtend.o
  clang/test/Driver/linux-cross.cpp

Index: clang/test/Driver/linux-cross.cpp
===
--- clang/test/Driver/linux-cross.cpp
+++ clang/test/Driver/linux-cross.cpp
@@ -1,5 +1,27 @@
 // UNSUPPORTED: system-windows
 
+/// Test native GCC installation on Arch Linux i686.
+// RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/archlinux_i686_tree \
+// RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
+// RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=ARCH_I686
+// ARCH_I686:  "-resource-dir" "[[RESOURCE:[^"]+]]"
+// ARCH_I686:  "-internal-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/i686-pc-linux-gnu"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/backward"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+/// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
+/// having it does no harm albeit not ideal.
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../i686-pc-linux-gnu/include"
+// ARCH_I686:  "-internal-externc-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// ARCH_I686:  "-L
+// ARCH_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
 /// Test native x86-64 in the tree.
 // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
 // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2941,31 +2941,27 @@
   if (!getVFS().exists(IncludeDir))
 return false;
 
+  // Debian native gcc uses g++-multiarch-incdir.diff which uses
+  // include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
+  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
+  std::string Dir = IncludeDir.str();
+  StringRef Include =
+  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
+  std::string Path =
+  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
+  .str();
+  if (DetectDebian && !getVFS().exists(Path))
+return false;
+
   // GPLUSPLUS_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, IncludeDir);
   // GPLUSPLUS_TOOL_INCLUDE_DIR. If Triple is not empty, add a target-dependent
   // include directory.
-  if (!Triple.empty()) {
-if (DetectDebian) {
-  // Debian native gcc has an awful patch g++-multiarch-incdir.diff which
-  // uses include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
-  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
-  std::string Dir = IncludeDir.str();
-  StringRef Include =
-  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
-  std::string Path =
-  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
-  .str();
-  if (getVFS().exists(Path))
-addSystemInclude(DriverArgs, CC1Args, Path);
-  else
-addSystemInclude(DriverArgs, CC1Args,
- IncludeDir + "/" + Triple + IncludeSuffix);
-} else {
-  addSystemInclude(DriverArgs, CC1Args,
-   IncludeDir + "/" + Triple + IncludeSuffix);
-}
-  }
+  if (DetectDebian)
+addSystemInclude(DriverArgs, CC1Args, Path);
+  else if (!Triple.empty())
+addSystemInclude(DriverA

[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-17 Thread Luke Benes via Phabricator via cfe-commits
lbenes added a comment.

Updated OpenSUSE which bumped gcc from 10 to 11. Still failing with the latest 
patch.

https://controlc.com/c4a19d64


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Luke Benes via Phabricator via cfe-commits
lbenes added a comment.

Still seeing the same failure on OpenSUSE. I'm still on gcc 10.3. Should I need 
to upgrade for this to work?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

In D106119#2884915 , @lbenes wrote:

> This one should work. 
> https://controlc.com/505d58d3
>
> Please let me know if there's anything else that could help.

Thanks. I forgot to add two `.keep` files to retain two otherwise empty 
directories. Should be good now.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay updated this revision to Diff 359496.
MaskRay added a comment.

Add two .keep files to keep two directories


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/backward/.keep
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/include/c++/11.1.0/i686-pc-linux-gnu/.keep
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crt1.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crti.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crtn.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtbegin.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtend.o
  clang/test/Driver/linux-cross.cpp

Index: clang/test/Driver/linux-cross.cpp
===
--- clang/test/Driver/linux-cross.cpp
+++ clang/test/Driver/linux-cross.cpp
@@ -1,5 +1,27 @@
 // UNSUPPORTED: system-windows
 
+/// Test native GCC installation on Arch Linux i686.
+// RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/archlinux_i686_tree \
+// RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
+// RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=ARCH_I686
+// ARCH_I686:  "-resource-dir" "[[RESOURCE:[^"]+]]"
+// ARCH_I686:  "-internal-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/i686-pc-linux-gnu"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/backward"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+/// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
+/// having it does no harm albeit not ideal.
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../i686-pc-linux-gnu/include"
+// ARCH_I686:  "-internal-externc-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// ARCH_I686:  "-L
+// ARCH_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
 /// Test native x86-64 in the tree.
 // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
 // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2941,31 +2941,27 @@
   if (!getVFS().exists(IncludeDir))
 return false;
 
+  // Debian native gcc uses g++-multiarch-incdir.diff which uses
+  // include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
+  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
+  std::string Dir = IncludeDir.str();
+  StringRef Include =
+  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
+  std::string Path =
+  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
+  .str();
+  if (DetectDebian && !getVFS().exists(Path))
+return false;
+
   // GPLUSPLUS_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, IncludeDir);
   // GPLUSPLUS_TOOL_INCLUDE_DIR. If Triple is not empty, add a target-dependent
   // include directory.
-  if (!Triple.empty()) {
-if (DetectDebian) {
-  // Debian native gcc has an awful patch g++-multiarch-incdir.diff which
-  // uses include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
-  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
-  std::string Dir = IncludeDir.str();
-  StringRef Include =
-  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
-  std::string Path =
-  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
-  .str();
-  if (getVFS().exists(Path))
-addSystemInclude(DriverArgs, CC1Args, Path);
-  else
-addSystemInclude(DriverArgs, CC1Args,
- IncludeDir + "/" + Triple + IncludeSuffix);
-} else {
-  addSystemInclude(DriverArgs, CC1Args,
-   IncludeDir + "/" + Triple + IncludeSuffix);
-}
-  }
+  if (DetectDebian)
+addSystemInclude(DriverArgs, CC1Args, Path);
+  else if (!Triple.empty())
+addSystemInclude(DriverArgs, CC1Args,
+   

[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Luke Benes via Phabricator via cfe-commits
lbenes added a comment.

This one should work. 
https://controlc.com/505d58d3

Please let me know if there's anything else that could help.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

In D106119#2884412 , @lbenes wrote:

> Thanks for looking into this. On OpenSUSE i686, the failing tests are now 
> fixed, but  Driver/linux-cross.cpp fails with:
>
> https://pastebin.com/uHfi3KD1

"This page is no longer available. It has either expired, been removed by its 
creator, or removed by one of the Pastebin staff."

> Would you like any more debugging info?
>
>   gcc --print-multiarch
>
> is also empty.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-16 Thread Luke Benes via Phabricator via cfe-commits
lbenes added a comment.

Thanks for looking into this. On OpenSUSE i686, the failing tests are now 
fixed, but  Driver/linux-cross.cpp fails with:

https://pastebin.com/uHfi3KD1

Would you like any more debugging info?

  gcc --print-multiarch

is also empty.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106119

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


[PATCH] D106119: [Driver] Detect libstdc++ include paths for native gcc on 32-bit non-Debian Linux

2021-07-15 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay created this revision.
MaskRay added reviewers: lbenes, sthibaul.
MaskRay requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106119

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/test/Driver/Inputs/archlinux_i686_tree/lib64/.keep
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crt1.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crti.o
  clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/crtn.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtbegin.o
  
clang/test/Driver/Inputs/archlinux_i686_tree/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/crtend.o
  clang/test/Driver/linux-cross.cpp

Index: clang/test/Driver/linux-cross.cpp
===
--- clang/test/Driver/linux-cross.cpp
+++ clang/test/Driver/linux-cross.cpp
@@ -1,5 +1,27 @@
 // UNSUPPORTED: system-windows
 
+/// Test native GCC installation on Arch Linux i686.
+// RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/archlinux_i686_tree \
+// RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
+// RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=ARCH_I686
+// ARCH_I686:  "-resource-dir" "[[RESOURCE:[^"]+]]"
+// ARCH_I686:  "-internal-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/i686-pc-linux-gnu"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/backward"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+/// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
+/// having it does no harm albeit not ideal.
+// ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../i686-pc-linux-gnu/include"
+// ARCH_I686:  "-internal-externc-isystem"
+// ARCH_I686-SAME: {{^}} "[[SYSROOT]]/include"
+// ARCH_I686-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// ARCH_I686:  "-L
+// ARCH_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
 /// Test native x86-64 in the tree.
 // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
 // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2941,31 +2941,27 @@
   if (!getVFS().exists(IncludeDir))
 return false;
 
+  // Debian native gcc uses g++-multiarch-incdir.diff which uses
+  // include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
+  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
+  std::string Dir = IncludeDir.str();
+  StringRef Include =
+  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
+  std::string Path =
+  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
+  .str();
+  if (DetectDebian && !getVFS().exists(Path))
+return false;
+
   // GPLUSPLUS_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, IncludeDir);
   // GPLUSPLUS_TOOL_INCLUDE_DIR. If Triple is not empty, add a target-dependent
   // include directory.
-  if (!Triple.empty()) {
-if (DetectDebian) {
-  // Debian native gcc has an awful patch g++-multiarch-incdir.diff which
-  // uses include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of
-  // include/c++/10/x86_64-linux-gnu$IncludeSuffix.
-  std::string Dir = IncludeDir.str();
-  StringRef Include =
-  llvm::sys::path::parent_path(llvm::sys::path::parent_path(Dir));
-  std::string Path =
-  (Include + "/" + Triple + Dir.substr(Include.size()) + IncludeSuffix)
-  .str();
-  if (getVFS().exists(Path))
-addSystemInclude(DriverArgs, CC1Args, Path);
-  else
-addSystemInclude(DriverArgs, CC1Args,
- IncludeDir + "/" + Triple + IncludeSuffix);
-} else {
-  addSystemInclude(DriverArgs, CC1Args,
-   IncludeDir + "/" + Triple + IncludeSuffix);
-}
-  }
+  if (DetectDebian)
+addSystemInclude(DriverArgs, CC1Args, Path);
+  else if (!Triple.empty())
+addSystemInclude(DriverArgs, CC1Args,
+ IncludeDir + "/" + Triple + IncludeSuffix);
   // GPLUSPLUS_BACKWARD_INCLUDE_DIR
   addSystemInclude(Dri