diff options
author | Sasha Smundak <asmundak@google.com> | 2019-03-08 15:43:26 -0800 |
---|---|---|
committer | Sasha Smundak <asmundak@google.com> | 2019-03-11 10:11:17 -0700 |
commit | 177a1a589d97385324fe73ecc24dae0befde44b4 (patch) | |
tree | f4b9977f967cf512a70d578b4f3838622b181507 /bpfix | |
parent | fdd1457fa683d5a7c21c471d5dc3294cdb29cf1e (diff) | |
download | build_soong-177a1a589d97385324fe73ecc24dae0befde44b4.tar.gz build_soong-177a1a589d97385324fe73ecc24dae0befde44b4.tar.bz2 build_soong-177a1a589d97385324fe73ecc24dae0befde44b4.zip |
Fix crash in mergeListProperties
The value of a property to be merged may be a reference to a variable.
When we first create an attribute for a makefile variable (e.g. we
create 'android_static_libs' from LOCAL_STATIC_ANDROID_LIBRARIES), we
set its type correctly. However, reparse in bpfix erases this
information, so by the time 'android_static_libs' attribute is to be
merged with 'static_libs', it has no type and merge occurs. It isn't
easy to fix properly, so just don't merge in such case, Soong will
complain and it will be fixed manually.
Fixes: 125519127
Test: unit tests in androidmk_test.go
Change-Id: Ic66d7ab686a2fdde987f32e2b204c72d9bf0d026
Diffstat (limited to 'bpfix')
-rw-r--r-- | bpfix/bpfix/bpfix.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/bpfix/bpfix/bpfix.go b/bpfix/bpfix/bpfix.go index ba6435e0..706c0ec2 100644 --- a/bpfix/bpfix/bpfix.go +++ b/bpfix/bpfix/bpfix.go @@ -786,6 +786,14 @@ func mergeMatchingProperties(properties *[]*parser.Property, buf []byte, patchli } func mergeProperties(a, b *parser.Property, buf []byte, patchlist *parser.PatchList) error { + // The value of one of the properties may be a variable reference with no type assigned + // Bail out in this case. Soong will notice duplicate entries and will tell to merge them. + if _, isVar := a.Value.(*parser.Variable); isVar { + return nil + } + if _, isVar := b.Value.(*parser.Variable); isVar { + return nil + } if a.Value.Type() != b.Value.Type() { return fmt.Errorf("type mismatch when merging properties %q: %s and %s", a.Name, a.Value.Type(), b.Value.Type()) } |