I just noticed that although the aria-label, aria-labelledby and aria-describedby attributes are said to work on every element (see https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedby), they only seem to work for a few elements like a, and not for e.g. div or p in NVDA and JAWS.
I have created a small codepen to demonstrate the issue (browse it using browse and focus mode):
https://codepen.io/jmuheim/pen/avWbPe
For example, in NVDA, on the a element, the aria-label and aria-labelledby seem to work in both browse and focus mode. But aria-describedby is only announced in focus mode, not in browse mode.
For the input element, none of the attributes seem to work in browse mode, but all work in focus mode.
For "bare" text elements like p or div, none of the attributes seem to work.
In JAWS, it's quite similar behaviour, but at least for the p element, when there is an aria-describedby, it announces that a description can be read by pressing "JAWS + alt + r".
I don't really see a clear pattern for this, so I wonder what are the general rules in screenreaders on how to use these attributes? Or better: why don't they simply work for every element, as the spec proposes?