1 /*===-- attributes.c - tool for testing libLLVM and llvm-c API ------------===*\
3 |* The LLVM Compiler Infrastructure *|
5 |* This file is distributed under the University of Illinois Open Source *|
6 |* License. See LICENSE.TXT for details. *|
8 |*===----------------------------------------------------------------------===*|
10 |* This file implements the --test-attributes and --test-callsite-attributes *|
11 |* commands in llvm-c-test. *|
13 \*===----------------------------------------------------------------------===*/
15 #include "llvm-c-test.h"
20 int llvm_test_function_attributes(void) {
21 LLVMEnablePrettyStackTrace();
23 LLVMModuleRef M
= llvm_load_module(false, true);
25 LLVMValueRef F
= LLVMGetFirstFunction(M
);
29 for (Idx
= LLVMAttributeFunctionIndex
, ParamCount
= LLVMCountParams(F
);
30 Idx
<= ParamCount
; ++Idx
) {
31 int AttrCount
= LLVMGetAttributeCountAtIndex(F
, Idx
);
32 LLVMAttributeRef
*Attrs
=
33 (LLVMAttributeRef
*)malloc(AttrCount
* sizeof(LLVMAttributeRef
));
35 LLVMGetAttributesAtIndex(F
, Idx
, Attrs
);
38 F
= LLVMGetNextFunction(F
);
46 int llvm_test_callsite_attributes(void) {
47 LLVMEnablePrettyStackTrace();
49 LLVMModuleRef M
= llvm_load_module(false, true);
51 LLVMValueRef F
= LLVMGetFirstFunction(M
);
54 for (BB
= LLVMGetFirstBasicBlock(F
); BB
; BB
= LLVMGetNextBasicBlock(BB
)) {
56 for (I
= LLVMGetFirstInstruction(BB
); I
; I
= LLVMGetNextInstruction(I
)) {
57 if (LLVMIsACallInst(I
)) {
60 for (Idx
= LLVMAttributeFunctionIndex
,
61 ParamCount
= LLVMCountParams(F
);
62 Idx
<= ParamCount
; ++Idx
) {
63 int AttrCount
= LLVMGetCallSiteAttributeCount(I
, Idx
);
64 LLVMAttributeRef
*Attrs
= (LLVMAttributeRef
*)malloc(
65 AttrCount
* sizeof(LLVMAttributeRef
));
67 LLVMGetCallSiteAttributes(I
, Idx
, Attrs
);
74 F
= LLVMGetNextFunction(F
);