diff --git a/Makefile b/Makefile index fb59a3ec9..3ba6d4482 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ DIRECT_TESTS += \ cpp_bufferoverrun cpp_errors cpp_frontend cpp_quandary cpp_siof cpp_threadsafety \ ifneq ($(BUCK),no) -BUILD_SYSTEMS_TESTS += buck-clang-db +BUILD_SYSTEMS_TESTS += buck-clang-db buck_flavors endif ifneq ($(CMAKE),no) BUILD_SYSTEMS_TESTS += clang_compilation_db cmake inferconfig diff --git a/infer/tests/build_systems/buck_flavors/.buckconfig b/infer/tests/build_systems/buck_flavors/.buckconfig new file mode 100644 index 000000000..e69de29bb diff --git a/infer/tests/build_systems/buck_flavors/Makefile b/infer/tests/build_systems/buck_flavors/Makefile new file mode 100644 index 000000000..c74980fd1 --- /dev/null +++ b/infer/tests/build_systems/buck_flavors/Makefile @@ -0,0 +1,34 @@ +# Copyright (c) 2017 - present Facebook, Inc. +# All rights reserved. +# +# This source code is licensed under the BSD style license found in the +# LICENSE file in the root directory of this source tree. An additional grant +# of patent rights can be found in the PATENTS file in the same directory. + +TESTS_DIR = ../.. +ROOT_DIR = $(TESTS_DIR)/../.. + +ANALYZER = infer +BUCK_TARGET = //src:hello +SOURCES = $(wildcard src/hello.c) +OBJECTS = buck-out/gen/src/hello\#compile-hello.c.o1f717d69,default/hello.c.o +INFER_OPTIONS = --report-custom-error --developer-mode --project-root $(TESTS_DIR) --no-failures-allowed +INFERPRINT_OPTIONS = --project-root $(TESTS_DIR) --issues-tests +CLEAN_EXTRA = buck-out + +include $(TESTS_DIR)/infer.make + +# Buck passes -a capture to infer +export INFER_STRICT_MODE=0 + +$(OBJECTS): $(JAVA_SOURCE_FILES) + $(QUIET)$(call silent_on_success,Compiling Buck flavors tests,\ + NO_BUCKD=1 $(BUCK) build --no-cache $(BUCK_TARGET)) + +infer-out/report.json: $(CLANG_DEPS) $(SOURCES) $(MAKEFILE_LIST) + $(QUIET)$(REMOVE_DIR) buck-out && \ + $(call silent_on_success,Testing Buck flavors integration,\ + NO_BUCKD=1 \ + $(INFER_BIN) $(INFER_OPTIONS) capture --flavors --results-dir $(CURDIR)/infer-out -- \ + $(BUCK) build --no-cache $(BUCK_TARGET) &&\ + $(INFER_BIN) $(INFER_OPTIONS) --merge analyze) diff --git a/infer/tests/build_systems/buck_flavors/issues.exp b/infer/tests/build_systems/buck_flavors/issues.exp new file mode 100644 index 000000000..5b0c5bc28 --- /dev/null +++ b/infer/tests/build_systems/buck_flavors/issues.exp @@ -0,0 +1,2 @@ +src/hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] +src/hello2.c, test2, 2, NULL_DEREFERENCE, [start of procedure test2()] diff --git a/infer/tests/build_systems/buck_flavors/src/BUCK b/infer/tests/build_systems/buck_flavors/src/BUCK new file mode 100644 index 000000000..ee8db4c9a --- /dev/null +++ b/infer/tests/build_systems/buck_flavors/src/BUCK @@ -0,0 +1,6 @@ +cxx_library( + name = 'hello', + srcs = [ + 'hello.c', 'hello2.c', + ], +) diff --git a/infer/tests/build_systems/buck_flavors/src/hello.c b/infer/tests/build_systems/buck_flavors/src/hello.c new file mode 100644 index 000000000..a3c29e227 --- /dev/null +++ b/infer/tests/build_systems/buck_flavors/src/hello.c @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include + +void test() { + int* s = NULL; + *s = 42; +} diff --git a/infer/tests/build_systems/buck_flavors/src/hello2.c b/infer/tests/build_systems/buck_flavors/src/hello2.c new file mode 100644 index 000000000..6910ad214 --- /dev/null +++ b/infer/tests/build_systems/buck_flavors/src/hello2.c @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include + +void test2() { + int* s = NULL; + *s = 42; +}