Skip to content

Commit 1869215

Browse files
committed
Fix string constant options
1 parent 7f1d0c5 commit 1869215

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

src/Xamarin.Android.Build.Tasks/Utilities/LlvmIrGenerator/LlvmIrGenerator.cs

+20-3
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ void WriteStrings (GeneratorWriteContext context)
205205
WriteCommentLine (context, $" '{info.Value}'");
206206
}
207207

208-
WriteGlobalVariableStart (context, info);
208+
WriteGlobalVariableName (context, info);
209+
210+
// Strings must always be local symbols, global variables will point to them
211+
WriteVariableOptions (context, LlvmIrVariableOptions.LocalString);
209212
context.Output.Write ('[');
210213
context.Output.Write (size.ToString (CultureInfo.InvariantCulture));
211214
context.Output.Write ($" x {info.IrType}] ");
@@ -253,23 +256,37 @@ void WriteGlobalVariables (GeneratorWriteContext context)
253256
}
254257
}
255258

256-
void WriteGlobalVariableStart (GeneratorWriteContext context, LlvmIrGlobalVariable variable)
259+
void WriteGlobalVariableName (GeneratorWriteContext context, LlvmIrGlobalVariable variable)
257260
{
258261
if (!String.IsNullOrEmpty (variable.Comment)) {
259262
WriteCommentLine (context, variable.Comment);
260263
}
261264
context.Output.Write ('@');
262265
context.Output.Write (variable.Name);
263266
context.Output.Write (" = ");
267+
}
264268

265-
LlvmIrVariableOptions options = variable.Options ?? LlvmIrGlobalVariable.DefaultOptions;
269+
void WriteVariableOptions (GeneratorWriteContext context, LlvmIrVariableOptions options)
270+
{
266271
WriteLinkage (context, options.Linkage);
267272
WritePreemptionSpecifier (context, options.RuntimePreemption);
268273
WriteVisibility (context, options.Visibility);
269274
WriteAddressSignificance (context, options.AddressSignificance);
270275
WriteWritability (context, options.Writability);
271276
}
272277

278+
void WriteVariableOptions (GeneratorWriteContext context, LlvmIrGlobalVariable variable, LlvmIrVariableOptions? defaultOptions = null)
279+
{
280+
LlvmIrVariableOptions options = variable.Options ?? defaultOptions ?? LlvmIrGlobalVariable.DefaultOptions;
281+
WriteVariableOptions (context, options);
282+
}
283+
284+
void WriteGlobalVariableStart (GeneratorWriteContext context, LlvmIrGlobalVariable variable)
285+
{
286+
WriteGlobalVariableName (context, variable);
287+
WriteVariableOptions (context, variable, LlvmIrGlobalVariable.DefaultOptions);
288+
}
289+
273290
void WriteGlobalVariable (GeneratorWriteContext context, LlvmIrGlobalVariable variable)
274291
{
275292
if (!context.InVariableGroup) {

src/Xamarin.Android.Build.Tasks/Utilities/LlvmIrGenerator/LlvmIrModule.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ public LlvmIrGlobalVariable AddGlobalVariable (Type type, string name, object? v
272272
LlvmIrGlobalVariable ret;
273273
if (type == typeof(string)) {
274274
// The cast to `string?` is intentionally meant to throw if `value` type isn't a string.
275-
ret = new LlvmIrStringVariable (name, new StringHolder ((string?)value)) {
275+
ret = new LlvmIrStringVariable (name, new StringHolder ((string?)value), options) {
276276
Comment = comment,
277277
};
278278
AddStringGlobalVariable ((LlvmIrStringVariable)ret);

src/Xamarin.Android.Build.Tasks/Utilities/LlvmIrGenerator/LlvmIrVariable.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ class LlvmIrStringVariable : LlvmIrGlobalVariable
302302
public bool IsConstantStringLiteral { get; }
303303

304304
public LlvmIrStringVariable (string name, StringHolder value, LlvmIrVariableOptions? options = null)
305-
: base (typeof(string), name, options ?? LlvmIrVariableOptions.GlobalConstexprString)
305+
: base (typeof(string), name, options ?? LlvmIrVariableOptions.GlobalConstantStringPointer)
306306
{
307307
Value = value;
308308
Encoding = value.Encoding;

0 commit comments

Comments
 (0)