diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -245,6 +245,9 @@ void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr, SMLoc Loc = SMLoc()) override; + void emitAlignmentDirective(unsigned ByteAlignment, Optional Value, + unsigned ValueSize, unsigned MaxBytesToEmit); + void emitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0, unsigned ValueSize = 1, unsigned MaxBytesToEmit = 0) override; @@ -1394,9 +1397,10 @@ EmitEOL(); } -void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value, - unsigned ValueSize, - unsigned MaxBytesToEmit) { +void MCAsmStreamer::emitAlignmentDirective(unsigned ByteAlignment, + Optional Value, + unsigned ValueSize, + unsigned MaxBytesToEmit) { if (MAI->useDotAlignForAlignment()) { if (!isPowerOf2_32(ByteAlignment)) report_fatal_error("Only power-of-two alignments are supported " @@ -1428,9 +1432,13 @@ OS << Log2_32(ByteAlignment); - if (Value || MaxBytesToEmit) { - OS << ", 0x"; - OS.write_hex(truncateToSize(Value, ValueSize)); + if (Value.has_value() || MaxBytesToEmit) { + if (Value.has_value()) { + OS << ", 0x"; + OS.write_hex(truncateToSize(Value.value(), ValueSize)); + } else { + OS << ", "; + } if (MaxBytesToEmit) OS << ", " << MaxBytesToEmit; @@ -1450,18 +1458,30 @@ } OS << ' ' << ByteAlignment; - OS << ", " << truncateToSize(Value, ValueSize); + if (Value.has_value()) + OS << ", " << truncateToSize(Value.value(), ValueSize); + else if (MaxBytesToEmit) + OS << ", "; if (MaxBytesToEmit) OS << ", " << MaxBytesToEmit; EmitEOL(); } +void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value, + unsigned ValueSize, + unsigned MaxBytesToEmit) { + emitAlignmentDirective(ByteAlignment, Value, ValueSize, MaxBytesToEmit); +} + void MCAsmStreamer::emitCodeAlignment(unsigned ByteAlignment, const MCSubtargetInfo *STI, unsigned MaxBytesToEmit) { // Emit with a text fill value. - emitValueToAlignment(ByteAlignment, MAI->getTextAlignFillValue(), - 1, MaxBytesToEmit); + if (MAI->getTextAlignFillValue()) + emitAlignmentDirective(ByteAlignment, MAI->getTextAlignFillValue(), 1, + MaxBytesToEmit); + else + emitAlignmentDirective(ByteAlignment, None, 1, MaxBytesToEmit); } void MCAsmStreamer::emitValueToOffset(const MCExpr *Offset, diff --git a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll --- a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll +++ b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll @@ -14,12 +14,12 @@ define i32 @a(i32 %x, i32* nocapture readonly %y, i32* nocapture readonly %z) { ; CHECK-DEFAULT: .p2align 5 -; CHECK-8: .p2align 4, 0x0, 8 -; CHECK-16: .p2align 5, 0x0, 16 +; CHECK-8: .p2align 4, , 8 +; CHECK-16: .p2align 5, , 16 ; CHECK-NEXT: .LBB0_5: // %vector.body ; CHECK-DEFAULT: .p2align 5 -; CHECK-8: .p2align 4, 0x0, 8 -; CHECK-16: .p2align 5, 0x0, 16 +; CHECK-8: .p2align 4, , 8 +; CHECK-16: .p2align 5, , 16 ; CHECK-NEXT: .LBB0_8: // %for.body entry: %cmp10 = icmp sgt i32 %x, 0 diff --git a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll --- a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll +++ b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll @@ -9,10 +9,10 @@ ; should be the same, at different locations) define i32 @a(i32 %x, i32* nocapture readonly %y, i32* nocapture readonly %z) { ; CHECK-LABEL: a: -; CHECK-EXPLICIT: .p2align 5, 0x0, 8 +; CHECK-EXPLICIT: .p2align 5, , 8 ; CHECK-IMPLICIT: .p2align 5 ; CHECK-NEXT: .LBB0_5: // %vector.body -; CHECK-EXPLICIT: .p2align 5, 0x0, 8 +; CHECK-EXPLICIT: .p2align 5, , 8 ; CHECK-IMPLICIT: .p2align 5 ; CHECK-NEXT: .LBB0_8: // %for.body ; CHECK-OBJ;Disassembly of section .text: diff --git a/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll b/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll --- a/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll +++ b/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll @@ -9,7 +9,7 @@ ; DEFAULT: // %bb.0: // %entry ; DEFAULT-NEXT: fmov v0.2d, #2.00000000 ; DEFAULT-NEXT: add x8, x0, #64 -; DEFAULT-NEXT: .p2align 4, 0x0, 8 +; DEFAULT-NEXT: .p2align 4, , 8 ; DEFAULT-NEXT: .LBB0_1: // %vector.body ; DEFAULT-NEXT: // =>This Inner Loop Header: Depth=1 ; DEFAULT-NEXT: stur q0, [x8, #-64] @@ -30,7 +30,7 @@ ; ASCEND: // %bb.0: // %entry ; ASCEND-NEXT: fmov v0.2d, #2.00000000 ; ASCEND-NEXT: add x8, x0, #64 -; ASCEND-NEXT: .p2align 4, 0x0, 8 +; ASCEND-NEXT: .p2align 4, , 8 ; ASCEND-NEXT: .LBB0_1: // %vector.body ; ASCEND-NEXT: // =>This Inner Loop Header: Depth=1 ; ASCEND-NEXT: stur q0, [x8, #-64] diff --git a/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll b/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll --- a/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll +++ b/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll @@ -8,7 +8,7 @@ target triple = "arm64-apple-ios14.0.0" define [1 x <4 x float>] @test1() { -; CHECK-LABEL: .p2align 4 ; -- Begin function test1 +; CHECK-LABEL: .p2align 4, 0x0 ; -- Begin function test1 ; CHECK-NEXT: lCPI0_0: ; CHECK-NEXT: .quad 0 ; 0x0 ; CHECK-NEXT: .quad 4575657221408423936 ; 0x3f80000000000000 @@ -28,7 +28,7 @@ } define [1 x <4 x float>] @test2() { -; CHECK-LABEL: .p2align 4 ; -- Begin function test2 +; CHECK-LABEL: .p2align 4, 0x0 ; -- Begin function test2 ; CHECK-NEXT: lCPI1_0: ; CHECK-NEXT: .long 0x00000000 ; float 0 ; CHECK-NEXT: .long 0x00000000 ; float 0 diff --git a/llvm/test/CodeGen/AArch64/merge-store-dependency.ll b/llvm/test/CodeGen/AArch64/merge-store-dependency.ll --- a/llvm/test/CodeGen/AArch64/merge-store-dependency.ll +++ b/llvm/test/CodeGen/AArch64/merge-store-dependency.ll @@ -36,7 +36,7 @@ ; A53-NEXT: // %bb.1: ; A53-NEXT: ldr w8, [x19] ; A53-NEXT: ldr w9, [x9] -; A53-NEXT: .p2align 4, 0x0, 8 +; A53-NEXT: .p2align 4, , 8 ; A53-NEXT: .LBB0_2: // %while.body.i.split.ver.us ; A53-NEXT: // =>This Inner Loop Header: Depth=1 ; A53-NEXT: lsl w9, w9, #1 @@ -51,7 +51,7 @@ ; A53-NEXT: .cfi_restore w19 ; A53-NEXT: .cfi_restore w30 ; A53-NEXT: ret -; A53-NEXT: .p2align 4, 0x0, 8 +; A53-NEXT: .p2align 4, , 8 ; A53-NEXT: .LBB0_4: // %while.body.i.split ; A53-NEXT: // =>This Inner Loop Header: Depth=1 ; A53-NEXT: .cfi_restore_state diff --git a/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll b/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll @@ -0,0 +1,8 @@ +; RUN: llc -mtriple=aarch64 < %s -o - | FileCheck %s + +%struct.A = type { i8, i32 } +@foo = dso_local global %struct.A zeroinitializer, align 4 + +; CHECK: .bss +; CHECK-NEXT: .globl foo +; CHECK-NEXT: .p2align 2, 0x0{{$}} diff --git a/llvm/test/CodeGen/ARM/byval_load_align.ll b/llvm/test/CodeGen/ARM/byval_load_align.ll --- a/llvm/test/CodeGen/ARM/byval_load_align.ll +++ b/llvm/test/CodeGen/ARM/byval_load_align.ll @@ -7,7 +7,7 @@ ; CHECK: ldr r2, [r[[REG]], #4] ; CHECK: ldr r3, [r[[REG]], #8] ; CHECK-NOT: ldm -; CHECK: .p2align 1 @ @sID +; CHECK: .p2align 1, 0x0 @ @sID %struct.ModuleID = type { [32 x i8], [32 x i8], i16 } diff --git a/llvm/test/CodeGen/WebAssembly/global.ll b/llvm/test/CodeGen/WebAssembly/global.ll --- a/llvm/test/CodeGen/WebAssembly/global.ll +++ b/llvm/test/CodeGen/WebAssembly/global.ll @@ -29,7 +29,7 @@ } ; CHECK: .type .Lg,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: .Lg: ; CHECK-NEXT: .int32 1337{{$}} ; CHECK-NEXT: .size .Lg, 4{{$}} @@ -41,140 +41,140 @@ @ud = internal global i32 undef ; CHECK: .type nil,@object -; CHECK: .p2align 2 +; CHECK: .p2align 2, 0x0 ; CHECK: nil: ; CHECK: .int32 0 ; CHECK: .size nil, 4 @nil = internal global i32 zeroinitializer ; CHECK: .type z,@object -; CHECK: .p2align 2 +; CHECK: .p2align 2, 0x0 ; CHECK: z: ; CHECK: .int32 0 ; CHECK: .size z, 4 @z = internal global i32 0 ; CHECK: .type one,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: one: ; CHECK-NEXT: .int32 1{{$}} ; CHECK-NEXT: .size one, 4{{$}} @one = internal global i32 1 ; CHECK: .type answer,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: answer: ; CHECK-NEXT: .int32 42{{$}} ; CHECK-NEXT: .size answer, 4{{$}} @answer = internal global i32 42 ; CHECK: .type u32max,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: u32max: ; CHECK-NEXT: .int32 4294967295{{$}} ; CHECK-NEXT: .size u32max, 4{{$}} @u32max = internal global i32 -1 ; CHECK: .type ud64,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: ud64: ; CHECK-NEXT: .skip 8{{$}} ; CHECK-NEXT: .size ud64, 8{{$}} @ud64 = internal global i64 undef ; CHECK: .type nil64,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: nil64: ; CHECK-NEXT: .int64 0{{$}} ; CHECK-NEXT: .size nil64, 8{{$}} @nil64 = internal global i64 zeroinitializer ; CHECK: .type z64,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: z64: ; CHECK-NEXT: .int64 0{{$}} ; CHECK-NEXT: .size z64, 8{{$}} @z64 = internal global i64 0 ; CHECK: .type twoP32,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: twoP32: ; CHECK-NEXT: .int64 4294967296{{$}} ; CHECK-NEXT: .size twoP32, 8{{$}} @twoP32 = internal global i64 4294967296 ; CHECK: .type u64max,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: u64max: ; CHECK-NEXT: .int64 -1{{$}} ; CHECK-NEXT: .size u64max, 8{{$}} @u64max = internal global i64 -1 ; CHECK: .type f32ud,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: f32ud: ; CHECK-NEXT: .skip 4{{$}} ; CHECK-NEXT: .size f32ud, 4{{$}} @f32ud = internal global float undef ; CHECK: .type f32nil,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: f32nil: ; CHECK-NEXT: .int32 0x00000000{{$}} ; CHECK-NEXT: .size f32nil, 4{{$}} @f32nil = internal global float zeroinitializer ; CHECK: .type f32z,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: f32z: ; CHECK-NEXT: .int32 0x00000000{{$}} ; CHECK-NEXT: .size f32z, 4{{$}} @f32z = internal global float 0.0 ; CHECK: .type f32nz,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK: f32nz: ; CHECK: .int32 0x80000000{{$}} ; CHECK: .size f32nz, 4{{$}} @f32nz = internal global float -0.0 ; CHECK: .type f32two,@object -; CHECK: .p2align 2{{$}} +; CHECK: .p2align 2, 0x0{{$}} ; CHECK-NEXT: f32two: ; CHECK-NEXT: .int32 0x40000000{{$}} ; CHECK-NEXT: .size f32two, 4{{$}} @f32two = internal global float 2.0 ; CHECK: .type f64ud,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: f64ud: ; CHECK-NEXT: .skip 8{{$}} ; CHECK-NEXT: .size f64ud, 8{{$}} @f64ud = internal global double undef ; CHECK: .type f64nil,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: f64nil: ; CHECK-NEXT: .int64 0x0000000000000000{{$}} ; CHECK-NEXT: .size f64nil, 8{{$}} @f64nil = internal global double zeroinitializer ; CHECK: .type f64z,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: f64z: ; CHECK-NEXT: .int64 0x0000000000000000{{$}} ; CHECK-NEXT: .size f64z, 8{{$}} @f64z = internal global double 0.0 ; CHECK: .type f64nz,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: f64nz: ; CHECK-NEXT: .int64 0x8000000000000000{{$}} ; CHECK-NEXT: .size f64nz, 8{{$}} @f64nz = internal global double -0.0 ; CHECK: .type f64two,@object -; CHECK: .p2align 3{{$}} +; CHECK: .p2align 3, 0x0{{$}} ; CHECK-NEXT: f64two: ; CHECK-NEXT: .int64 0x4000000000000000{{$}} ; CHECK-NEXT: .size f64two, 8{{$}} @@ -193,7 +193,7 @@ ; CHECK: .type rom,@object{{$}} ; CHECK: .section .rodata.rom,"" ; CHECK: .globl rom{{$}} -; CHECK: .p2align 4{{$}} +; CHECK: .p2align 4, 0x0{{$}} ; CHECK: rom: ; CHECK: .skip 512{{$}} ; CHECK: .size rom, 512{{$}} @@ -206,7 +206,7 @@ ; CHECK: .type pointer_to_array,@object ; CHECK-NEXT: .section .rodata.pointer_to_array,"" ; CHECK-NEXT: .globl pointer_to_array -; CHECK-NEXT: .p2align 2 +; CHECK-NEXT: .p2align 2, 0x0 ; CHECK-NEXT: pointer_to_array: ; CHECK-NEXT: .int32 array+4 ; CHECK-NEXT: .size pointer_to_array, 4 diff --git a/llvm/test/DebugInfo/COFF/globals.ll b/llvm/test/DebugInfo/COFF/globals.ll --- a/llvm/test/DebugInfo/COFF/globals.ll +++ b/llvm/test/DebugInfo/COFF/globals.ll @@ -48,7 +48,7 @@ ; $ clang-cl a.cpp /c /GS- /Z7 /GR- /std:c++17 /clang:-S /clang:-emit-llvm ; ASM: .section .debug$S,"dr" -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM-NEXT: .long 4 # Debug section magic ; ASM: .short 4365 # Record kind: S_GDATA32 @@ -56,70 +56,70 @@ ; ASM-NEXT: .secrel32 "?first@@3HA" # DataOffset ; ASM-NEXT: .secidx "?first@@3HA" # Segment ; ASM-NEXT: .asciz "first" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4371 # Record kind: S_GTHREAD32 ; ASM-NEXT: .long 4117 # Type ; ASM-NEXT: .secrel32 "?middle@@3PEBHEB" # DataOffset ; ASM-NEXT: .secidx "?middle@@3PEBHEB" # Segment ; ASM-NEXT: .asciz "middle" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4371 # Record kind: S_GTHREAD32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?globalTLS@foo@@3HA" # DataOffset ; ASM-NEXT: .secidx "?globalTLS@foo@@3HA" # Segment ; ASM-NEXT: .asciz "foo::globalTLS" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4365 # Record kind: S_GDATA32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?justGlobal@foo@@3HA" # DataOffset ; ASM-NEXT: .secidx "?justGlobal@foo@@3HA" # Segment ; ASM-NEXT: .asciz "foo::justGlobal" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4365 # Record kind: S_GDATA32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?last@@3HA" # DataOffset ; ASM-NEXT: .secidx "?last@@3HA" # Segment ; ASM-NEXT: .asciz "last" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4359 # Record kind: S_CONSTANT ; ASM-NEXT: .long 4100 # Type ; ASM-NEXT: .byte 0x08, 0x00 # Value ; ASM-NEXT: .asciz "foo::constExpr" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4359 # Record kind: S_CONSTANT ; ASM-NEXT: .long 4100 # Type ; ASM-NEXT: .byte 0x09, 0x00 # Value ; ASM-NEXT: .asciz "foo::constVal" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4359 # Record kind: S_CONSTANT ; ASM-NEXT: .long 4100 # Type ; ASM-NEXT: .byte 0x0e, 0x00 # Value ; ASM-NEXT: .asciz "foo::Data::DataConstExpr" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4364 # Record kind: S_LDATA32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?globalStatic@foo@@3HA" # DataOffset ; ASM-NEXT: .secidx "?globalStatic@foo@@3HA" # Segment ; ASM-NEXT: .asciz "foo::globalStatic" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .short 4370 # Record kind: S_LTHREAD32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?staticTLS@foo@@3HA" # DataOffset ; ASM-NEXT: .secidx "?staticTLS@foo@@3HA" # Segment ; ASM-NEXT: .asciz "foo::staticTLS" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .section .debug$S,"dr",associative,"?comdat@?$A@X@@2HB" -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM-NEXT: .long 4 # Debug section magic ; ASM: .short 4365 # Record kind: S_GDATA32 @@ -129,24 +129,24 @@ ; ASM-NEXT: .asciz "A::comdat" # Name ; ASM: .section .debug$S,"dr",associative,"?DataStaticTLS@Data@foo@@2HA" -; ASM-NEXT: .p2align 2 # Symbol subsection for ?DataStaticTLS@Data@foo@@2HA +; ASM-NEXT: .p2align 2, 0x0 # Symbol subsection for ?DataStaticTLS@Data@foo@@2HA ; ASM: .short 4371 # Record kind: S_GTHREAD32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?DataStaticTLS@Data@foo@@2HA" # DataOffset ; ASM-NEXT: .secidx "?DataStaticTLS@Data@foo@@2HA" # Segment ; ASM-NEXT: .asciz "foo::Data::DataStaticTLS" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; ASM: .section .debug$S,"dr",associative,"?DataStatic@Data@foo@@2HA" -; ASM-NEXT: .p2align 2 # Symbol subsection for ?DataStatic@Data@foo@@2HA +; ASM-NEXT: .p2align 2, 0x0 # Symbol subsection for ?DataStatic@Data@foo@@2HA ; ASM: .short 4365 # Record kind: S_GDATA32 ; ASM-NEXT: .long 116 # Type ; ASM-NEXT: .secrel32 "?DataStatic@Data@foo@@2HA" # DataOffset ; ASM-NEXT: .secidx "?DataStatic@Data@foo@@2HA" # Segment ; ASM-NEXT: .asciz "foo::Data::DataStatic" # Name -; ASM-NEXT: .p2align 2 +; ASM-NEXT: .p2align 2, 0x0 ; OBJ: CodeViewDebugInfo [ ; OBJ: Section: .debug$S