Fix crash in AttributeList::addAttributes, add test
authorReid Kleckner <rnk@google.com>
Tue, 18 Apr 2017 22:10:18 +0000 (22:10 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 18 Apr 2017 22:10:18 +0000 (22:10 +0000)
llvm-svn: 300614

llvm/lib/IR/Attributes.cpp
llvm/unittests/IR/AttributesTest.cpp

index 2b7359d..3da00ad 100644 (file)
@@ -988,6 +988,9 @@ AttributeList AttributeList::addAttributes(LLVMContext &C, unsigned Index,
   if (!AS.hasAttributes())
     return *this;
 
+  if (!pImpl)
+    return AttributeList::get(C, {{Index, AS}});
+
 #ifndef NDEBUG
   // FIXME it is not obvious how this should work for alignment. For now, say
   // we can't change a known alignment.
index b5b221c..c9c8cb7 100644 (file)
@@ -49,4 +49,13 @@ TEST(Attributes, Ordering) {
   EXPECT_NE(SetA, SetB);
 }
 
+TEST(Attributes, AddAttributes) {
+  LLVMContext C;
+  AttributeList AL;
+  AttrBuilder B;
+  B.addAttribute(Attribute::NoReturn);
+  AL = AL.addAttributes(C, AttributeList::FunctionIndex, AttributeSet::get(C, B));
+  EXPECT_TRUE(AL.hasFnAttribute(Attribute::NoReturn));
+}
+
 } // end anonymous namespace