On Tue, May 28, 2019 at 1:57 AM Jakub Jelinek <ja...@redhat.com> wrote: > > On Sat, Feb 16, 2019 at 07:02:11AM -0800, H.J. Lu wrote: > > > For NOTE_INSN_DELETED_LABEL, we should check if forced_labels to see > > > if its address is taken. Also ix86_init_large_pic_reg shouldn't set > > > LABEL_PRESERVE_P (in_struct) since NOTE_INSN_DELETED_LABEL is suffcient > > > to keep the label. > > Can you explain when is it ever needed to emit ENDBR on > NOTE_INSN_DELETED_LABEL? Only labels that are proven not to be ever > branched to are turned into deleted labels, so I think the right answer is > never emit any ENDBR on those... >
This condition is checked by gcc.target/i386/cet-label-5.c in the patch. For void * func (void) { return &&bar; bar: return 0; } we generate: (note/s 4 2 10 2 ("bar") NOTE_INSN_DELETED_LABEL 2) (insn:TI 10 4 11 2 (set (reg/i:DI 0 ax) (label_ref:DI [4 deleted])) "/export/gnu/import/git/gitlab/x86-gcc/gcc/testsuite/gcc.target/i386/cet-label-5.c":13:1 66 {*movdi_internal} (nil)) (insn 11 10 20 2 (use (reg/i:DI 0 ax)) "/export/gnu/import/git/gitlab/x86-gcc/gcc/testsuite/gcc.target/i386/cet-label-5.c":13:1 -1 (nil)) -- H.J.