summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp')
-rw-r--r--llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp432
1 files changed, 0 insertions, 432 deletions
diff --git a/llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp b/llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp
deleted file mode 100644
index baadffefdde..00000000000
--- a/llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp
+++ /dev/null
@@ -1,432 +0,0 @@
-//===- unittest/Support/OptRemarksParsingTest.cpp - OptTable tests --------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm-c/OptRemarks.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-
-template <size_t N> bool tryParse(const char (&Buf)[N]) {
- LLVMOptRemarkParserRef Parser = LLVMOptRemarkParserCreate(Buf, N - 1);
- LLVMOptRemarkEntry *Remark = nullptr;
- while (LLVMOptRemarkEntry *NewRemark = LLVMOptRemarkParserGetNext(Parser)) {
- EXPECT_TRUE(Remark == nullptr); // Only one remark per test.
- Remark = NewRemark;
- }
- EXPECT_TRUE(Remark != nullptr); // We need *exactly* one remark per test.
- bool HasError = LLVMOptRemarkParserHasError(Parser);
- LLVMOptRemarkParserDispose(Parser);
- return !HasError;
-}
-
-template <size_t N>
-bool parseExpectError(const char (&Buf)[N], const char *Error) {
- LLVMOptRemarkParserRef Parser = LLVMOptRemarkParserCreate(Buf, N - 1);
- LLVMOptRemarkEntry *Remark = nullptr;
- while (LLVMOptRemarkEntry *NewRemark = LLVMOptRemarkParserGetNext(Parser)) {
- EXPECT_FALSE(NewRemark);
- }
- EXPECT_TRUE(Remark == nullptr); // We are parsing only one malformed remark.
- EXPECT_TRUE(LLVMOptRemarkParserHasError(Parser));
- bool MatchesError =
- StringRef(LLVMOptRemarkParserGetErrorMessage(Parser)).contains(Error);
- LLVMOptRemarkParserDispose(Parser);
-
- return MatchesError;
-}
-
-TEST(OptRemarks, OptRemarksParsingEmpty) {
- StringRef Buf = "\n"
- "\n";
- LLVMOptRemarkParserRef Parser =
- LLVMOptRemarkParserCreate(Buf.data(), Buf.size());
- LLVMOptRemarkEntry *NewRemark = LLVMOptRemarkParserGetNext(Parser);
- EXPECT_TRUE(NewRemark == nullptr); // No remark expected.
- EXPECT_TRUE(LLVMOptRemarkParserHasError(Parser));
- EXPECT_TRUE(StringRef(LLVMOptRemarkParserGetErrorMessage(Parser))
- .contains("document root is not of mapping type."));
- LLVMOptRemarkParserDispose(Parser);
-}
-
-TEST(OptRemarks, OptRemarksParsingGood) {
- EXPECT_TRUE(tryParse("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"DebugLoc: { File: file.c, Line: 3, Column: 12 }\n"
-"Function: foo\n"
-"Args:\n"
-" - Callee: bar\n"
-" - String: ' will not be inlined into '\n"
-" - Caller: foo\n"
-" DebugLoc: { File: file.c, Line: 2, Column: 0 }\n"
-" - String: ' because its definition is unavailable'\n"
-""));
-
- // No debug loc should also pass.
- EXPECT_TRUE(tryParse("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args:\n"
-" - Callee: bar\n"
-" - String: ' will not be inlined into '\n"
-" - Caller: foo\n"
-" DebugLoc: { File: file.c, Line: 2, Column: 0 }\n"
-" - String: ' because its definition is unavailable'\n"
-""));
-
- // No args is also ok.
- EXPECT_TRUE(tryParse("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"DebugLoc: { File: file.c, Line: 3, Column: 12 }\n"
-"Function: foo\n"
-""));
-
- // Different order.
- EXPECT_TRUE(tryParse("\n"
-"--- !Missed\n"
-"DebugLoc: { Line: 3, Column: 12, File: file.c }\n"
-"Function: foo\n"
-"Name: NoDefinition\n"
-"Args:\n"
-" - Callee: bar\n"
-" - String: ' will not be inlined into '\n"
-" - Caller: foo\n"
-" DebugLoc: { File: file.c, Line: 2, Column: 0 }\n"
-" - String: ' because its definition is unavailable'\n"
-"Pass: inline\n"
-""));
-}
-
-// Mandatory common part of a remark.
-#define COMMON_REMARK "\nPass: inline\nName: NoDefinition\nFunction: foo\n\n"
-// Test all the types.
-TEST(OptRemarks, OptRemarksParsingTypes) {
- // Type: Passed
- EXPECT_TRUE(tryParse("--- !Passed" COMMON_REMARK));
- // Type: Missed
- EXPECT_TRUE(tryParse("--- !Missed" COMMON_REMARK));
- // Type: Analysis
- EXPECT_TRUE(tryParse("--- !Analysis" COMMON_REMARK));
- // Type: AnalysisFPCompute
- EXPECT_TRUE(tryParse("--- !AnalysisFPCompute" COMMON_REMARK));
- // Type: AnalysisAliasing
- EXPECT_TRUE(tryParse("--- !AnalysisAliasing" COMMON_REMARK));
- // Type: Failure
- EXPECT_TRUE(tryParse("--- !Failure" COMMON_REMARK));
-}
-#undef COMMON_REMARK
-
-TEST(OptRemarks, OptRemarksParsingMissingFields) {
- // No type.
- EXPECT_TRUE(parseExpectError("\n"
-"---\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"",
- "error: Type, Pass, Name or Function missing."));
- // No pass.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"",
- "error: Type, Pass, Name or Function missing."));
- // No name.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Function: foo\n"
-"",
- "error: Type, Pass, Name or Function missing."));
- // No function.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"",
- "error: Type, Pass, Name or Function missing."));
- // Debug loc but no file.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { Line: 3, Column: 12 }\n"
-"",
- "DebugLoc node incomplete."));
- // Debug loc but no line.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Column: 12 }\n"
-"",
- "DebugLoc node incomplete."));
- // Debug loc but no column.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Line: 3 }\n"
-"",
- "DebugLoc node incomplete."));
-}
-
-TEST(OptRemarks, OptRemarksParsingWrongTypes) {
- // Wrong debug loc type.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: foo\n"
-"",
- "expected a value of mapping type."));
- // Wrong line type.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Line: b, Column: 12 }\n"
-"",
- "expected a value of integer type."));
- // Wrong column type.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Line: 3, Column: c }\n"
-"",
- "expected a value of integer type."));
- // Wrong args type.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args: foo\n"
-"",
- "wrong value type for key."));
- // Wrong key type.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"{ A: a }: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"",
- "key is not a string."));
- // Debug loc with unknown entry.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Column: 12, Unknown: 12 }\n"
-"",
- "unknown entry in DebugLoc map."));
- // Unknown entry.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Unknown: inline\n"
-"",
- "unknown key."));
- // Not a scalar.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: { File: a, Line: 1, Column: 2 }\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"",
- "expected a value of scalar type."));
- // Not a string file in debug loc.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: { a: b }, Column: 12, Line: 12 }\n"
-"",
- "expected a value of scalar type."));
- // Not a integer column in debug loc.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Column: { a: b }, Line: 12 }\n"
-"",
- "expected a value of scalar type."));
- // Not a integer line in debug loc.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Column: 12, Line: { a: b } }\n"
-"",
- "expected a value of scalar type."));
- // Not a mapping type value for args.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"DebugLoc: { File: file.c, Column: 12, Line: { a: b } }\n"
-"",
- "expected a value of scalar type."));
-}
-
-TEST(OptRemarks, OptRemarksParsingWrongArgs) {
- // Multiple debug locs per arg.
- EXPECT_TRUE(
- parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args:\n"
-" - Str: string\n"
-" DebugLoc: { File: a, Line: 1, Column: 2 }\n"
-" DebugLoc: { File: a, Line: 1, Column: 2 }\n"
-"",
- "only one DebugLoc entry is allowed per argument."));
- // Multiple strings per arg.
- EXPECT_TRUE(
- parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args:\n"
-" - Str: string\n"
-" Str2: string\n"
-" DebugLoc: { File: a, Line: 1, Column: 2 }\n"
-"",
- "only one string entry is allowed per argument."));
- // No arg value.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args:\n"
-" - Callee: ''\n"
-" - DebugLoc: { File: a, Line: 1, Column: 2 }\n"
-"",
- "argument value is missing."));
- // No arg value.
- EXPECT_TRUE(parseExpectError("\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"Function: foo\n"
-"Args:\n"
-" - DebugLoc: { File: a, Line: 1, Column: 2 }\n"
-"",
- "argument key is missing."));
-
-}
-
-TEST(OptRemarks, OptRemarksGoodStruct) {
- StringRef Buf = "\n"
-"--- !Missed\n"
-"Pass: inline\n"
-"Name: NoDefinition\n"
-"DebugLoc: { File: file.c, Line: 3, Column: 12 }\n"
-"Function: foo\n"
-"Args:\n"
-" - Callee: bar\n"
-" - String: ' will not be inlined into '\n"
-" - Caller: foo\n"
-" DebugLoc: { File: file.c, Line: 2, Column: 0 }\n"
-" - String: ' because its definition is unavailable'\n"
-"\n";
-
- LLVMOptRemarkParserRef Parser =
- LLVMOptRemarkParserCreate(Buf.data(), Buf.size());
- LLVMOptRemarkEntry *Remark = LLVMOptRemarkParserGetNext(Parser);
- EXPECT_FALSE(Remark == nullptr);
- EXPECT_EQ(StringRef(Remark->RemarkType.Str, 7), "!Missed");
- EXPECT_EQ(Remark->RemarkType.Len, 7U);
- EXPECT_EQ(StringRef(Remark->PassName.Str, 6), "inline");
- EXPECT_EQ(Remark->PassName.Len, 6U);
- EXPECT_EQ(StringRef(Remark->RemarkName.Str, 12), "NoDefinition");
- EXPECT_EQ(Remark->RemarkName.Len, 12U);
- EXPECT_EQ(StringRef(Remark->FunctionName.Str, 3), "foo");
- EXPECT_EQ(Remark->FunctionName.Len, 3U);
- EXPECT_EQ(StringRef(Remark->DebugLoc.SourceFile.Str, 6), "file.c");
- EXPECT_EQ(Remark->DebugLoc.SourceFile.Len, 6U);
- EXPECT_EQ(Remark->DebugLoc.SourceLineNumber, 3U);
- EXPECT_EQ(Remark->DebugLoc.SourceColumnNumber, 12U);
- EXPECT_EQ(Remark->Hotness, 0U);
- EXPECT_EQ(Remark->NumArgs, 4U);
- // Arg 0
- {
- LLVMOptRemarkArg &Arg = Remark->Args[0];
- EXPECT_EQ(StringRef(Arg.Key.Str, 6), "Callee");
- EXPECT_EQ(Arg.Key.Len, 6U);
- EXPECT_EQ(StringRef(Arg.Value.Str, 3), "bar");
- EXPECT_EQ(Arg.Value.Len, 3U);
- EXPECT_EQ(StringRef(Arg.DebugLoc.SourceFile.Str, 0), "");
- EXPECT_EQ(Arg.DebugLoc.SourceFile.Len, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceLineNumber, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceColumnNumber, 0U);
- }
- // Arg 1
- {
- LLVMOptRemarkArg &Arg = Remark->Args[1];
- EXPECT_EQ(StringRef(Arg.Key.Str, 6), "String");
- EXPECT_EQ(Arg.Key.Len, 6U);
- EXPECT_EQ(StringRef(Arg.Value.Str, 26), " will not be inlined into ");
- EXPECT_EQ(Arg.Value.Len, 26U);
- EXPECT_EQ(StringRef(Arg.DebugLoc.SourceFile.Str, 0), "");
- EXPECT_EQ(Arg.DebugLoc.SourceFile.Len, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceLineNumber, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceColumnNumber, 0U);
- }
- // Arg 2
- {
- LLVMOptRemarkArg &Arg = Remark->Args[2];
- EXPECT_EQ(StringRef(Arg.Key.Str, 6), "Caller");
- EXPECT_EQ(Arg.Key.Len, 6U);
- EXPECT_EQ(StringRef(Arg.Value.Str, 3), "foo");
- EXPECT_EQ(Arg.Value.Len, 3U);
- EXPECT_EQ(StringRef(Arg.DebugLoc.SourceFile.Str, 6), "file.c");
- EXPECT_EQ(Arg.DebugLoc.SourceFile.Len, 6U);
- EXPECT_EQ(Arg.DebugLoc.SourceLineNumber, 2U);
- EXPECT_EQ(Arg.DebugLoc.SourceColumnNumber, 0U);
- }
- // Arg 3
- {
- LLVMOptRemarkArg &Arg = Remark->Args[3];
- EXPECT_EQ(StringRef(Arg.Key.Str, 6), "String");
- EXPECT_EQ(Arg.Key.Len, 6U);
- EXPECT_EQ(StringRef(Arg.Value.Str, 38),
- " because its definition is unavailable");
- EXPECT_EQ(Arg.Value.Len, 38U);
- EXPECT_EQ(StringRef(Arg.DebugLoc.SourceFile.Str, 0), "");
- EXPECT_EQ(Arg.DebugLoc.SourceFile.Len, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceLineNumber, 0U);
- EXPECT_EQ(Arg.DebugLoc.SourceColumnNumber, 0U);
- }
-
- EXPECT_EQ(LLVMOptRemarkParserGetNext(Parser), nullptr);
-
- EXPECT_FALSE(LLVMOptRemarkParserHasError(Parser));
- LLVMOptRemarkParserDispose(Parser);
-}
OpenPOWER on IntegriCloud