xref: /llvm-project/compiler-rt/test/fuzzer/AlignmentAssumptionTest.cpp (revision d733430c19ed9453b0b66943b83a4a62c83c6ade)
12946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
22946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
32946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4a06ad186SRoman Lebedev 
5a06ad186SRoman Lebedev // Test for alignment assumption failure.
6a06ad186SRoman Lebedev 
7a06ad186SRoman Lebedev #include <assert.h>
8a06ad186SRoman Lebedev #include <climits>
9a06ad186SRoman Lebedev #include <cstddef>
10a06ad186SRoman Lebedev #include <cstdint>
11a06ad186SRoman Lebedev #include <cstdlib>
12a06ad186SRoman Lebedev #include <iostream>
13a06ad186SRoman Lebedev 
14a06ad186SRoman Lebedev static volatile int32_t Sink;
15a06ad186SRoman Lebedev 
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)16a06ad186SRoman Lebedev extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
17a06ad186SRoman Lebedev   assert(Data);
18a06ad186SRoman Lebedev   if (Size > 0 && Data[0] == 'H') {
19a06ad186SRoman Lebedev     Sink = 1;
20a06ad186SRoman Lebedev     if (Size > 1 && Data[1] == 'i') {
21a06ad186SRoman Lebedev       Sink = 2;
22a06ad186SRoman Lebedev       if (Size > 2 && Data[2] == '!') {
23*d733430cSVitaly Buka         auto r = __builtin_assume_aligned(Data + 1, 0x8000);
24a06ad186SRoman Lebedev       }
25a06ad186SRoman Lebedev     }
26a06ad186SRoman Lebedev   }
27a06ad186SRoman Lebedev   return 0;
28a06ad186SRoman Lebedev }
29