From 00afd4f8b92b47e051ca30f8e1180c0de25c4136 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 26 Apr 2022 14:01:56 -0700 Subject: [PATCH] Ignore variable assignments that come after a rule definition These private variables sometimes have references to make variables like $< or $@. When converted to starlark, they become invalid local variables like _< and _@, preventing the file from being loaded even if it's never executed. Bug: 226974242 Test: go test Change-Id: Iafd4c6939731f3b7c051c9e41464134d5b672f23 --- mk2rbc/mk2rbc.go | 2 +- mk2rbc/mk2rbc_test.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 8f4fea4b1..d4da4f523 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -531,7 +531,7 @@ func (ctx *parseContext) backNode() { func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode { // Handle only simple variables - if !a.Name.Const() { + if !a.Name.Const() || a.Target != nil { return []starlarkNode{ctx.newBadNode(a, "Only simple variables are handled")} } name := a.Name.Strings[0] diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index de7512927..6887ca482 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -1242,13 +1242,15 @@ def init(g, handle): desc: "Ignore make rules", mkname: "product.mk", in: ` +foo: PRIVATE_VARIABLE = some_tool $< $@ foo: foo.c gcc -o $@ $*`, expected: `load("//build/make/core:product_config.rbc", "rblf") def init(g, handle): cfg = rblf.cfg(handle) - rblf.mk2rbc_error("product.mk:2", "unsupported line rule: foo: foo.c\n#gcc -o $@ $*") + rblf.mk2rbc_error("product.mk:2", "Only simple variables are handled") + rblf.mk2rbc_error("product.mk:3", "unsupported line rule: foo: foo.c\n#gcc -o $@ $*") `, }, {