Index: clang/trunk/unittests/AST/ASTImporterTest.cpp =================================================================== --- clang/trunk/unittests/AST/ASTImporterTest.cpp +++ clang/trunk/unittests/AST/ASTImporterTest.cpp @@ -4048,8 +4048,9 @@ auto *ToD = LastDeclMatcher().match(ToTU, getPattern()); EXPECT_TRUE(ImportedD == ToD); EXPECT_FALSE(ToD->isThisDeclarationADefinition()); - if (auto *ToT = dyn_cast(ToD)) + if (auto *ToT = dyn_cast(ToD)) { EXPECT_TRUE(ToT->getTemplatedDecl()); + } } void TypedTest_DefinitionShouldBeImportedAsADefinition() { @@ -4063,8 +4064,9 @@ EXPECT_EQ(DeclCounter().match(ToTU, getPattern()), 1u); auto *ToD = LastDeclMatcher().match(ToTU, getPattern()); EXPECT_TRUE(ToD->isThisDeclarationADefinition()); - if (auto *ToT = dyn_cast(ToD)) + if (auto *ToT = dyn_cast(ToD)) { EXPECT_TRUE(ToT->getTemplatedDecl()); + } } void TypedTest_ImportPrototypeAfterImportedPrototype() { @@ -4177,8 +4179,9 @@ auto *To0 = FirstDeclMatcher().match(ToTU, getPattern()); EXPECT_TRUE(Imported0 == To0); EXPECT_TRUE(To0->isThisDeclarationADefinition()); - if (auto *ToT0 = dyn_cast(To0)) + if (auto *ToT0 = dyn_cast(To0)) { EXPECT_TRUE(ToT0->getTemplatedDecl()); + } } void TypedTest_ImportDefinitionThenPrototype() { Index: clang/trunk/unittests/Tooling/LookupTest.cpp =================================================================== --- clang/trunk/unittests/Tooling/LookupTest.cpp +++ clang/trunk/unittests/Tooling/LookupTest.cpp @@ -217,8 +217,9 @@ // `x::y::Foo` in c.cc [1], it should not make "Foo" at [0] ambiguous because // it's not visible at [0]. Visitor.OnRecordTypeLoc = [&](RecordTypeLoc Type) { - if (Type.getDecl()->getQualifiedNameAsString() == "x::y::Old") + if (Type.getDecl()->getQualifiedNameAsString() == "x::y::Old") { EXPECT_EQ("Foo", replaceRecordTypeLoc(Type, "::x::Foo")); + } }; Visitor.runOver(R"( // a.h Index: lld/trunk/ELF/LinkerScript.cpp =================================================================== --- lld/trunk/ELF/LinkerScript.cpp +++ lld/trunk/ELF/LinkerScript.cpp @@ -887,8 +887,8 @@ // in case it is empty. bool IsEmpty = getInputSections(Sec).empty(); if (IsEmpty) - Sec->Flags = - Flags & ((Sec->NonAlloc ? 0 : SHF_ALLOC) | SHF_WRITE | SHF_EXECINSTR); + Sec->Flags = Flags & ((Sec->NonAlloc ? SHF_NONE : SHF_ALLOC) | SHF_WRITE | + SHF_EXECINSTR); if (IsEmpty && isDiscardable(*Sec)) { Sec->Live = false; Index: llvm/trunk/include/llvm/BinaryFormat/ELF.h =================================================================== --- llvm/trunk/include/llvm/BinaryFormat/ELF.h +++ llvm/trunk/include/llvm/BinaryFormat/ELF.h @@ -875,6 +875,8 @@ // Section flags. enum : unsigned { + SHF_NONE, + // Section data should be writable during execution. SHF_WRITE = 0x1, Index: llvm/trunk/lib/Target/AMDGPU/R600ISelLowering.cpp =================================================================== --- llvm/trunk/lib/Target/AMDGPU/R600ISelLowering.cpp +++ llvm/trunk/lib/Target/AMDGPU/R600ISelLowering.cpp @@ -1714,6 +1714,10 @@ if (NewBldVec[i].isUndef()) continue; + // Fix spurious warning with gcc 7.3 -O3 for NewBldVec[i] below + // warning: array subscript is above array bounds [-Warray-bounds] + if (i >= 4) + continue; for (unsigned j = 0; j < i; j++) { if (NewBldVec[i] == NewBldVec[j]) { NewBldVec[i] = DAG.getUNDEF(NewBldVec[i].getValueType()); Index: llvm/trunk/unittests/IR/ConstantRangeTest.cpp =================================================================== --- llvm/trunk/unittests/IR/ConstantRangeTest.cpp +++ llvm/trunk/unittests/IR/ConstantRangeTest.cpp @@ -395,6 +395,10 @@ } } +#if defined(__GNUC__) && __GNUC__ >= 7 + // Silence warning: variable 'HaveInterrupt3' set but not used + (void)&HaveInterrupt3; +#endif assert(!HaveInterrupt3 && "Should have at most three ranges"); ConstantRange SmallestCR = OpFn(CR1, CR2, ConstantRange::Smallest); Index: llvm/trunk/unittests/Support/TypeTraitsTest.cpp =================================================================== --- llvm/trunk/unittests/Support/TypeTraitsTest.cpp +++ llvm/trunk/unittests/Support/TypeTraitsTest.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/type_traits.h" +#include "gtest/gtest.h" namespace { @@ -71,6 +72,26 @@ template void TrivialityTester(); template void TrivialityTester(); +TEST(Triviality, Tester) { + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); + TrivialityTester(); +} + } // namespace triviality } // end anonymous namespace Index: llvm/trunk/unittests/Transforms/Scalar/CMakeLists.txt =================================================================== --- llvm/trunk/unittests/Transforms/Scalar/CMakeLists.txt +++ llvm/trunk/unittests/Transforms/Scalar/CMakeLists.txt @@ -10,3 +10,8 @@ add_llvm_unittest(ScalarTests LoopPassManagerTest.cpp ) + +# Workaround for the gcc 6.1 bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80916. +if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.1) + set_source_files_properties(LoopPassManagerTest.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-function) +endif() Index: llvm/trunk/unittests/Transforms/Scalar/LoopPassManagerTest.cpp =================================================================== --- llvm/trunk/unittests/Transforms/Scalar/LoopPassManagerTest.cpp +++ llvm/trunk/unittests/Transforms/Scalar/LoopPassManagerTest.cpp @@ -20,19 +20,9 @@ #include "llvm/IR/PassManager.h" #include "llvm/Support/SourceMgr.h" -// Workaround for the gcc 6.1 bug PR80916. -#if defined(__GNUC__) && __GNUC__ > 5 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - #include "gmock/gmock.h" #include "gtest/gtest.h" -#if defined(__GNUC__) && __GNUC__ > 5 -# pragma GCC diagnostic pop -#endif - using namespace llvm; namespace {