diff options
author | hans <hans@chromium.org> | 2014-12-09 09:22:47 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-09 17:23:15 +0000 |
commit | dcc1f6bc8b1b5ab295cd0888db37b0e7c0749eb0 (patch) | |
tree | d5342cd7d5856c8d2b006220f6e3fa1c4fab538a | |
parent | 15a595d9f7d764ddd0f77d8279c8e9f7daa9c83b (diff) | |
download | chromium_src-dcc1f6bc8b1b5ab295cd0888db37b0e7c0749eb0.zip chromium_src-dcc1f6bc8b1b5ab295cd0888db37b0e7c0749eb0.tar.gz chromium_src-dcc1f6bc8b1b5ab295cd0888db37b0e7c0749eb0.tar.bz2 |
Roll Clang 218707:223109 (+r223211, +r223219, -r220714)
Perf sheriffs: we're expecting a ~350 KiB size regression
for this. Expectations need to be updated.
BUG=431803
TBR=brettw
NOTRY=true
Review URL: https://codereview.chromium.org/781763003
Cr-Commit-Position: refs/heads/master@{#307492}
-rw-r--r-- | build/common.gypi | 17 | ||||
-rw-r--r-- | build/config/compiler/BUILD.gn | 3 | ||||
-rw-r--r-- | chrome/installer/linux/rpm/expected_deps_i386 | 1 | ||||
-rw-r--r-- | chrome/installer/linux/rpm/expected_deps_x86_64 | 1 | ||||
-rw-r--r-- | tools/clang/blink_gc_plugin/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tools/clang/plugins/tests/overridden_methods.txt | 24 | ||||
-rwxr-xr-x | tools/clang/plugins/tests/test.sh | 1 | ||||
-rwxr-xr-x | tools/clang/scripts/package.sh | 2 | ||||
-rwxr-xr-x | tools/clang/scripts/repackage.sh | 2 | ||||
-rwxr-xr-x | tools/clang/scripts/update.sh | 289 |
10 files changed, 156 insertions, 186 deletions
diff --git a/build/common.gypi b/build/common.gypi index 204a133..e417282 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -2521,6 +2521,9 @@ # code generated by flex (used in angle) contains that keyword. # http://crbug.com/255186 '-Wno-deprecated-register', + + # TODO(hans): Get this cleaned up. + '-Wno-inconsistent-missing-override', ], }, 'includes': [ 'set_clang_warning_flags.gypi', ], @@ -4235,7 +4238,7 @@ 'target_conditions': [ ['_toolset=="target"', { 'cflags': [ - '-mllvm -asan-coverage=<(asan_coverage)', + '-fsanitize-coverage=<(asan_coverage)', ], }], ], @@ -4606,16 +4609,6 @@ # TODO(eugenis): find a way to reenable this. '-mllvm -asan-globals=0', ], - 'conditions': [ - ['target_arch=="arm"', { - 'ldflags': [ - # TODO(hans): The ASan runtime is no longer automatically - # added to the link line when using -nostdlib. Can we - # stop adding -nostdlib? (crbug.com/423429) - '<!(cd <(DEPTH) && pwd -P)/<(make_clang_dir)/lib/clang/3.6.0/lib/linux/libclang_rt.asan-arm-android.so', - ], - }], - ], }], ['android_webview_build==0', { 'defines': [ @@ -4908,7 +4901,7 @@ 'target_conditions': [ ['_toolset=="target"', { 'cflags': [ - '-mllvm -asan-coverage=<(asan_coverage)', + '-fsanitize-coverage=<(asan_coverage)', ], }], ], diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 81269d6..c221ddd 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -762,6 +762,9 @@ config("default_warnings") { # TODO(thakis): Remove, http://crbug.com/263960 "-Wno-reserved-user-defined-literal", + + # TODO(hans): Get this cleaned up. + "-Wno-inconsistent-missing-override", ] } if (gcc_version >= 48) { diff --git a/chrome/installer/linux/rpm/expected_deps_i386 b/chrome/installer/linux/rpm/expected_deps_i386 index 1386b84..5ba3362 100644 --- a/chrome/installer/linux/rpm/expected_deps_i386 +++ b/chrome/installer/linux/rpm/expected_deps_i386 @@ -26,6 +26,7 @@ libfontconfig.so.1 libfreetype.so.6 libgcc_s.so.1 libgcc_s.so.1(GCC_3.0) +libgcc_s.so.1(GCC_4.0.0) libgcc_s.so.1(GLIBC_2.0) libgconf-2.so.4 libgdk_pixbuf-2.0.so.0 diff --git a/chrome/installer/linux/rpm/expected_deps_x86_64 b/chrome/installer/linux/rpm/expected_deps_x86_64 index 765596a..fe7ff87 100644 --- a/chrome/installer/linux/rpm/expected_deps_x86_64 +++ b/chrome/installer/linux/rpm/expected_deps_x86_64 @@ -19,6 +19,7 @@ libdl.so.2(GLIBC_2.2.5)(64bit) libexpat.so.1()(64bit) libfontconfig.so.1()(64bit) libfreetype.so.6()(64bit) +libgcc_s.so.1(GCC_4.0.0)(64bit) libgconf-2.so.4()(64bit) libgdk_pixbuf-2.0.so.0()(64bit) libgdk-x11-2.0.so.0()(64bit) diff --git a/tools/clang/blink_gc_plugin/CMakeLists.txt b/tools/clang/blink_gc_plugin/CMakeLists.txt index 85ce4a9..c511edf 100644 --- a/tools/clang/blink_gc_plugin/CMakeLists.txt +++ b/tools/clang/blink_gc_plugin/CMakeLists.txt @@ -1,6 +1,6 @@ # This line is read by update.sh and other scripts in tools/clang/scripts # Note: The spaces are significant. -set(LIBRARYNAME BlinkGCPlugin_12) +set(LIBRARYNAME BlinkGCPlugin_14) add_llvm_loadable_module("lib${LIBRARYNAME}" BlinkGCPlugin.cpp diff --git a/tools/clang/plugins/tests/overridden_methods.txt b/tools/clang/plugins/tests/overridden_methods.txt index 199876b..3ee0333 100644 --- a/tools/clang/plugins/tests/overridden_methods.txt +++ b/tools/clang/plugins/tests/overridden_methods.txt @@ -11,14 +11,14 @@ In file included from overridden_methods.cpp:5: virtual void SomeConstMethod() const {} ^ override -./overridden_methods.h:58:53: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. +./overridden_methods.h:58:55: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeMethodWithExceptionSpec() throw() {} - ^ - override -./overridden_methods.h:61:67: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. + ^ + override +./overridden_methods.h:61:69: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeConstMethodWithExceptionSpec() const throw(int) {} - ^ - override + ^ + override ./overridden_methods.h:63:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeNonPureBaseMethod() {} ^ @@ -43,14 +43,14 @@ overridden_methods.cpp:32:39: warning: [chromium-style] Overriding method must b virtual void SomeConstMethod() const {} ^ override -overridden_methods.cpp:34:53: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. +overridden_methods.cpp:34:55: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeMethodWithExceptionSpec() throw() {} - ^ - override -overridden_methods.cpp:37:67: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. + ^ + override +overridden_methods.cpp:37:69: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeConstMethodWithExceptionSpec() const throw(int) {} - ^ - override + ^ + override overridden_methods.cpp:39:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual void SomeNonPureBaseMethod() {} ^ diff --git a/tools/clang/plugins/tests/test.sh b/tools/clang/plugins/tests/test.sh index 9f63f7a..63aa872 100755 --- a/tools/clang/plugins/tests/test.sh +++ b/tools/clang/plugins/tests/test.sh @@ -34,6 +34,7 @@ do_testcase() { fi local output="$("${CLANG_PATH}" -fsyntax-only -Wno-c++11-extensions \ + -Wno-inconsistent-missing-override \ -Xclang -load -Xclang "${PLUGIN_PATH}" \ -Xclang -add-plugin -Xclang find-bad-constructs ${flags} ${1} 2>&1)" local diffout="$(echo "${output}" | diff - "${2}")" diff --git a/tools/clang/scripts/package.sh b/tools/clang/scripts/package.sh index f00abb4..e0c0fcc 100755 --- a/tools/clang/scripts/package.sh +++ b/tools/clang/scripts/package.sh @@ -87,7 +87,7 @@ fi ${extra_flags} 2>&1 | tee -a buildlog.txt R=$("${LLVM_BIN_DIR}/clang" --version | \ - sed -ne 's/clang version .*(\([0-9]*\))/\1/p') + sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') PDIR=clang-$R rm -rf $PDIR diff --git a/tools/clang/scripts/repackage.sh b/tools/clang/scripts/repackage.sh index c92447a..e19ab7e 100755 --- a/tools/clang/scripts/repackage.sh +++ b/tools/clang/scripts/repackage.sh @@ -30,7 +30,7 @@ fi "$THIS_DIR"/package.sh $@ R=$("${LLVM_BIN_DIR}/clang" --version | \ - sed -ne 's/clang version .*(\([0-9]*\))/\1/p') + sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') PDIR=clang-$R if [ ! -f "$PDIR.tgz" ]; then diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh index ad534ad..b585440 100755 --- a/tools/clang/scripts/update.sh +++ b/tools/clang/scripts/update.sh @@ -8,7 +8,7 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://code.google.com/p/chromium/wiki/UpdatingClang # Reverting problematic clang rolls is safe, though. -CLANG_REVISION=218707 +CLANG_REVISION=223109 THIS_DIR="$(dirname "${0}")" LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" @@ -238,8 +238,15 @@ for i in \ "${LLVM_DIR}/test/DebugInfo/gmlt.ll" \ "${LLVM_DIR}/lib/CodeGen/SpillPlacement.cpp" \ "${LLVM_DIR}/lib/CodeGen/SpillPlacement.h" \ + "${LLVM_DIR}/lib/Transforms/Instrumentation/MemorySanitizer.cpp" \ + "${CLANG_DIR}/test/Driver/env.c" \ + "${CLANG_DIR}/lib/Frontend/InitPreprocessor.cpp" \ + "${CLANG_DIR}/test/Frontend/exceptions.c" \ + "${CLANG_DIR}/test/Preprocessor/predefined-exceptions.m" \ + "${LLVM_DIR}/test/Bindings/Go/go.test" \ ; do if [[ -e "${i}" ]]; then + rm -f "${i}" # For unversioned files. svn revert "${i}" fi; done @@ -317,179 +324,143 @@ EOF patch -p0 popd -# Apply r218742: test: XFAIL the non-darwin gmlt test on darwin -# Back-ported becase the test was renamed. +# Apply r223211: "Revert r222997." pushd "${LLVM_DIR}" cat << 'EOF' | ---- a/test/DebugInfo/gmlt.ll -+++ b/test/DebugInfo/gmlt.ll -@@ -1,2 +1,5 @@ - ; REQUIRES: object-emission - ; RUN: %llc_dwarf -O0 -filetype=obj < %S/Inputs/gmlt.ll | llvm-dwarfdump - | FileCheck %S/Inputs/gmlt.ll -+ -+; There's a darwin specific test in X86/gmlt, so it's okay to XFAIL this here. -+; XFAIL: darwin +--- a/lib/Transforms/Instrumentation/MemorySanitizer.cpp ++++ b/lib/Transforms/Instrumentation/MemorySanitizer.cpp +@@ -921,8 +921,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { + Value *OriginPtr = + getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset); + setOrigin(A, EntryIRB.CreateLoad(OriginPtr)); +- } else { +- setOrigin(A, getCleanOrigin()); + } + } + ArgOffset += RoundUpToAlignment(Size, kShadowTLSAlignment); +@@ -942,13 +940,15 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { + /// \brief Get the origin for a value. + Value *getOrigin(Value *V) { + if (!MS.TrackOrigins) return nullptr; +- if (!PropagateShadow) return getCleanOrigin(); +- if (isa<Constant>(V)) return getCleanOrigin(); +- assert((isa<Instruction>(V) || isa<Argument>(V)) && +- "Unexpected value type in getOrigin()"); +- Value *Origin = OriginMap[V]; +- assert(Origin && "Missing origin"); +- return Origin; ++ if (isa<Instruction>(V) || isa<Argument>(V)) { ++ Value *Origin = OriginMap[V]; ++ if (!Origin) { ++ DEBUG(dbgs() << "NO ORIGIN: " << *V << "\n"); ++ Origin = getCleanOrigin(); ++ } ++ return Origin; ++ } ++ return getCleanOrigin(); + } + + /// \brief Get the origin for i-th argument of the instruction I. +@@ -1088,7 +1088,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { + IRB.CreateStore(getCleanShadow(&I), ShadowPtr); + + setShadow(&I, getCleanShadow(&I)); +- setOrigin(&I, getCleanOrigin()); + } + + void visitAtomicRMWInst(AtomicRMWInst &I) { EOF patch -p1 popd -# Apply r218921; fixes spill placement compile-time regression. -pushd "${LLVM_DIR}" +# Apply r223219: "Preserve LD_LIBRARY_PATH when using the 'env' command" +pushd "${CLANG_DIR}" cat << 'EOF' | ---- a/lib/CodeGen/SpillPlacement.cpp -+++ b/lib/CodeGen/SpillPlacement.cpp -@@ -61,27 +61,6 @@ void SpillPlacement::getAnalysisUsage(AnalysisUsage &AU) const { - MachineFunctionPass::getAnalysisUsage(AU); - } - --namespace { --static ManagedStatic<BlockFrequency> Threshold; --} -- --/// Decision threshold. A node gets the output value 0 if the weighted sum of --/// its inputs falls in the open interval (-Threshold;Threshold). --static BlockFrequency getThreshold() { return *Threshold; } -- --/// \brief Set the threshold for a given entry frequency. --/// --/// Set the threshold relative to \c Entry. Since the threshold is used as a --/// bound on the open interval (-Threshold;Threshold), 1 is the minimum --/// threshold. --static void setThreshold(const BlockFrequency &Entry) { -- // Apparently 2 is a good threshold when Entry==2^14, but we need to scale -- // it. Divide by 2^13, rounding as appropriate. -- uint64_t Freq = Entry.getFrequency(); -- uint64_t Scaled = (Freq >> 13) + bool(Freq & (1 << 12)); -- *Threshold = std::max(UINT64_C(1), Scaled); --} -- - /// Node - Each edge bundle corresponds to a Hopfield node. - /// - /// The node contains precomputed frequency data that only depends on the CFG, -@@ -127,9 +106,9 @@ struct SpillPlacement::Node { - - /// clear - Reset per-query data, but preserve frequencies that only depend on - // the CFG. -- void clear() { -+ void clear(const BlockFrequency &Threshold) { - BiasN = BiasP = Value = 0; -- SumLinkWeights = getThreshold(); -+ SumLinkWeights = Threshold; - Links.clear(); - } - -@@ -167,7 +146,7 @@ struct SpillPlacement::Node { - - /// update - Recompute Value from Bias and Links. Return true when node - /// preference changes. -- bool update(const Node nodes[]) { -+ bool update(const Node nodes[], const BlockFrequency &Threshold) { - // Compute the weighted sum of inputs. - BlockFrequency SumN = BiasN; - BlockFrequency SumP = BiasP; -@@ -187,9 +166,9 @@ struct SpillPlacement::Node { - // 2. It helps tame rounding errors when the links nominally sum to 0. - // - bool Before = preferReg(); -- if (SumN >= SumP + getThreshold()) -+ if (SumN >= SumP + Threshold) - Value = -1; -- else if (SumP >= SumN + getThreshold()) -+ else if (SumP >= SumN + Threshold) - Value = 1; - else - Value = 0; -@@ -228,7 +207,7 @@ void SpillPlacement::activate(unsigned n) { - if (ActiveNodes->test(n)) - return; - ActiveNodes->set(n); -- nodes[n].clear(); -+ nodes[n].clear(Threshold); - - // Very large bundles usually come from big switches, indirect branches, - // landing pads, or loops with many 'continue' statements. It is difficult to -@@ -245,6 +224,18 @@ void SpillPlacement::activate(unsigned n) { +--- a/test/Driver/env.c ++++ b/test/Driver/env.c +@@ -5,12 +5,14 @@ + // REQUIRES: shell + // + // The PATH variable is heavily used when trying to find a linker. +-// RUN: env -i LC_ALL=C %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: env -i LC_ALL=C LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=i386-unknown-linux \ + // RUN: --sysroot=%S/Inputs/basic_linux_tree \ + // RUN: | FileCheck --check-prefix=CHECK-LD-32 %s + // +-// RUN: env -i LC_ALL=C PATH="" %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: env -i LC_ALL=C PATH="" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=i386-unknown-linux \ + // RUN: --sysroot=%S/Inputs/basic_linux_tree \ + // RUN: | FileCheck --check-prefix=CHECK-LD-32 %s +EOF +patch -p1 +popd + +# Revert r220714: "Frontend: Define __EXCEPTIONS if -fexceptions is passed" +pushd "${CLANG_DIR}" +cat << 'EOF' | +--- a/lib/Frontend/InitPreprocessor.cpp ++++ b/lib/Frontend/InitPreprocessor.cpp +@@ -566,7 +566,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, + Builder.defineMacro("__BLOCKS__"); } - } - -+/// \brief Set the threshold for a given entry frequency. -+/// -+/// Set the threshold relative to \c Entry. Since the threshold is used as a -+/// bound on the open interval (-Threshold;Threshold), 1 is the minimum -+/// threshold. -+void SpillPlacement::setThreshold(const BlockFrequency &Entry) { -+ // Apparently 2 is a good threshold when Entry==2^14, but we need to scale -+ // it. Divide by 2^13, rounding as appropriate. -+ uint64_t Freq = Entry.getFrequency(); -+ uint64_t Scaled = (Freq >> 13) + bool(Freq & (1 << 12)); -+ Threshold = std::max(UINT64_C(1), Scaled); -+} - - /// addConstraints - Compute node biases and weights from a set of constraints. - /// Set a bit in NodeMask for each active node. -@@ -311,7 +302,7 @@ bool SpillPlacement::scanActiveBundles() { - Linked.clear(); - RecentPositive.clear(); - for (int n = ActiveNodes->find_first(); n>=0; n = ActiveNodes->find_next(n)) { -- nodes[n].update(nodes); -+ nodes[n].update(nodes, Threshold); - // A node that must spill, or a node without any links is not going to - // change its value ever again, so exclude it from iterations. - if (nodes[n].mustSpill()) -@@ -331,7 +322,7 @@ void SpillPlacement::iterate() { - // First update the recently positive nodes. They have likely received new - // negative bias that will turn them off. - while (!RecentPositive.empty()) -- nodes[RecentPositive.pop_back_val()].update(nodes); -+ nodes[RecentPositive.pop_back_val()].update(nodes, Threshold); - - if (Linked.empty()) - return; -@@ -350,7 +341,7 @@ void SpillPlacement::iterate() { - iteration == 0 ? Linked.rbegin() : std::next(Linked.rbegin()), - E = Linked.rend(); I != E; ++I) { - unsigned n = *I; -- if (nodes[n].update(nodes)) { -+ if (nodes[n].update(nodes, Threshold)) { - Changed = true; - if (nodes[n].preferReg()) - RecentPositive.push_back(n); -@@ -364,7 +355,7 @@ void SpillPlacement::iterate() { - for (SmallVectorImpl<unsigned>::const_iterator I = - std::next(Linked.begin()), E = Linked.end(); I != E; ++I) { - unsigned n = *I; -- if (nodes[n].update(nodes)) { -+ if (nodes[n].update(nodes, Threshold)) { - Changed = true; - if (nodes[n].preferReg()) - RecentPositive.push_back(n); -diff --git a/lib/CodeGen/SpillPlacement.h b/lib/CodeGen/SpillPlacement.h -index 03cf5cd..622361e 100644 ---- a/lib/CodeGen/SpillPlacement.h -+++ b/lib/CodeGen/SpillPlacement.h -@@ -62,6 +62,10 @@ class SpillPlacement : public MachineFunctionPass { - // Block frequencies are computed once. Indexed by block number. - SmallVector<BlockFrequency, 8> BlockFrequencies; -+ /// Decision threshold. A node gets the output value 0 if the weighted sum of -+ /// its inputs falls in the open interval (-Threshold;Threshold). -+ BlockFrequency Threshold; -+ - public: - static char ID; // Pass identification, replacement for typeid. +- if (!LangOpts.MSVCCompat && LangOpts.Exceptions) ++ if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions) + Builder.defineMacro("__EXCEPTIONS"); + if (!LangOpts.MSVCCompat && LangOpts.RTTI) + Builder.defineMacro("__GXX_RTTI"); +diff --git a/test/Frontend/exceptions.c b/test/Frontend/exceptions.c +index 981b5b9..4bbaaa3 100644 +--- a/test/Frontend/exceptions.c ++++ b/test/Frontend/exceptions.c +@@ -1,9 +1,6 @@ +-// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -DMS_MODE -verify %s ++// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -verify %s + // expected-no-diagnostics -@@ -152,6 +156,7 @@ private: - void releaseMemory() override; - - void activate(unsigned); -+ void setThreshold(const BlockFrequency &Entry); - }; +-// RUN: %clang_cc1 -fms-compatibility -fexceptions -verify %s +-// expected-no-diagnostics +- +-#if defined(MS_MODE) && defined(__EXCEPTIONS) ++#if defined(__EXCEPTIONS) + #error __EXCEPTIONS should not be defined. + #endif +diff --git a/test/Preprocessor/predefined-exceptions.m b/test/Preprocessor/predefined-exceptions.m +index 0791075..c13f429 100644 +--- a/test/Preprocessor/predefined-exceptions.m ++++ b/test/Preprocessor/predefined-exceptions.m +@@ -1,6 +1,6 @@ + // RUN: %clang_cc1 -x objective-c -fobjc-exceptions -fexceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-NOCXX %s + // CHECK-OBJC-NOCXX: #define OBJC_ZEROCOST_EXCEPTIONS 1 +-// CHECK-OBJC-NOCXX: #define __EXCEPTIONS 1 ++// CHECK-OBJC-NOCXX-NOT: #define __EXCEPTIONS 1 - } // end namespace llvm + // RUN: %clang_cc1 -x objective-c++ -fobjc-exceptions -fexceptions -fcxx-exceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-CXX %s + // CHECK-OBJC-CXX: #define OBJC_ZEROCOST_EXCEPTIONS 1 EOF patch -p1 popd +# This Go bindings test doesn't work after the bootstrap build on Linux. (PR21552) +pushd "${LLVM_DIR}" +cat << 'EOF' | +Index: test/Bindings/Go/go.test +=================================================================== +--- test/Bindings/Go/go.test (revision 223109) ++++ test/Bindings/Go/go.test (working copy) +@@ -1,3 +1,3 @@ +-; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm ++; RUN: true + + ; REQUIRES: shell +EOF +patch -p0 +popd + # Echo all commands. set -x |