Merge "Prevent androidmk crash on art/tools/ahat/Android.mk"

am: 5c617cc6d1

Change-Id: I0f9888b622c80183087972936476f9818198c2de
This commit is contained in:
Jeff Gaston
2017-10-19 23:15:40 +00:00
committed by android-build-merger
2 changed files with 51 additions and 4 deletions

View File

@@ -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 {

View File

@@ -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 {