Bug #3959
closed
Spurious warning: the attribute axis starting at a text node will never select anything
Fix Committed on Branch:
9.9
Fixed in Maintenance Release:
Description
This arises in the XSLT 3.0 test driver written in XSLT (runner/compare.xsl in the W3C test suite). The following two messages appear:
Warning at char 5 in xsl:copy-of/@select on line 156 column 50 of compare.xsl:
SXWN9000: The attribute axis starting at a text node will never select anything
Warning at char 5 in xsl:copy-of/@select on line 161 column 50 of compare.xsl:
SXWN9000: The attribute axis starting at a text node will never select anything
There are two problems:
(a) the messages appear repeatedly; warnings should only appear once.
(b) there's nothing wrong with the code in question. Line 156 is the xsl:copy-of instruction in
<d:_1>
<xsl:copy select="$a">
<xsl:copy-of select="$a/@*"/>
</xsl:copy>
</d:_1>
where $a has a declared type of node()?
.
The reason for the warning is that the function has been inlined; although $a is declared as node()?
, in a particular invocation (from line 50) the supplied value is known to be a text node, and the calling function is being type-checked after inlining of the called function.
The reason for the multiple warnings, similarly, is that the function has been inlined by several callers and each one is being typechecked independently.
The AxisExpression has flags doneTypeCheck and doneOptimize designed to prevent multiple warnings, but it looks like the expression was copied (during inlining) before these flags were set, and so the flags are false on each copy of the expression, and once this has happened there is no remaining connection between the multiple instances.
- Status changed from New to Resolved
- Priority changed from Low to Normal
- Applies to branch 9.9 added
- Fix Committed on Branch 9.9 added
I have fixed the spurious warnings by adding a flag in ExpressionVisitor that allows warnings to be suppressed, and setting this flag while doing the second type-checking of an inlined function.
While I was at it, I added an optimization rewrite so xsl:copy is replaced by xsl:copy-of if the type is known to be a childless node kind; this causes the body of the xsl:copy to be discarded, which can pave the way for further optimizations, for example if it means that variables are now unreferenced.
- Status changed from Resolved to Closed
- % Done changed from 0 to 100
- Fixed in Maintenance Release 9.9.0.2 added
Bug fix applied to the Saxon 9.9.0.2 maintenance release.
Please register to edit this issue
Also available in: Atom
PDF