102 lines
3 KiB
Objective-C
102 lines
3 KiB
Objective-C
/// Test determinisim when serializing anonymous decls. Create enough Decls in
|
|
/// DeclContext that can overflow the small storage of SmallPtrSet to make sure
|
|
/// the serialization does not rely on iteration order of SmallPtrSet.
|
|
// RUN: rm -rf %t.dir
|
|
// RUN: split-file %s %t.dir
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t.dir/cache -triple x86_64-apple-macosx10.11.0 \
|
|
// RUN: -I%t.dir/headers %t.dir/main.m -fdisable-module-hash -Wno-visibility
|
|
// RUN: mv %t.dir/cache/A.pcm %t1.pcm
|
|
/// Check the order of the decls first. If LLVM_ENABLE_REVERSE_ITERATION is on,
|
|
/// it will fail the test early if the output is depending on the order of items
|
|
/// in containers that has non-deterministic orders.
|
|
// RUN: llvm-bcanalyzer --dump --disable-histogram %t1.pcm | FileCheck %s
|
|
// RUN: rm -rf %t.dir/cache
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t.dir/cache -triple x86_64-apple-macosx10.11.0 \
|
|
// RUN: -I%t.dir/headers %t.dir/main.m -fdisable-module-hash -Wno-visibility
|
|
// RUN: mv %t.dir/cache/A.pcm %t2.pcm
|
|
// RUN: diff %t1.pcm %t2.pcm
|
|
|
|
/// Spot check entries to make sure they are in current ordering.
|
|
/// op6 encodes the anonymous decl number which should be in order.
|
|
|
|
/// NOTE: This test case is on determinism of TypeID for function declaration.
|
|
/// Change related to TypeID (or PredefinedTypeIDs) will affect the result and
|
|
/// will require update for this test case. Currently, TypeID is at op6 and the
|
|
/// test checks the IDs are in strict ordering.
|
|
|
|
// CHECK: <TYPE_FUNCTION_PROTO
|
|
// CHECK-NEXT: <DECL_PARM_VAR
|
|
// CHECK-SAME: op5=2
|
|
// CHECK-NEXT: <DECL_PARM_VAR
|
|
// CHECK-SAME: op5=3
|
|
// CHECK-NEXT: <DECL_PARM_VAR
|
|
// CHECK-SAME: op5=4
|
|
// CHECK-NEXT: <DECL_PARM_VAR
|
|
// CHECK-SAME: op5=5
|
|
|
|
/// Decl records start at 43
|
|
// CHECK: <DECL_RECORD
|
|
// CHECK-SAME: op5=43
|
|
// CHECK-NEXT: <DECL_RECORD
|
|
// CHECK-SAME: op5=44
|
|
// CHECK-NEXT: <DECL_RECORD
|
|
// CHECK-SAME: op5=45
|
|
// CHECK-NEXT: <DECL_RECORD
|
|
// CHECK-SAME: op5=46
|
|
|
|
//--- headers/a.h
|
|
void f(struct A0 *a0,
|
|
struct A1 *a1,
|
|
struct A2 *a2,
|
|
struct A3 *a3,
|
|
struct A4 *a4,
|
|
struct A5 *a5,
|
|
struct A6 *a6,
|
|
struct A7 *a7,
|
|
struct A8 *a8,
|
|
struct A9 *a9,
|
|
struct A10 *a10,
|
|
struct A11 *a11,
|
|
struct A12 *a12,
|
|
struct A13 *a13,
|
|
struct A14 *a14,
|
|
struct A15 *a15,
|
|
struct A16 *a16,
|
|
struct A17 *a17,
|
|
struct A18 *a18,
|
|
struct A19 *a19,
|
|
struct A20 *a20,
|
|
struct A21 *a21,
|
|
struct A22 *a22,
|
|
struct A23 *a23,
|
|
struct A24 *a24,
|
|
struct A25 *a25,
|
|
struct A26 *a26,
|
|
struct A27 *a27,
|
|
struct A28 *a28,
|
|
struct A29 *a29,
|
|
struct A30 *a30,
|
|
struct A31 *a31,
|
|
struct A32 *a32,
|
|
struct A33 *a33,
|
|
struct A34 *a34,
|
|
struct A35 *a35,
|
|
struct A36 *a36,
|
|
struct A37 *a37,
|
|
struct A38 *a38,
|
|
struct A39 *a39,
|
|
struct A40 *a40);
|
|
|
|
|
|
//--- headers/module.modulemap
|
|
|
|
module A {
|
|
header "a.h"
|
|
}
|
|
|
|
//--- main.m
|
|
|
|
#import <a.h>
|
|
|