[clang] c8b2f3f - [ObjC] type method metadata `_imp`, messenger routine at callsite with program address space

2022-08-04 Thread Matt Jacobson via cfe-commits

Author: Matt Jacobson
Date: 2022-08-04T05:40:32-04:00
New Revision: c8b2f3f51bd923afbf9d3ebd0823bce895629630

URL: 
https://github.com/llvm/llvm-project/commit/c8b2f3f51bd923afbf9d3ebd0823bce895629630
DIFF: 
https://github.com/llvm/llvm-project/commit/c8b2f3f51bd923afbf9d3ebd0823bce895629630.diff

LOG: [ObjC] type method metadata `_imp`, messenger routine at callsite with 
program address space

On targets with non-default program address space (e.g., Harvard
architectures), clang crashes when emitting Objective-C method metadata,
because the address of the method IMP cannot be bitcast to i8*. It similarly
crashes at messenger callsite with a failed bitcast.

Define the _imp field instead as i8 addrspace(1)* (or whatever the target's
program address space is). And in getMessageSendInfo(), create signatureType by
specifying the program address space.

Add a regression test using the AVR target. Test failed previously and passes
now. Checked codegen of the test for x86_64-apple-darwin19.6.0 and saw no
difference, as expected.

Reviewed By: rjmccall, dylanmckay

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

Added: 
clang/test/CodeGen/avr/objc-method.m

Modified: 
clang/lib/CodeGen/CGObjCMac.cpp
clang/lib/CodeGen/CGObjCRuntime.cpp

Removed: 




