Merge "Remove JILL, JACK_JAR and JILL_JAR"
diff --git a/core/Makefile b/core/Makefile
index e958074..77b18b6 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -1560,8 +1560,11 @@
$(BUILT_TARGET_FILES_PACKAGE): tool_extensions := $(TARGET_RELEASETOOLS_EXTENSIONS)
endif
+ifeq ($(AB_OTA_UPDATER),true)
+# Build zlib fingerprint if using the AB Updater.
+$(BUILT_TARGET_FILES_PACKAGE): $(TARGET_OUT_COMMON_GEN)/zlib_fingerprint
+else
# Build OTA tools if not using the AB Updater.
-ifneq ($(AB_OTA_UPDATER),true)
$(BUILT_TARGET_FILES_PACKAGE): $(built_ota_tools)
endif
@@ -1727,6 +1730,7 @@
ifeq ($(AB_OTA_UPDATER),true)
@# When using the A/B updater, include the updater config files in the zip.
$(hide) $(ACP) $(TOPDIR)system/update_engine/update_engine.conf $(zip_root)/META/update_engine_config.txt
+ $(hide) $(ACP) $(TARGET_OUT_COMMON_GEN)/zlib_fingerprint $(zip_root)/META/zlib_fingerprint.txt
$(hide) for part in $(AB_OTA_PARTITIONS); do \
echo "$${part}" >> $(zip_root)/META/ab_partitions.txt; \
done
diff --git a/core/clang/config.mk b/core/clang/config.mk
index cb0a790..305c8fb 100644
--- a/core/clang/config.mk
+++ b/core/clang/config.mk
@@ -167,7 +167,6 @@
ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fno-omit-frame-pointer
ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit
-ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES :=
ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES := libasan
# This allows us to use the superset of functionality that compiler-rt
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 6e96880..3573f0a 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -100,10 +100,8 @@
endif
endif
-ifneq ($(filter address,$(my_sanitize)),)
- # Frame pointer based unwinder in ASan requires ARM frame setup.
- LOCAL_ARM_MODE := arm
- my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
+# If local or global modules need ASAN, add linker flags.
+ifneq ($(filter address,$(my_global_sanitize) $(my_sanitize)),)
my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS)
ifdef LOCAL_IS_HOST_MODULE
# -nodefaultlibs (provided with libc++) prevents the driver from linking
@@ -111,12 +109,20 @@
my_ldlibs += -lm -lpthread
my_ldflags += -Wl,--no-as-needed
else
- my_cflags += -mllvm -asan-globals=0
+ # Add asan libraries unless LOCAL_MODULE is the asan library.
# ASan runtime library must be the first in the link order.
- my_shared_libraries := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
- $(my_shared_libraries) \
- $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES)
- my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES)
+ ifeq (,$(filter $(LOCAL_MODULE),$($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_RUNTIME_LIBRARY)))
+ my_shared_libraries := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
+ $(my_shared_libraries)
+ endif
+ ifeq (,$(filter $(LOCAL_MODULE),$(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES)))
+ my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES)
+ endif
+
+ # Do not add unnecessary dependency in shared libraries.
+ ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES)
+ my_ldflags += -Wl,--as-needed
+ endif
my_linker := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_LINKER)
# Make sure linker_asan get installed.
@@ -124,6 +130,16 @@
endif
endif
+# If local module needs ASAN, add compiler flags.
+ifneq ($(filter address,$(my_sanitize)),)
+ # Frame pointer based unwinder in ASan requires ARM frame setup.
+ LOCAL_ARM_MODE := arm
+ my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
+ ifndef LOCAL_IS_HOST_MODULE
+ my_cflags += -mllvm -asan-globals=0
+ endif
+endif
+
ifneq ($(filter undefined,$(my_sanitize)),)
ifndef LOCAL_IS_HOST_MODULE
$(error ubsan is not yet supported on the target)
diff --git a/core/definitions.mk b/core/definitions.mk
index cd8ece3..360c5ba 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -1598,10 +1598,10 @@
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \
$(PRIVATE_TARGET_LIBATOMIC) \
$(PRIVATE_TARGET_LIBGCC) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
- -o $@ \
$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
$(PRIVATE_LDFLAGS) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
+ -o $@ \
$(PRIVATE_TARGET_CRTEND_SO_O) \
$(PRIVATE_LDLIBS)
endef
@@ -1669,10 +1669,10 @@
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \
$(PRIVATE_TARGET_LIBATOMIC) \
$(PRIVATE_TARGET_LIBGCC) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
- -o $@ \
$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
$(PRIVATE_LDFLAGS) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
+ -o $@ \
$(PRIVATE_TARGET_CRTEND_O) \
$(PRIVATE_LDLIBS)
endef
diff --git a/target/product/core_minimal.mk b/target/product/core_minimal.mk
index c39ab2c..998f4ae 100644
--- a/target/product/core_minimal.mk
+++ b/target/product/core_minimal.mk
@@ -114,5 +114,8 @@
PRODUCT_COPY_FILES += \
system/core/rootdir/init.zygote32.rc:root/init.zygote32.rc
+PRODUCT_COPY_FILES += \
+ system/core/rootdir/etc/public.libraries.android.txt:system/etc/public.libraries.txt
+
$(call inherit-product, $(SRC_TARGET_DIR)/product/runtime_libart.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
diff --git a/tools/warn.py b/tools/warn.py
index 8097123..c09c01d 100755
--- a/tools/warn.py
+++ b/tools/warn.py
@@ -46,9 +46,34 @@
'patterns':[r".*: warning: conflicting types for '.+'"] },
{ 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wtype-limits',
'description':'Expression always evaluates to true or false',
- 'patterns':[r".*: warning: comparison is always false due to limited range of data type",
+ 'patterns':[r".*: warning: comparison is always .+ due to limited range of data type",
r".*: warning: comparison of unsigned expression >= 0 is always true",
r".*: warning: comparison of unsigned expression < 0 is always false"] },
+ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'',
+ 'description':'Potential leak of memory, bad free, use after free',
+ 'patterns':[r".*: warning: Potential leak of memory",
+ r".*: warning: Potential memory leak",
+ r".*: warning: Memory allocated by .+ should be deallocated by .+ not .+",
+ r".*: warning: 'delete' applied to a pointer that was allocated",
+ r".*: warning: Use of memory after it is freed",
+ r".*: warning: Argument to .+ is the address of .+ variable",
+ r".*: warning: Argument to free\(\) is offset by .+ of memory allocated by",
+ r".*: warning: Attempt to .+ released memory"] },
+ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'',
+ 'description':'Return address of stack memory',
+ 'patterns':[r".*: warning: Address of stack memory .+ returned to caller"] },
+ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'',
+ 'description':'Problem with vfork',
+ 'patterns':[r".*: warning: This .+ is prohibited after a successful vfork",
+ r".*: warning: Call to function 'vfork' is insecure "] },
+ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'infinite-recursion',
+ 'description':'Infinite recursion',
+ 'patterns':[r".*: warning: all paths through this function will call itself"] },
+ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'',
+ 'description':'Potential buffer overflow',
+ 'patterns':[r".*: warning: Size argument is greater than .+ the destination buffer",
+ r".*: warning: Potential buffer overflow.",
+ r".*: warning: String copy function overflows destination buffer"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Incompatible pointer types',
'patterns':[r".*: warning: assignment from incompatible pointer type",
@@ -76,10 +101,19 @@
'patterns':[r".*: warning: \(near initialization for '.+'\)"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wformat',
'description':'Format string does not match arguments',
- 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [0-9]+ has type '.+'"] },
+ 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [0-9]+ has type '.+'",
+ r".*: warning: more '%' conversions than data arguments",
+ r".*: warning: data argument not used by format string",
+ r".*: warning: incomplete format specifier",
+ r".*: warning: format .+ expects .+ but argument .+Wformat=",
+ r".*: warning: field precision should have .+ but argument has .+Wformat",
+ r".*: warning: format specifies type .+ but the argument has type .+Wformat"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wformat-extra-args',
'description':'Too many arguments for format string',
'patterns':[r".*: warning: too many arguments for format"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wformat-invalid-specifier',
+ 'description':'Invalid format specifier',
+ 'patterns':[r".*: warning: invalid .+ specifier '.+'.+format-invalid-specifier"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-compare',
'description':'Comparison between signed and unsigned',
'patterns':[r".*: warning: comparison between signed and unsigned",
@@ -125,7 +159,8 @@
'patterns':[r".*: warning: '.+' may be used uninitialized in this function"] },
{ 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wuninitialized',
'description':'Variable is used uninitialized',
- 'patterns':[r".*: warning: '.+' is used uninitialized in this function"] },
+ 'patterns':[r".*: warning: '.+' is used uninitialized in this function",
+ r".*: warning: variable '.+' is uninitialized when used here"] },
{ 'category':'ld', 'severity':severity.MEDIUM, 'members':[], 'option':'-fshort-enums',
'description':'ld: possible enum size mismatch',
'patterns':[r".*: warning: .* uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail"] },
@@ -157,6 +192,16 @@
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wimplicit int',
'description':'No type or storage class (will default to int)',
'patterns':[r".*: warning: data definition has no type or storage class"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Null pointer',
+ 'patterns':[r".*: warning: Dereference of null pointer",
+ r".*: warning: Called .+ pointer is null",
+ r".*: warning: Forming reference to null pointer",
+ r".*: warning: Returning null reference",
+ r".*: warning: Null pointer passed as an argument to a 'nonnull' parameter",
+ r".*: warning: .+ results in a null pointer dereference",
+ r".*: warning: Access to .+ results in a dereference of a null pointer",
+ r".*: warning: Null pointer argument in"] },
{ 'category':'cont.', 'severity':severity.SKIP, 'members':[], 'option':'',
'description':'',
'patterns':[r".*: warning: type defaults to 'int' in declaration of '.+'"] },
@@ -259,7 +304,7 @@
'patterns':[r".*: warning: attempt to free a non-heap object '.+'"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wchar-subscripts',
'description':'Array subscript has type char',
- 'patterns':[r".*: warning: array subscript has type 'char'"] },
+ 'patterns':[r".*: warning: array subscript .+ type 'char'.+Wchar-subscripts"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Constant too large for type',
'patterns':[r".*: warning: integer constant is too large for '.+' type"] },
@@ -307,7 +352,8 @@
'patterns':[r".*: warning: function declaration isn't a prototype"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wignored-qualifiers',
'description':'Type qualifiers ignored on function return value',
- 'patterns':[r".*: warning: type qualifiers ignored on function return type"] },
+ 'patterns':[r".*: warning: type qualifiers ignored on function return type",
+ r".*: warning: .+ type qualifier .+ has no effect .+Wignored-qualifiers"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'<foo> declared inside parameter list, scope limited to this definition',
'patterns':[r".*: warning: '.+' declared inside parameter list"] },
@@ -320,12 +366,21 @@
{ 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wcomment',
'description':'Comment inside comment',
'patterns':[r".*: warning: "".+"" within comment"] },
+ { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'',
+ 'description':'Value stored is never read',
+ 'patterns':[r".*: warning: Value stored to .+ is never read"] },
+ { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wdeprecated-declarations',
+ 'description':'Deprecated declarations',
+ 'patterns':[r".*: warning: .+ is deprecated.+deprecated-declarations"] },
+ { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wpointer-sign',
+ 'description':'Converts between pointers to integer types with different sign',
+ 'patterns':[r".*: warning: .+ converts between pointers to integer types with different sign"] },
{ 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'',
'description':'Extra tokens after #endif',
'patterns':[r".*: warning: extra tokens at end of #endif directive"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wenum-compare',
'description':'Comparison between different enums',
- 'patterns':[r".*: warning: comparison between 'enum .+' and 'enum .+'"] },
+ 'patterns':[r".*: warning: comparison between '.+' and '.+'.+Wenum-compare"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wconversion',
'description':'Implicit conversion of negative number to unsigned type',
'patterns':[r".*: warning: converting negative value '.+' to '.+'"] },
@@ -345,6 +400,7 @@
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wpointer-arith',
'description':'void* used in arithmetic' ,
'patterns':[r".*: warning: pointer of type 'void \*' used in (arithmetic|subtraction)",
+ r".*: warning: arithmetic on .+ to void is a GNU extension.*Wpointer-arith",
r".*: warning: wrong type argument to increment"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-promo',
'description':'Overload resolution chose to promote from unsigned or enum to signed type' ,
@@ -359,23 +415,134 @@
'description':'Converting from <type> to <other type>',
'patterns':[r".*: warning: converting to '.+' from '.+'"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'VLA has zero or negative size',
+ 'patterns':[r".*: warning: Declared variable-length array \(VLA\) has .+ size"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Return value from void function',
'patterns':[r".*: warning: 'return' with a value, in function returning void"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'multichar',
+ 'description':'Multi-character character constant',
+ 'patterns':[r".*: warning: multi-character character constant"] },
{ 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'',
'description':'Useless specifier',
'patterns':[r".*: warning: useless storage class specifier in empty declaration"] },
{ 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'',
'description':'Duplicate logtag',
'patterns':[r".*: warning: tag "".+"" \(None\) duplicated in .+"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'typedef-redefinition',
+ 'description':'Typedef redefinition',
+ 'patterns':[r".*: warning: redefinition of typedef '.+' is a C11 feature"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'gnu-designator',
+ 'description':'GNU old-style field designator',
+ 'patterns':[r".*: warning: use of GNU old-style field designator extension"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'missing-field-initializers',
+ 'description':'Missing field initializers',
+ 'patterns':[r".*: warning: missing field '.+' initializer"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'missing-braces',
+ 'description':'Missing braces',
+ 'patterns':[r".*: warning: suggest braces around initialization of",
+ r".*: warning: braces around scalar initializer"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'sign-compare',
+ 'description':'Comparison of integers of different signs',
+ 'patterns':[r".*: warning: comparison of integers of different signs.+sign-compare"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'dangling-else',
+ 'description':'Add braces to avoid dangling else',
+ 'patterns':[r".*: warning: add explicit braces to avoid dangling else"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'initializer-overrides',
+ 'description':'Initializer overrides prior initialization',
+ 'patterns':[r".*: warning: initializer overrides prior initialization of this subobject"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'self-assign',
+ 'description':'Assigning value to self',
+ 'patterns':[r".*: warning: explicitly assigning value of .+ to itself"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'gnu-variable-sized-type-not-at-end',
+ 'description':'GNU extension, variable sized type not at end',
+ 'patterns':[r".*: warning: field '.+' with variable sized type '.+' not at the end of a struct or class"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'tautological-constant-out-of-range-compare',
+ 'description':'Comparison of constant is always false/true',
+ 'patterns':[r".*: comparison of .+ is always .+Wtautological-constant-out-of-range-compare"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'overloaded-virtual',
+ 'description':'Hides overloaded virtual function',
+ 'patterns':[r".*: '.+' hides overloaded virtual function"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'incompatible-pointer-types',
+ 'description':'Incompatible pointer types',
+ 'patterns':[r".*: warning: incompatible pointer types .+Wincompatible-pointer-types"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'asm-operand-widths',
+ 'description':'ASM value size does not match registyer size',
+ 'patterns':[r".*: warning: value size does not match register size specified by the constraint and modifier"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'literal-suffix',
+ 'description':'Needs a space between literal and string macro',
+ 'patterns':[r".*: warning: invalid suffix on literal.+ requires a space .+Wliteral-suffix"] },
+ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'#warnings',
+ 'description':'Warnings from #warning',
+ 'patterns':[r".*: warning: .+-W#warnings"] },
+
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Operator new returns NULL',
'patterns':[r".*: warning: 'operator new' must not return NULL unless it is declared 'throw\(\)' .+"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'NULL used in arithmetic',
'patterns':[r".*: warning: NULL used in arithmetic"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'enum-conversion',
+ 'description':'Implicit conversion from enumeration type',
+ 'patterns':[r".*: warning: implicit conversion from enumeration type '.+'"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'switch',
+ 'description':'case value not in enumerated type',
+ 'patterns':[r".*: warning: case value not in enumerated type '.+'"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Undefined result',
+ 'patterns':[r".*: warning: The result of .+ is undefined",
+ r".*: warning: 'this' pointer cannot be null in well-defined C\+\+ code;",
+ r".*: warning: shifting a negative signed value is undefined"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Division by zero',
+ 'patterns':[r".*: warning: Division by zero"] },
{ 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
'description':'Use of deprecated method',
'patterns':[r".*: warning: '.+' is deprecated .+"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Use of garbage or uninitialized value',
+ 'patterns':[r".*: warning: .+ is a garbage value",
+ r".*: warning: Function call argument is an uninitialized value",
+ r".*: warning: Undefined or garbage value returned to caller",
+ r".*: warning: Dereference of undefined pointer value",
+ r".*: warning: Passed-by-value .+ contains uninitialized data",
+ r".*: warning: Branch condition evaluates to a garbage value",
+ r".*: warning: The .+ of .+ is an uninitialized value.",
+ r".*: warning: .+ is used uninitialized whenever .+sometimes-uninitialized",
+ r".*: warning: Assigned value is garbage or undefined"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Result of malloc type incompatible with sizeof operand type',
+ 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Return value not checked',
+ 'patterns':[r".*: warning: The return value from .+ is not checked"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Possible heap pollution',
+ 'patterns':[r".*: warning: .*Possible heap pollution from .+ type .+"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Allocation size of 0 byte',
+ 'patterns':[r".*: warning: Call to .+ has an allocation size of 0 byte"] },
+ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'',
+ 'description':'Result of malloc type incompatible with sizeof operand type',
+ 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] },
+
+ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'',
+ 'description':'Discarded qualifier from pointer target type',
+ 'patterns':[r".*: warning: .+ discards '.+' qualifier from pointer target type"] },
+ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'',
+ 'description':'Use snprintf instead of sprintf',
+ 'patterns':[r".*: warning: .*sprintf is often misused; please use snprintf"] },
+ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'',
+ 'description':'Unsupported optimizaton flag',
+ 'patterns':[r".*: warning: optimization flag '.+' is not supported"] },
+ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'',
+ 'description':'Extra or missing parentheses',
+ 'patterns':[r".*: warning: equality comparison with extraneous parentheses",
+ r".*: warning: .+ within .+Wlogical-op-parentheses"] },
+ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'mismatched-tags',
+ 'description':'Mismatched class vs struct tags',
+ 'patterns':[r".*: warning: '.+' defined as a .+ here but previously declared as a .+mismatched-tags",
+ r".*: warning: .+ was previously declared as a .+mismatched-tags"] },
# these next ones are to deal with formatting problems resulting from the log being mixed up by 'make -j'
{ 'category':'C/C++', 'severity':severity.SKIP, 'members':[], 'option':'',
diff --git a/tools/zipalign/ZipEntry.h b/tools/zipalign/ZipEntry.h
index 129a759..eb68afe 100644
--- a/tools/zipalign/ZipEntry.h
+++ b/tools/zipalign/ZipEntry.h
@@ -290,7 +290,7 @@
mExtraField(NULL),
mFileComment(NULL)
{}
- virtual ~CentralDirEntry(void) {
+ ~CentralDirEntry(void) {
delete[] mFileName;
delete[] mExtraField;
delete[] mFileComment;