1 //===- llvm/unittest/IR/AttributesTest.cpp - Attributes unit tests --------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/IR/Attributes.h" 11 #include "llvm/IR/LLVMContext.h" 12 #include "gtest/gtest.h" 13 using namespace llvm; 14 15 namespace { 16 17 TEST(Attributes, Uniquing) { 18 LLVMContext C; 19 20 Attribute AttrA = Attribute::get(C, Attribute::AlwaysInline); 21 Attribute AttrB = Attribute::get(C, Attribute::AlwaysInline); 22 EXPECT_EQ(AttrA, AttrB); 23 24 AttributeList ASs[] = {AttributeList::get(C, 1, Attribute::ZExt), 25 AttributeList::get(C, 2, Attribute::SExt)}; 26 27 AttributeList SetA = AttributeList::get(C, ASs); 28 AttributeList SetB = AttributeList::get(C, ASs); 29 EXPECT_EQ(SetA, SetB); 30 } 31 32 TEST(Attributes, Ordering) { 33 LLVMContext C; 34 35 Attribute Align4 = Attribute::get(C, Attribute::Alignment, 4); 36 Attribute Align5 = Attribute::get(C, Attribute::Alignment, 5); 37 Attribute Deref4 = Attribute::get(C, Attribute::Dereferenceable, 4); 38 Attribute Deref5 = Attribute::get(C, Attribute::Dereferenceable, 5); 39 EXPECT_TRUE(Align4 < Align5); 40 EXPECT_TRUE(Align4 < Deref4); 41 EXPECT_TRUE(Align4 < Deref5); 42 EXPECT_TRUE(Align5 < Deref4); 43 44 AttributeList ASs[] = {AttributeList::get(C, 2, Attribute::ZExt), 45 AttributeList::get(C, 1, Attribute::SExt)}; 46 47 AttributeList SetA = AttributeList::get(C, ASs); 48 AttributeList SetB = SetA.removeAttributes(C, 1, ASs[1]); 49 EXPECT_NE(SetA, SetB); 50 } 51 52 TEST(Attributes, AddAttributes) { 53 LLVMContext C; 54 AttributeList AL; 55 AttrBuilder B; 56 B.addAttribute(Attribute::NoReturn); 57 AL = AL.addAttributes(C, AttributeList::FunctionIndex, AttributeSet::get(C, B)); 58 EXPECT_TRUE(AL.hasFnAttribute(Attribute::NoReturn)); 59 B.clear(); 60 B.addAttribute(Attribute::SExt); 61 AL = AL.addAttributes(C, AttributeList::ReturnIndex, B); 62 EXPECT_TRUE(AL.hasAttribute(AttributeList::ReturnIndex, Attribute::SExt)); 63 EXPECT_TRUE(AL.hasFnAttribute(Attribute::NoReturn)); 64 } 65 66 } // end anonymous namespace 67