diff  --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 46e65eb1ed43d..2d704cec05761 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -174,6 +174,7 @@ class ObjCCommonTypesHelper {
 public:
   llvm::IntegerType *ShortTy, *IntTy, *LongTy;
   llvm::PointerType *Int8PtrTy, *Int8PtrPtrTy;
+  llvm::PointerType *Int8PtrProgramASTy;
   llvm::Type *IvarOffsetVarTy;
 
   /// ObjectPtrTy - LLVM type for object handles (typeof(id))
@@ -5739,11 +5740,13 @@ 
ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
 {
   CodeGen::CodeGenTypes &Types = CGM.getTypes();
   ASTContext &Ctx = CGM.getContext();
+  unsigned ProgramAS = CGM.getDataLayout().getProgramAddressSpace();
 
   ShortTy = cast(Types.ConvertType(Ctx.ShortTy));
   IntTy = CGM.IntTy;
   LongTy = cast(Types.ConvertType(Ctx.LongTy));
   Int8PtrTy = CGM.Int8PtrTy;
+  Int8PtrProgramASTy = llvm::PointerType::get(CGM.Int8Ty, ProgramAS);
   Int8PtrPtrTy = CGM.Int8PtrPtrTy;
 
   // arm64 targets use "int" ivar offset variables. All others,
@@ -5812,7 +5815,7 @@ 
ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
   //   char *_imp;
   // }
   MethodTy = llvm::StructType::create("struct._objc_method", SelectorPtrTy,
-  Int8PtrTy, Int8PtrTy);
+  Int8PtrTy, Int8PtrProgramASTy);
 
   // struct _objc_cache *
   CacheTy = llvm::StructType::create(VMContext, "struct._objc_cache");
@@ -6771,11 +6774,11 @@ void 
CGObjCNonFragileABIMac::emitMethodConstant(ConstantArrayBuilder &builder,
 
   if (forProtocol) {
 // Protocol methods have no implementation. So, this entry is always NULL.
-method.addNullPointer(ObjCTypes.Int8PtrTy);
+method.addNullPointer(ObjCTypes.Int8PtrProgramASTy);
   } else {
 llvm::Function *fn = GetMethodDefinition(MD);
 assert(fn && "no definition for method?");
-method.addBitCast(fn, ObjCTypes.Int8PtrTy);
+method.addBitCast(fn, ObjCTypes.Int8PtrProgramASTy);
   }
 
   method.finishAndAddTo(builder);

diff  --git a/clang/lib/CodeGen/CGObjCRuntime.cpp 
b/clang/lib/CodeGen/CGObjCRuntime.cpp
index 550fd3d70bdcc..7780a61aa648a 100644
--- a/clang/lib/CodeGen/CGObjCRuntime.cpp
+++ b/clang/lib/CodeGen/CGObjCRuntime.cpp
@@ -360,13 +360,15 @@ CGObjCRuntime::MessageSendInfo
 CGObjCRuntime::getMessageSendInfo(const ObjCMethodDecl *method,
   QualType resultType,
   CallArgList &callArgs) {
+  unsigned ProgramAS = CGM.getDataLayout().getProgramAddressSpace();
+
   // If there's a method, use information from that.
   if (method) {
 const CGFunctionInfo &signature =
   CGM.getTypes().arrangeObjCMessageSendSignature(method, callArgs[0].Ty);
 
 llvm::PointerType *signatureType =
-  CGM.getTypes().GetFunctionType(signature)->getPointerTo();
+  CGM.getTypes().GetFunctionType(signature)->getPointerTo(ProgramAS);
 
 const CGFunctionInfo &signatureForCall =
   CGM.getTypes().arrangeCall(signature, callArgs);
@@ -380,7 +382,7 @@ CGObjCRuntime::getMessageSendInfo(const ObjCMethodDecl 
*method,
 
   // Derive the signature to call from that.
   llvm::PointerType *signatureType =
-CGM.getTypes().GetFunctionType(argsInfo)->getPointerTo();
+CGM.getTypes().GetFunctionType(argsInfo)->getPointerTo(ProgramAS);
   return MessageSendInfo(argsInfo, signatureType);
 }
 

diff  --git a/clang/test/CodeGen/avr/objc-method.m 
b/clang/test/CodeGen/avr/objc-method.m
new file mode 100644
index 0..aeafb8e63466e
--- /dev/null
+++ b/clang/te

[clang] dd9f796 - [ObjC] avoid crashing when emitting synthesized getter/setter and ptrdiff_t is smaller than long

2022-11-09 Thread Matt Jacobson via cfe-commits

Author: Matt Jacobson
Date: 2022-11-10T02:10:30-05:00
New Revision: dd9f7963e434a53e8d70f607392ee9abf76f1d99

URL: 
https://github.com/llvm/llvm-project/commit/dd9f7963e434a53e8d70f607392ee9abf76f1d99
DIFF: 
https://github.com/llvm/llvm-project/commit/dd9f7963e434a53e8d70f607392ee9abf76f1d99.diff

LOG: [ObjC] avoid crashing when emitting synthesized getter/setter and 
ptrdiff_t is smaller than long

On targets where ptrdiff_t is smaller than long, clang crashes when emitting
synthesized getters/setters that call objc_[gs]etProperty.  Explicitly emit a
zext/trunc of the ivar offset value (which is defined to long) to ptrdiff_t,
which objc_[gs]etProperty takes.

Add a test using the AVR target, where ptrdiff_t is smaller than long. Test
failed previously and passes now.

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

Added: 
clang/test/CodeGen/avr/objc-property.m

Modified: 
clang/lib/CodeGen/CGExpr.cpp
clang/lib/CodeGen/CGObjC.cpp
clang/lib/CodeGen/CodeGenFunction.h

Removed: 




diff  --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 40d9b8f37b4a6..ee09a8566c371 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -5242,6 +5242,15 @@ llvm::Value *CodeGenFunction::EmitIvarOffset(const 
ObjCInterfaceDecl *Interface,
   return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar);
 }
 
+llvm::Value *
+CodeGenFunction::EmitIvarOffsetAsPointerDiff(const ObjCInterfaceDecl 
*Interface,
+ const ObjCIvarDecl *Ivar) {
+  llvm::Value *OffsetValue = EmitIvarOffset(Interface, Ivar);
+  QualType PointerDiffType = getContext().getPointerDiffType();
+  return Builder.CreateZExtOrTrunc(OffsetValue,
+   getTypes().ConvertType(PointerDiffType));
+}
+
 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
   llvm::Value *BaseValue,
   const ObjCIvarDecl *Ivar,

diff  --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp
index 5ec2fdb5c1708..3eb530d3e9417 100644
--- a/clang/lib/CodeGen/CGObjC.cpp
+++ b/clang/lib/CodeGen/CGObjC.cpp
@@ -1228,7 +1228,7 @@ CodeGenFunction::generateObjCGetterBody(const 
ObjCImplementationDecl *classImpl,
 llvm::Value *cmd = emitCmdValueForGetterSetterBody(*this, getterMethod);
 llvm::Value *self = Builder.CreateBitCast(LoadObjCSelf(), VoidPtrTy);
 llvm::Value *ivarOffset =
-  EmitIvarOffset(classImpl->getClassInterface(), ivar);
+EmitIvarOffsetAsPointerDiff(classImpl->getClassInterface(), ivar);
 
 CallArgList args;
 args.add(RValue::get(self), getContext().getObjCIdType());
@@ -1532,7 +1532,7 @@ CodeGenFunction::generateObjCSetterBody(const 
ObjCImplementationDecl *classImpl,
 llvm::Value *self =
   Builder.CreateBitCast(LoadObjCSelf(), VoidPtrTy);
 llvm::Value *ivarOffset =
-  EmitIvarOffset(classImpl->getClassInterface(), ivar);
+EmitIvarOffsetAsPointerDiff(classImpl->getClassInterface(), ivar);
 Address argAddr = GetAddrOfLocalVar(*setterMethod->param_begin());
 llvm::Value *arg = Builder.CreateLoad(argAddr, "arg");
 arg = Builder.CreateBitCast(arg, VoidPtrTy);

diff  --git a/clang/lib/CodeGen/CodeGenFunction.h 
b/clang/lib/CodeGen/CodeGenFunction.h
index 05e5bad21d46f..7ef22eb064efd 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -3974,6 +3974,8 @@ class CodeGenFunction : public CodeGenTypeCache {
 
   llvm::Value *EmitIvarOffset(const ObjCInterfaceDecl *Interface,
   const ObjCIvarDecl *Ivar);
+  llvm::Value *EmitIvarOffsetAsPointerDiff(const ObjCInterfaceDecl *Interface,
+   const ObjCIvarDecl *Ivar);
   LValue EmitLValueForField(LValue Base, const FieldDecl* Field);
   LValue EmitLValueForLambdaField(const FieldDecl *Field);
 

diff  --git a/clang/test/CodeGen/avr/objc-property.m 
b/clang/test/CodeGen/avr/objc-property.m
new file mode 100644
index 0..a3eaea2e0375a
--- /dev/null
+++ b/clang/test/CodeGen/avr/objc-property.m
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -triple avr -emit-llvm -fobjc-runtime=macosx %s -o /dev/null
+
+__attribute__((objc_root_class))
+@interface Foo
+
+@property(strong) Foo *f;
+
+@end
+
+@implementation Foo
+
+@synthesize f = _f;
+
+@end



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


[clang] bbe6bd7 - Trivial fix to failing test on FreeBSD

2022-11-16 Thread Matt Jacobson via cfe-commits

Author: Matt Jacobson
Date: 2022-11-17T00:20:23-05:00
New Revision: bbe6bd724a6335e497c7edaed191d37a828d0390

URL: 
https://github.com/llvm/llvm-project/commit/bbe6bd724a6335e497c7edaed191d37a828d0390
DIFF: 
https://github.com/llvm/llvm-project/commit/bbe6bd724a6335e497c7edaed191d37a828d0390.diff

LOG: Trivial fix to failing test on FreeBSD

This file can't use C99-style comments.

Added: 


Modified: 
clang/test/C/drs/dr3xx.c

Removed: 




diff  --git a/clang/test/C/drs/dr3xx.c b/clang/test/C/drs/dr3xx.c
index 96d809a4fe131..d11cf208e543f 100644
--- a/clang/test/C/drs/dr3xx.c
+++ b/clang/test/C/drs/dr3xx.c
@@ -188,7 +188,7 @@ void dr320(int okay[dr320_v]) { /* c89only-warning 
{{variable length arrays are
 ',' == L',' && '\\' == L'\\' && '"' == L'"' && '\'' == L'\''   
 \
   )
 #if __STDC_MB_MIGHT_NEQ_WC__
-#ifndef __FreeBSD__ // PR22208, FreeBSD expects us to give a bad (but 
conforming) answer here.
+#ifndef __FreeBSD__ /* PR22208, FreeBSD expects us to give a bad (but 
conforming) answer here. */
 _Static_assert(!DR321, "__STDC_MB_MIGHT_NEQ_WC__ but all basic source 
characters have same representation");
 #endif
 #else



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


[clang] ba7a1d9 - [Driver] move FreeBSD header search path management to the driver

2022-11-17 Thread Matt Jacobson via cfe-commits

Author: Matt Jacobson
Date: 2022-11-18T02:29:49-05:00
New Revision: ba7a1d9e4aec5399e9cd45e47c7a548b1514b8ba

URL: 
https://github.com/llvm/llvm-project/commit/ba7a1d9e4aec5399e9cd45e47c7a548b1514b8ba
DIFF: 
https://github.com/llvm/llvm-project/commit/ba7a1d9e4aec5399e9cd45e47c7a548b1514b8ba.diff

LOG: [Driver] move FreeBSD header search path management to the driver

This matches OpenBSD, and it supports Swift's use of clang for its C interop
functionality.  Recent changes to Swift use AddClangSystemIncludeArgs() to
inspect the cc1 args; this doesn't work for platforms where cc1 adds standard
include paths implicitly.  See:



Also clean up InitHeaderSearch, making it clearer which targets manage header
search paths in the driver.

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

Added: 


Modified: 
clang/lib/Driver/ToolChains/FreeBSD.cpp
clang/lib/Driver/ToolChains/FreeBSD.h
clang/lib/Lex/InitHeaderSearch.cpp
clang/test/Driver/freebsd.c
clang/test/Driver/freebsd.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp 
b/clang/lib/Driver/ToolChains/FreeBSD.cpp
index fa6c11265ef89..64935227b07e1 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -11,6 +11,7 @@
 #include "Arch/Mips.h"
 #include "Arch/Sparc.h"
 #include "CommonArgs.h"
+#include "clang/Config/config.h"
 #include "clang/Driver/Compilation.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/Options.h"
@@ -408,6 +409,40 @@ unsigned FreeBSD::GetDefaultDwarfVersion() const {
   return 4;
 }
 
+void FreeBSD::AddClangSystemIncludeArgs(
+const llvm::opt::ArgList &DriverArgs,
+llvm::opt::ArgStringList &CC1Args) const {
+  const Driver &D = getDriver();
+
+  if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
+return;
+
+  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+SmallString<128> Dir(D.ResourceDir);
+llvm::sys::path::append(Dir, "include");
+addSystemInclude(DriverArgs, CC1Args, Dir.str());
+  }
+
+  if (DriverArgs.hasArg(options::OPT_nostdlibinc))
+return;
+
+  // Check for configure-time C include directories.
+  StringRef CIncludeDirs(C_INCLUDE_DIRS);
+  if (CIncludeDirs != "") {
+SmallVector dirs;
+CIncludeDirs.split(dirs, ":");
+for (StringRef dir : dirs) {
+  StringRef Prefix =
+  llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) : "";
+  addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
+}
+return;
+  }
+
+  addExternCSystemInclude(DriverArgs, CC1Args,
+  concat(D.SysRoot, "/usr/include"));
+}
+
 void FreeBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
 llvm::opt::ArgStringList &CC1Args) const {
   addSystemInclude(DriverArgs, CC1Args,

diff  --git a/clang/lib/Driver/ToolChains/FreeBSD.h 
b/clang/lib/Driver/ToolChains/FreeBSD.h
index e9cba14174ec4..18832dad98847 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.h
+++ b/clang/lib/Driver/ToolChains/FreeBSD.h
@@ -58,6 +58,9 @@ class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF {
   bool IsMathErrnoDefault() const override { return false; }
   bool IsObjCNonFragileABIDefault() const override { return true; }
 
+  void
+  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+llvm::opt::ArgStringList &CC1Args) const override;
   CXXStdlibType GetDefaultCXXStdlibType() const override;
   void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
  llvm::opt::ArgStringList &CC1Args) const override;

diff  --git a/clang/lib/Lex/InitHeaderSearch.cpp 
b/clang/lib/Lex/InitHeaderSearch.cpp
index 0caa776b3bdbb..1f57742161fb2 100644
--- a/clang/lib/Lex/InitHeaderSearch.cpp
+++ b/clang/lib/Lex/InitHeaderSearch.cpp
@@ -42,9 +42,9 @@ struct DirectoryLookupInfo {
   : Group(Group), Lookup(Lookup), UserEntryIdx(UserEntryIdx) {}
 };
 
-/// InitHeaderSearch - This class makes it easier to set the search paths of
-///  a HeaderSearch object. InitHeaderSearch stores several search path lists
-///  internally, which can be sent to a HeaderSearch object in one swoop.
+/// This class makes it easier to set the search paths of a HeaderSearch 
object.
+/// InitHeaderSearch stores several search path lists internally, which can be
+/// sent to a HeaderSearch object in one swoop.
 class InitHeaderSearch {
   std::vector IncludePath;
   std::vector > SystemHeaderPrefixes;
@@ -58,56 +58,54 @@ class InitHeaderSearch {
   : Headers(HS), Verbose(verbose), IncludeSysroot(std::string(sysroot)),
 HasSysroot(!(sysroot.empty() || sysroot == "/")) {}
 
-  /// AddPath - Add the specified path to the specified group list, prefixing
-  /// the sysroot if used.
+  /// Add the specified path

[clang] 326393a - [Driver] exclude recently added tests from Windows

2022-11-18 Thread Matt Jacobson via cfe-commits

Author: Matt Jacobson
Date: 2022-11-18T05:30:42-05:00
New Revision: 326393ae653189023b251f05009d86215ad30caf

URL: 
https://github.com/llvm/llvm-project/commit/326393ae653189023b251f05009d86215ad30caf
DIFF: 
https://github.com/llvm/llvm-project/commit/326393ae653189023b251f05009d86215ad30caf.diff

LOG: [Driver] exclude recently added tests from Windows

Added: 
clang/test/Driver/freebsd-include-paths.c

Modified: 
clang/test/Driver/freebsd.c
clang/test/Driver/freebsd.cpp

Removed: 




diff  --git a/clang/test/Driver/freebsd-include-paths.c 
b/clang/test/Driver/freebsd-include-paths.c
new file mode 100644
index 0..872b2386ce9f1
--- /dev/null
+++ b/clang/test/Driver/freebsd-include-paths.c
@@ -0,0 +1,16 @@
+// UNSUPPORTED: system-windows
+
+// Check that the driver passes include paths to cc1 on FreeBSD.
+// RUN: %clang -### %s --target=x86_64-unknown-freebsd13.1 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=DRIVER-PASS-INCLUDES
+// DRIVER-PASS-INCLUDES:  "-cc1" {{.*}}"-resource-dir" "[[RESOURCE:[^"]+]]"
+// DRIVER-PASS-INCLUDES-SAME: "-internal-isystem" "[[RESOURCE]]/include"
+// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-externc-isystem" "/usr/include"
+
+// Check that the driver passes include paths to cc1 on FreeBSD in C++ mode.
+// RUN: %clang -### -xc++ %s --target=x86_64-unknown-freebsd13.1 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=DRIVER-PASS-INCLUDES-CXX
+// DRIVER-PASS-INCLUDES-CXX:  "-cc1" {{.*}}"-resource-dir" 
"[[RESOURCE:[^"]+]]"
+// DRIVER-PASS-INCLUDES-CXX-SAME: "-internal-isystem" "/usr/include/c++/v1"
+// DRIVER-PASS-INCLUDES-CXX-SAME: {{^}} "-internal-isystem" 
"[[RESOURCE]]/include"
+// DRIVER-PASS-INCLUDES-CXX-SAME: {{^}} "-internal-externc-isystem" 
"/usr/include"

diff  --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c
index 1091f3b0cff0d..87ce46d1c1c6e 100644
--- a/clang/test/Driver/freebsd.c
+++ b/clang/test/Driver/freebsd.c
@@ -214,9 +214,3 @@
 // RELOCATABLE-NOT: "-l
 // RELOCATABLE-NOT: crt{{[^./]+}}.o
 
-// Check that the driver passes include paths to cc1 on FreeBSD.
-// RUN: %clang -### %s --target=x86_64-unknown-freebsd13.1 -r 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=DRIVER-PASS-INCLUDES
-// DRIVER-PASS-INCLUDES:  "-cc1" {{.*}}"-resource-dir" "[[RESOURCE:[^"]+]]"
-// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-isystem" 
"[[RESOURCE]]{{/|}}include"
-// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-externc-isystem" "/usr/include"

diff  --git a/clang/test/Driver/freebsd.cpp b/clang/test/Driver/freebsd.cpp
index 6b1b09055ab84..56c3d3cba1fe5 100644
--- a/clang/test/Driver/freebsd.cpp
+++ b/clang/test/Driver/freebsd.cpp
@@ -40,11 +40,3 @@
 // CHECK-LIBCXX-SYSROOT-SLASH: "-cc1"
 // CHECK-LIBCXX-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
 // CHECK-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr/include/c++/v1"
-
-// Check that the driver passes include paths to cc1 on FreeBSD.
-// RUN: %clang -### %s --target=x86_64-unknown-freebsd13.1 -r 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=DRIVER-PASS-INCLUDES
-// DRIVER-PASS-INCLUDES:  "-cc1" {{.*}}"-resource-dir" "[[RESOURCE:[^"]+]]"
-// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-isystem" "/usr/include/c++/v1"
-// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-isystem" 
"[[RESOURCE]]{{/|}}include"
-// DRIVER-PASS-INCLUDES-SAME: {{^}} "-internal-externc-isystem" "/usr/include"



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