93 lines · plain
1// Header2//3// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())4// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())5// INSTR_PROF_RAW_HEADER(uint64_t, BinaryIdsSize, __llvm_write_binary_ids(NULL))6// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)7// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)8// INSTR_PROF_RAW_HEADER(uint64_t, NumBitmaskBytes, NumBitmaskBytes)9// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize)10// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)11// INSTR_PROF_RAW_HEADER(uint64_t, BitmaskDelta, (uintptr_t)BitmaskBegin)12// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)13// INSTR_PROF_RAW_HEADER(uint64_t, VNamesSize, VNamesSize)14// INSTR_PROF_RAW_HEADER(uint64_t, NumVTables, NumVTables)15// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)16 17// gnuwin32 printf does not work for this test because it will print \15 (CR)18// whenever \12 (LF) is in the input string.19UNSUPPORTED: system-windows20RUN: printf '\201rforpl\377' > %t.profraw21RUN: printf '\12\0\0\0\0\0\0\0' >> %t.profraw22RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw23RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw24RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw25RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw26RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw27RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw28RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw29RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw30RUN: printf '\0\0\4\0\1\0\0\0' >> %t.profraw31RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw32RUN: printf '\0\0\4\0\2\0\0\0' >> %t.profraw33RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw34RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw35RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw36 37// Data Section38//39// struct ProfData {40// #define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) \41// Type Name;42// #include "llvm/ProfileData/InstrProfData.inc"43// };44 45RUN: printf '\254\275\030\333\114\302\370\134' >> %t.profraw46RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw47RUN: printf '\0\0\4\0\1\0\0\0' >> %t.profraw48RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw49RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw50RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw51 52// Make two copies for another test.53RUN: cp %t.profraw %t-bad.profraw54RUN: cp %t.profraw %t-good.profraw55 56// Make NumCounters = 0 so that we get "number of counters is zero" error message57RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw58RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw59 60RUN: printf '\023\0\0\0\0\0\0\0' >> %t.profraw61RUN: printf '\3\0foo\0\0\0' >> %t.profraw62 63RUN: not llvm-profdata show %t.profraw 2>&1 | FileCheck %s --check-prefix=ZERO64ZERO: malformed instrumentation profile data: number of counters is zero65 66// Test a counter value greater than 2^56.67RUN: printf '\1\0\0\0\0\0\0\0' >> %t-bad.profraw68RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bad.profraw69// Counter value is 7205759403792793770RUN: printf '\1\0\0\0\0\0\0\1' >> %t-bad.profraw71RUN: printf '\3\0foo\0\0\0' >> %t-bad.profraw72 73RUN: printf '\1\0\0\0\0\0\0\0' >> %t-good.profraw74RUN: printf '\0\0\0\0\0\0\0\0' >> %t-good.profraw75// Counter value is 7205759403792793776RUN: printf '\1\0\0\0\0\0\0\0' >> %t-good.profraw77RUN: printf '\3\0foo\0\0\0' >> %t-good.profraw78 79// llvm-profdata fails if there is a warning for any input file under default failure mode (any).80RUN: not llvm-profdata merge %t-bad.profraw %t-good.profraw -o %t.profdata 2>&1 | FileCheck %s --check-prefix=ANY81ANY: {{.*}} excessively large counter value suggests corrupted profile data: 7205759403792793782 83// -failure-mode=all only fails if there is a warning for every input file.84RUN: not llvm-profdata merge %t-bad.profraw -failure-mode=all -o %t.profdata 2>&1 | FileCheck %s --check-prefix=ALL-ERR85ALL-ERR: {{.*}} excessively large counter value suggests corrupted profile data: 7205759403792793786 87RUN: llvm-profdata merge %t-bad.profraw %t-good.profraw -failure-mode=all -o %t.profdata 2>&1 | FileCheck %s --check-prefix=ALL-WARN88ALL-WARN: {{.*}} excessively large counter value suggests corrupted profile data: 7205759403792793789 90// -failure-mode=warn does not fail at all. It only prints warnings.91RUN: llvm-profdata merge %t-bad.profraw -failure-mode=warn -o %t.profdata 2>&1 | FileCheck %s --check-prefix=WARN92WARN: {{.*}} excessively large counter value suggests corrupted profile data: 7205759403792793793