From b0320387817ab0b4f8c4edfa258414b72bfdb105 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 21 Jun 2016 15:43:08 +0200 Subject: [PATCH] Clang: Tests: Use test data working with clang 3.6 *and* clang 3.8 The test data produces different results when it is run with libclang 3.6 and libclang 3.8. (lib)clang 3.8 will generate an error instead of a warning and suppress further diagnostics. See below. Use simpler test data that is agnostic to the different clang versions. $ cat input.cpp class X { X(X&&) noexcept; }; X::X(X&&) = default; int function() { } $ clang++-3.6 -fsyntax-only -std=c++11 input.cpp input.cpp:5:4: warning: 'X' is missing exception specification 'noexcept' X::X(X&&) = default; ^ noexcept input.cpp:2:5: note: previous declaration is here X(X&&) noexcept; ^ input.cpp:9:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ 2 warnings generated. $ clang++-3.8 -fsyntax-only -std=c++11 input.cpp input.cpp:5:4: error: 'X' is missing exception specification 'noexcept' X::X(X&&) = default; ^ noexcept input.cpp:2:5: note: previous declaration is here X(X&&) noexcept; ^ 1 error generated. Change-Id: I6d786a8b87eb4438fa8db36540db9358181b9a5b Reviewed-by: David Schulz --- .../unittest/data/diagnostic_diagnostic.cpp | 12 +++++------ tests/unit/unittest/diagnostictest.cpp | 20 +++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/tests/unit/unittest/data/diagnostic_diagnostic.cpp b/tests/unit/unittest/data/diagnostic_diagnostic.cpp index a1525b85d51..51423c20b51 100644 --- a/tests/unit/unittest/data/diagnostic_diagnostic.cpp +++ b/tests/unit/unittest/data/diagnostic_diagnostic.cpp @@ -1,10 +1,8 @@ -class X { - X(X&&) noexcept; -}; - -X::X(X&&) = default; - -int function() +int noReturnValue() { } +void f(int) +{ + f(); +} diff --git a/tests/unit/unittest/diagnostictest.cpp b/tests/unit/unittest/diagnostictest.cpp index 822b473859f..314c76c9336 100644 --- a/tests/unit/unittest/diagnostictest.cpp +++ b/tests/unit/unittest/diagnostictest.cpp @@ -91,7 +91,7 @@ protected: Utf8StringVector(), translationUnits}; DiagnosticSet diagnosticSet{translationUnit.diagnostics()}; - ::Diagnostic diagnostic{diagnosticSet.back()}; + ::Diagnostic diagnostic{diagnosticSet.front()}; protected: enum ChildMode { WithChild, WithoutChild }; @@ -149,23 +149,23 @@ TEST_F(Diagnostic, Severity) TEST_F(Diagnostic, ChildDiagnosticsSize) { - auto diagnostic = diagnosticSet.front(); + auto diagnostic = diagnosticSet.back(); ASSERT_THAT(diagnostic.childDiagnostics().size(), 1); } TEST_F(Diagnostic, ChildDiagnosticsText) { - auto childDiagnostic = diagnosticSet.front().childDiagnostics().front(); + auto childDiagnostic = diagnosticSet.back().childDiagnostics().front(); - ASSERT_THAT(childDiagnostic.text(), Utf8StringLiteral("note: previous declaration is here")); + ASSERT_THAT(childDiagnostic.text(), Utf8StringLiteral("note: candidate function not viable: requires 1 argument, but 0 were provided")); } TEST_F(Diagnostic, toDiagnosticContainerLetChildrenThroughByDefault) { const auto diagnosticWithChild = expectedDiagnostic(WithChild); - const auto diagnostic = diagnosticSet.front().toDiagnosticContainer(); + const auto diagnostic = diagnosticSet.back().toDiagnosticContainer(); ASSERT_THAT(diagnostic, IsDiagnosticContainer(diagnosticWithChild)); } @@ -175,11 +175,11 @@ DiagnosticContainer Diagnostic::expectedDiagnostic(Diagnostic::ChildMode childMo QVector children; if (childMode == WithChild) { const auto child = DiagnosticContainer( - Utf8StringLiteral("note: previous declaration is here"), + Utf8StringLiteral("note: candidate function not viable: requires 1 argument, but 0 were provided"), Utf8StringLiteral("Semantic Issue"), {Utf8String(), Utf8String()}, ClangBackEnd::DiagnosticSeverity::Note, - SourceLocationContainer(translationUnit.filePath(), 2, 5), + SourceLocationContainer(translationUnit.filePath(), 5, 6), {}, {}, {} @@ -189,11 +189,11 @@ DiagnosticContainer Diagnostic::expectedDiagnostic(Diagnostic::ChildMode childMo return DiagnosticContainer( - Utf8StringLiteral("warning: 'X' is missing exception specification 'noexcept'"), + Utf8StringLiteral("error: no matching function for call to 'f'"), Utf8StringLiteral("Semantic Issue"), {Utf8String(), Utf8String()}, - ClangBackEnd::DiagnosticSeverity::Warning, - SourceLocationContainer(translationUnit.filePath(), 5, 4), + ClangBackEnd::DiagnosticSeverity::Error, + SourceLocationContainer(translationUnit.filePath(), 7, 5), {}, {}, children