Skip to content

Commit 65e90c5

Browse files
committed
Use known int attribute 'alignstack' instead of attribute with id rust-lang#1.
LLVM will assert if stack alignment is not a power of 2. Switch value to 16. Fixes rust-lang#73.
1 parent 0d7a64e commit 65e90c5

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

Diff for: tests/all/test_attributes.rs

+13-11
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ fn test_attributes_on_function_values() {
107107
let fn_value = module.add_function("my_fn", fn_type, None);
108108
let entry_bb = fn_value.append_basic_block("entry");
109109
let string_attribute = context.create_string_attribute("my_key", "my_val");
110-
let enum_attribute = context.create_enum_attribute(1, 1);
110+
let alignstack_attribute = Attribute::get_named_enum_kind_id("alignstack");
111+
let enum_attribute = context.create_enum_attribute(alignstack_attribute, 1);
111112

112113
builder.position_at_end(&entry_bb);
113114
builder.build_return(None);
@@ -116,25 +117,25 @@ fn test_attributes_on_function_values() {
116117
assert_eq!(fn_value.count_attributes(1), 0);
117118

118119
fn_value.remove_string_attribute(0, "my_key"); // Noop
119-
fn_value.remove_enum_attribute(0, 1); // Noop
120+
fn_value.remove_enum_attribute(0, alignstack_attribute); // Noop
120121

121122
// define align 1 "my_key"="my_val" void @my_fn()
122123
fn_value.add_attribute(0, string_attribute);
123124
fn_value.add_attribute(1, string_attribute); // Applied to 1st param
124125
fn_value.add_attribute(0, enum_attribute);
125126

126127
assert_eq!(fn_value.count_attributes(0), 2);
127-
assert_eq!(fn_value.get_enum_attribute(0, 1), Some(enum_attribute));
128+
assert_eq!(fn_value.get_enum_attribute(0, alignstack_attribute), Some(enum_attribute));
128129
assert_eq!(fn_value.get_string_attribute(0, "my_key"), Some(string_attribute));
129130

130131
fn_value.remove_string_attribute(0, "my_key");
131132

132133
assert_eq!(fn_value.count_attributes(0), 1);
133134

134-
fn_value.remove_enum_attribute(0, 1);
135+
fn_value.remove_enum_attribute(0, alignstack_attribute);
135136

136137
assert_eq!(fn_value.count_attributes(0), 0);
137-
assert!(fn_value.get_enum_attribute(0, 1).is_none());
138+
assert!(fn_value.get_enum_attribute(0, alignstack_attribute).is_none());
138139
assert!(fn_value.get_string_attribute(0, "my_key").is_none());
139140
}
140141

@@ -149,7 +150,8 @@ fn test_attributes_on_call_site_values() {
149150
let fn_value = module.add_function("my_fn", fn_type, None);
150151
let entry_bb = fn_value.append_basic_block("entry");
151152
let string_attribute = context.create_string_attribute("my_key", "my_val");
152-
let enum_attribute = context.create_enum_attribute(1, 1);
153+
let alignstack_attribute = Attribute::get_named_enum_kind_id("alignstack");
154+
let enum_attribute = context.create_enum_attribute(alignstack_attribute, 1);
153155

154156
builder.position_at_end(&entry_bb);
155157

@@ -162,29 +164,29 @@ fn test_attributes_on_call_site_values() {
162164
assert_eq!(call_site_value.count_attributes(1), 0);
163165

164166
call_site_value.remove_string_attribute(0, "my_key"); // Noop
165-
call_site_value.remove_enum_attribute(0, 1); // Noop
167+
call_site_value.remove_enum_attribute(0, alignstack_attribute); // Noop
166168

167169
// define align 1 "my_key"="my_val" void @my_fn()
168170
call_site_value.add_attribute(0, string_attribute);
169171
call_site_value.add_attribute(1, string_attribute); // Applied to 1st param
170172
call_site_value.add_attribute(0, enum_attribute);
171173

172174
assert_eq!(call_site_value.count_attributes(0), 2);
173-
assert_eq!(call_site_value.get_enum_attribute(0, 1), Some(enum_attribute));
175+
assert_eq!(call_site_value.get_enum_attribute(0, alignstack_attribute), Some(enum_attribute));
174176
assert_eq!(call_site_value.get_string_attribute(0, "my_key"), Some(string_attribute));
175177

176178
call_site_value.remove_string_attribute(0, "my_key");
177179

178180
assert_eq!(call_site_value.count_attributes(0), 1);
179181

180-
call_site_value.remove_enum_attribute(0, 1);
182+
call_site_value.remove_enum_attribute(0, alignstack_attribute);
181183

182184
assert_eq!(call_site_value.count_attributes(0), 0);
183-
assert!(call_site_value.get_enum_attribute(0, 1).is_none());
185+
assert!(call_site_value.get_enum_attribute(0, alignstack_attribute).is_none());
184186
assert!(call_site_value.get_string_attribute(0, "my_key").is_none());
185187
assert_eq!(call_site_value.get_called_fn_value(), fn_value);
186188

187-
call_site_value.set_param_alignment_attribute(0, 12);
189+
call_site_value.set_param_alignment_attribute(0, 16);
188190

189191
assert_eq!(call_site_value.count_attributes(0), 1);
190192
assert!(call_site_value.get_enum_attribute(0, 1).is_some());

0 commit comments

Comments
 (0)