Prevent androidmk crash on art/tools/ahat/Android.mk
Because a directive can exist within a rule's recipe, there may not exist an ordering of nodes such that nodes[i].End() <= nodes[i+1].Start() This disables that assertion. Test: androidmk art/tools/ahat/Android.mk Bug: 67906386 Change-Id: I84ea6ebdbc01c1600b1fa188463aae56270f0135
This commit is contained in:
parent
e87ae20e25
commit
af7d3ef81d
2 changed files with 51 additions and 4 deletions
|
@ -80,11 +80,23 @@ func (f *bpFile) addErrorText(message string) {
|
|||
}
|
||||
|
||||
func (f *bpFile) setMkPos(pos, end scanner.Position) {
|
||||
if pos.Line < f.mkPos.Line {
|
||||
panic(fmt.Errorf("out of order lines, %q after %q", pos, f.mkPos))
|
||||
// It is unusual but not forbidden for pos.Line to be smaller than f.mkPos.Line
|
||||
// For example:
|
||||
//
|
||||
// if true # this line is emitted 1st
|
||||
// if true # this line is emitted 2nd
|
||||
// some-target: some-file # this line is emitted 3rd
|
||||
// echo doing something # this recipe is emitted 6th
|
||||
// endif #some comment # this endif is emitted 4th; this comment is part of the recipe
|
||||
// echo doing more stuff # this is part of the recipe
|
||||
// endif # this endif is emitted 5th
|
||||
//
|
||||
// However, if pos.Line < f.mkPos.Line, we treat it as though it were equal
|
||||
if pos.Line >= f.mkPos.Line {
|
||||
f.bpPos.Line += (pos.Line - f.mkPos.Line)
|
||||
f.mkPos = end
|
||||
}
|
||||
f.bpPos.Line += (pos.Line - f.mkPos.Line)
|
||||
f.mkPos = end
|
||||
|
||||
}
|
||||
|
||||
type conditional struct {
|
||||
|
|
|
@ -425,6 +425,41 @@ cc_library_shared {
|
|||
}
|
||||
}`,
|
||||
},
|
||||
{
|
||||
// the important part of this test case is that it confirms that androidmk doesn't
|
||||
// panic in this case
|
||||
desc: "multiple directives inside recipe",
|
||||
in: `
|
||||
ifeq ($(a),true)
|
||||
ifeq ($(b),false)
|
||||
imABuildStatement: somefile
|
||||
echo begin
|
||||
endif # a==true
|
||||
echo middle
|
||||
endif # b==false
|
||||
echo end
|
||||
`,
|
||||
expected: `
|
||||
// ANDROIDMK TRANSLATION ERROR: unsupported conditional
|
||||
// ifeq ($(a),true)
|
||||
|
||||
// ANDROIDMK TRANSLATION ERROR: unsupported conditional
|
||||
// ifeq ($(b),false)
|
||||
|
||||
// ANDROIDMK TRANSLATION ERROR: unsupported line
|
||||
// rule: imABuildStatement: somefile
|
||||
// echo begin
|
||||
// # a==true
|
||||
// echo middle
|
||||
// # b==false
|
||||
// echo end
|
||||
//
|
||||
// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
|
||||
// endif
|
||||
// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
|
||||
// endif
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
func reformatBlueprint(input string) string {
|
||||
|
|
Loading…
Reference in a new issue