diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2017-11-20 17:12:18 +0000 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2017-11-21 15:07:14 +1100 |
commit | b260c4f610c004c6e9e36c5f7bbb58d23e605bf1 (patch) | |
tree | 0179714525d0f72848d9f8d3dffcb497b9df0714 /dtc-parser.y | |
parent | fe667e382bac9326eaea304da2ade5ecb10997d3 (diff) | |
download | dtc-b260c4f610c004c6e9e36c5f7bbb58d23e605bf1.zip dtc-b260c4f610c004c6e9e36c5f7bbb58d23e605bf1.tar.gz dtc-b260c4f610c004c6e9e36c5f7bbb58d23e605bf1.tar.bz2 |
Fix ambiguous grammar for devicetree rule
Commit 737b2df3, "overlay: Add syntactic sugar version of overlays"
introduced an empty rule for "devicetree" that created ambiguities in
the grammar and causes the following warning:
BISON dtc-parser.tab.c
dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
Fix the grammar by explicitly testing for the condition the
new overlay grammar wants to use. This means duplicating a very small
amount of grammar processing code, but the alternative seems to be a
more invasive reorganization of the devicetree rule. Better to fix it
this way now and save the reorg for a separate patch.
Signed-off-by: Grant Likely <grant.likely@arm.com>
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'dtc-parser.y')
-rw-r--r-- | dtc-parser.y | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/dtc-parser.y b/dtc-parser.y index affc81a..44af170 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -166,7 +166,17 @@ devicetree: { $$ = merge_nodes($1, $3); } - + | DT_REF nodedef + { + /* + * We rely on the rule being always: + * versioninfo plugindecl memreserves devicetree + * so $-1 is what we want (plugindecl) + */ + if (!($<flags>-1 & DTSF_PLUGIN)) + ERROR(&@2, "Label or path %s not found", $1); + $$ = add_orphan_node(name_node(build_node(NULL, NULL), ""), $2, $1); + } | devicetree DT_LABEL DT_REF nodedef { struct node *target = get_node_by_ref($1, $3); @@ -209,11 +219,6 @@ devicetree: $$ = $1; } - | /* empty */ - { - /* build empty node */ - $$ = name_node(build_node(NULL, NULL), ""); - } ; nodedef: |