diff --git a/Makefile.in b/Makefile.in index 63c5742a540d4..a760155bbd91a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -59,6 +59,9 @@ # * check-stage$(stage)-$(crate) - Test a crate in a specific stage # * check-stage$(stage)-{rpass,rfail,cfail,rmake,...} - Run tests in src/test/ # * check-stage1-T-$(target)-H-$(host) - Run cross-compiled-tests +# * tidy-basic - show file / line stats +# * tidy-errors - show the highest rustc error code +# * tidy-features - show the status of language and lib features # # Then mix in some of these environment variables to harness the # ultimate power of The Rust Build System. diff --git a/mk/main.mk b/mk/main.mk index 0e52f168f59ed..a6b201a2b7bdf 100644 --- a/mk/main.mk +++ b/mk/main.mk @@ -72,6 +72,7 @@ endif # numbers and dots here CFG_VERSION_WIN = $(CFG_RELEASE_NUM) +CFG_INFO := $(info cfg: version $(CFG_VERSION)) ###################################################################### # More configuration @@ -179,6 +180,7 @@ endif ifndef CFG_DISABLE_VALGRIND_RPASS $(info cfg: enabling valgrind run-pass tests (CFG_ENABLE_VALGRIND_RPASS)) + $(info cfg: valgrind-rpass command set to $(CFG_VALGRIND)) CFG_VALGRIND_RPASS :=$(CFG_VALGRIND) else CFG_VALGRIND_RPASS := diff --git a/mk/tests.mk b/mk/tests.mk index e28f56fffe41b..8728d81603489 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -162,7 +162,8 @@ $(foreach file,$(wildcard $(S)src/doc/trpl/*.md), \ ###################################################################### # The main testing target. Tests lots of stuff. -check: cleantmptestlogs cleantestlibs check-notidy tidy +check: cleantmptestlogs cleantestlibs all check-stage2 tidy + $(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log # As above but don't bother running tidy. check-notidy: cleantmptestlogs cleantestlibs all check-stage2 @@ -235,57 +236,24 @@ cleantestlibs: ###################################################################### ifdef CFG_NOTIDY +.PHONY: tidy tidy: else -ALL_CS := $(wildcard $(S)src/rt/*.cpp \ - $(S)src/rt/*/*.cpp \ - $(S)src/rt/*/*/*.cpp \ - $(S)src/rustllvm/*.cpp) -ALL_CS := $(filter-out $(S)src/rt/miniz.cpp \ - $(wildcard $(S)src/rt/hoedown/src/*.c) \ - $(wildcard $(S)src/rt/hoedown/bin/*.c) \ - ,$(ALL_CS)) -ALL_HS := $(wildcard $(S)src/rt/*.h \ - $(S)src/rt/*/*.h \ - $(S)src/rt/*/*/*.h \ - $(S)src/rustllvm/*.h) -ALL_HS := $(filter-out $(S)src/rt/valgrind/valgrind.h \ - $(S)src/rt/valgrind/memcheck.h \ - $(S)src/rt/msvc/typeof.h \ - $(S)src/rt/msvc/stdint.h \ - $(S)src/rt/msvc/inttypes.h \ - $(wildcard $(S)src/rt/hoedown/src/*.h) \ - $(wildcard $(S)src/rt/hoedown/bin/*.h) \ - ,$(ALL_HS)) - # Run the tidy script in multiple parts to avoid huge 'echo' commands -tidy: +.PHONY: tidy +tidy: tidy-basic tidy-binaries tidy-errors tidy-features + +endif + +.PHONY: tidy-basic +tidy-basic: @$(call E, check: formatting) - $(Q)find $(S)src -name '*.r[sc]' \ - -and -not -regex '^$(S)src/jemalloc.*' \ - -and -not -regex '^$(S)src/libuv.*' \ - -and -not -regex '^$(S)src/llvm.*' \ - -and -not -regex '^$(S)src/gyp.*' \ - -and -not -regex '^$(S)src/libbacktrace.*' \ - -print0 \ - | xargs -0 -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.py' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/doc -name '*.js' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.sh' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.pl' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.c' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.h' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)echo $(ALL_CS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)echo $(ALL_HS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py + $(Q) $(CFG_PYTHON) $(S)src/etc/tidy.py $(S)src/ + +.PHONY: tidy-binaries +tidy-binaries: + @$(call E, check: binaries) $(Q)find $(S)src -type f -perm +a+x \ -not -name '*.rs' -and -not -name '*.py' \ -and -not -name '*.sh' \ @@ -300,11 +268,16 @@ tidy: | grep '^$(S)src/libbacktrace' -v \ | grep '^$(S)src/rust-installer' -v \ | xargs $(CFG_PYTHON) $(S)src/etc/check-binaries.py - $(Q) $(CFG_PYTHON) $(S)src/etc/errorck.py $(S)src/ - $(Q) $(CFG_PYTHON) $(S)src/etc/featureck.py $(S)src/ +.PHONY: tidy-errors +tidy-errors: + @$(call E, check: extended errors) + $(Q) $(CFG_PYTHON) $(S)src/etc/errorck.py $(S)src/ -endif +.PHONY: tidy-features +tidy-features: + @$(call E, check: feature sanity) + $(Q) $(CFG_PYTHON) $(S)src/etc/featureck.py $(S)src/ ###################################################################### @@ -639,7 +612,6 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ ifdef CFG_VALGRIND_RPASS ifdef GOOD_VALGRIND_$(2) -$(info cfg: valgrind-path set to $(CFG_VALGRIND_RPASS)) CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) += --valgrind-path "$(CFG_VALGRIND_RPASS)" endif endif diff --git a/src/etc/errorck.py b/src/etc/errorck.py index c940359abc118..7b11504f3cd80 100644 --- a/src/etc/errorck.py +++ b/src/etc/errorck.py @@ -15,6 +15,10 @@ import os import re +if len(sys.argv) < 2: + print "usage: errorck.py " + sys.exit(1) + src_dir = sys.argv[1] errcode_map = {} error_re = re.compile("(E\d\d\d\d)") @@ -54,8 +58,10 @@ print("{1}: {2}\n{3}".format(*entry)) errors = True -print("{0} error codes".format(len(errcode_map))) -print("highest error code: " + max(all_errors)) +print +print("* {0} error codes".format(len(errcode_map))) +print("* highest error code: " + max(all_errors)) +print if errors: sys.exit(1) diff --git a/src/etc/featureck.py b/src/etc/featureck.py index 064cf1d40ab36..df4ea998fefc2 100644 --- a/src/etc/featureck.py +++ b/src/etc/featureck.py @@ -20,6 +20,10 @@ import sys, os, re +if len(sys.argv) < 2: + print "usage: featurkck.py " + sys.exit(1) + src_dir = sys.argv[1] # Features that are allowed to exist in both the language and the library @@ -234,10 +238,8 @@ lines.sort() -print -print "Rust feature summary:" print for line in lines: - print line + print "* " + line print diff --git a/src/etc/licenseck.py b/src/etc/licenseck.py index f38583ee1fb37..889b2c95a7ea8 100644 --- a/src/etc/licenseck.py +++ b/src/etc/licenseck.py @@ -22,11 +22,6 @@ \\1 except according to those terms.""") exceptions = [ - "rt/rust_android_dummy.cpp", # BSD, chromium - "rt/rust_android_dummy.h", # BSD, chromium - "rt/isaac/randport.cpp", # public domain - "rt/isaac/rand.h", # public domain - "rt/isaac/standard.h", # public domain "libstd/sync/mpsc/mpsc_queue.rs", # BSD "libstd/sync/mpsc/spsc_queue.rs", # BSD "test/bench/shootout-binarytrees.rs", # BSD diff --git a/src/etc/tidy.py b/src/etc/tidy.py index f5172feb5b60f..fd3309dce12cb 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -51,78 +51,155 @@ def do_license_check(name, contents): if not check_license(name, contents): report_error_name_no(name, 1, "incorrect license") - -file_names = [s for s in sys.argv[1:] if (not s.endswith("_gen.rs")) - and (not ".#" in s)] - current_name = "" current_contents = "" check_tab = True check_cr = True check_linelength = True +if len(sys.argv) < 2: + print "usage: tidy.py " + sys.exit(1) + +src_dir = sys.argv[1] try: - for line in fileinput.input(file_names, + count_lines = 0 + count_non_blank_lines = 0 + + interesting_files = ['.rs', '.py', '.js', '.sh', '.c', '.h'] + + file_counts = {ext: 0 for ext in interesting_files} + file_counts['other'] = 0 + + def update_counts(current_name): + global file_counts + _, ext = os.path.splitext(current_name) + + if ext in file_counts: + file_counts[ext] += 1 + else: + file_counts['other'] += 1 + + all_paths = set() + + for (dirpath, dirnames, filenames) in os.walk(src_dir): + + # Skip some third-party directories + skippable_dirs = { + 'src/jemalloc', + 'src/llvm', + 'src/gyp', + 'src/libbacktrace', + 'src/libuv', + 'src/compiler-rt', + 'src/rt/hoedown', + 'src/rustllvm', + 'src/rt/valgrind', + 'src/rt/msvc', + 'src/rust-installer' + } + + if any(d in dirpath for d in skippable_dirs): + continue + + def interesting_file(f): + if "miniz.c" in f \ + or "jquery" in f \ + or "rust_android_dummy" in f: + return False + + return any(os.path.splitext(f)[1] == ext for ext in interesting_files) + + file_names = [os.path.join(dirpath, f) for f in filenames + if interesting_file(f) + and not f.endswith("_gen.rs") + and not ".#" is f] + + if not file_names: + continue + + for line in fileinput.input(file_names, openhook=fileinput.hook_encoded("utf-8")): - if "tidy.py" not in fileinput.filename(): + filename = fileinput.filename() + + if "tidy.py" not in filename: + if "TODO" in line: + report_err("TODO is deprecated; use FIXME") + match = re.match(r'^.*/(\*|/!?)\s*XXX', line) + if match: + report_err("XXX is no longer necessary, use FIXME") + match = re.match(r'^.*//\s*(NOTE.*)$', line) + if match and "TRAVIS" not in os.environ: + m = match.group(1) + if "snap" in m.lower(): + report_warn(match.group(1)) + match = re.match(r'^.*//\s*SNAP\s+(\w+)', line) + if match: + hsh = match.group(1) + date, rev = snapshot.curr_snapshot_rev() + if not hsh.startswith(rev): + report_err("snapshot out of date (" + date + + "): " + line) + else: + if "SNAP" in line: + report_warn("unmatched SNAP line: " + line) + if cr_flag in line: check_cr = False if tab_flag in line: check_tab = False if linelength_flag in line: check_linelength = False - if "TODO" in line: - report_err("TODO is deprecated; use FIXME") - match = re.match(r'^.*/(\*|/!?)\s*XXX', line) - if match: - report_err("XXX is no longer necessary, use FIXME") - match = re.match(r'^.*//\s*(NOTE.*)$', line) - if match and "TRAVIS" not in os.environ: - m = match.group(1) - if "snap" in m.lower(): - report_warn(match.group(1)) - match = re.match(r'^.*//\s*SNAP\s+(\w+)', line) - if match: - hsh = match.group(1) - date, rev = snapshot.curr_snapshot_rev() - if not hsh.startswith(rev): - report_err("snapshot out of date (" + date - + "): " + line) - else: - if "SNAP" in line: - report_warn("unmatched SNAP line: " + line) - - if check_tab and ('\t' in line and - "Makefile" not in fileinput.filename()): - report_err("tab character") - if check_cr and not autocrlf and '\r' in line: - report_err("CR character") - if line.endswith(" \n") or line.endswith("\t\n"): - report_err("trailing whitespace") - line_len = len(line)-2 if autocrlf else len(line)-1 - - if check_linelength and line_len > cols: - report_err("line longer than %d chars" % cols) - - if fileinput.isfirstline() and current_name != "": - do_license_check(current_name, current_contents) - - if fileinput.isfirstline(): - current_name = fileinput.filename() - current_contents = "" - check_cr = True - check_tab = True - check_linelength = True - - current_contents += line + + if check_tab and ('\t' in line and + "Makefile" not in filename): + report_err("tab character") + if check_cr and not autocrlf and '\r' in line: + report_err("CR character") + if line.endswith(" \n") or line.endswith("\t\n"): + report_err("trailing whitespace") + line_len = len(line)-2 if autocrlf else len(line)-1 + + if check_linelength and line_len > cols: + report_err("line longer than %d chars" % cols) + + if fileinput.isfirstline(): + # This happens at the end of each file except the last. + if current_name != "": + update_counts(current_name) + assert len(current_contents) > 0 + do_license_check(current_name, current_contents) + + current_name = filename + current_contents = "" + check_cr = True + check_tab = True + check_linelength = True + + # Put a reasonable limit on the amount of header data we use for + # the licenseck + if len(current_contents) < 1000: + current_contents += line + + count_lines += 1 + if line.strip(): + count_non_blank_lines += 1 if current_name != "": + update_counts(current_name) + assert len(current_contents) > 0 do_license_check(current_name, current_contents) except UnicodeDecodeError as e: report_err("UTF-8 decoding error " + str(e)) +print +for ext in file_counts: + print "* linted " + str(file_counts[ext]) + " " + ext + " files" +print "* total lines of code: " + str(count_lines) +print "* total non-blank lines of code: " + str(count_non_blank_lines) +print sys.exit(err) diff --git a/src/grammar/check.sh b/src/grammar/check.sh index cb269bbdb0ade..b5be3daa13e1d 100755 --- a/src/grammar/check.sh +++ b/src/grammar/check.sh @@ -1,5 +1,7 @@ #!/bin/sh +# ignore-license + # Run the reference lexer against libsyntax and compare the tokens and spans. # If "// ignore-lexer-test" is present in the file, it will be ignored. diff --git a/src/grammar/testparser.py b/src/grammar/testparser.py index 38e57be288b24..16babd4194e4d 100755 --- a/src/grammar/testparser.py +++ b/src/grammar/testparser.py @@ -9,6 +9,9 @@ # , at your # option. This file may not be copied, modified, or distributed # except according to those terms. + +# ignore-tidy-linelength + import sys import os diff --git a/src/rt/rust_builtin.c b/src/rt/rust_builtin.c index 382cbf0d5d129..6bf86f527390f 100644 --- a/src/rt/rust_builtin.c +++ b/src/rt/rust_builtin.c @@ -47,7 +47,8 @@ extern char **environ; #endif #endif -#if defined(__FreeBSD__) || defined(__linux__) || defined(__ANDROID__) || defined(__DragonFly__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) || defined(__linux__) || defined(__ANDROID__) \ + || defined(__DragonFly__) || defined(__OpenBSD__) extern char **environ; #endif @@ -235,7 +236,7 @@ const char * rust_load_self() { /* get realpath if possible */ if ((argv[0] != NULL) && ((*argv[0] == '.') || (*argv[0] == '/') - || (strstr(argv[0], "/") != NULL))) + || (strstr(argv[0], "/") != NULL))) self = realpath(argv[0], NULL); else diff --git a/src/test/run-make/c-dynamic-dylib/cfoo.c b/src/test/run-make/c-dynamic-dylib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-dynamic-dylib/cfoo.c +++ b/src/test/run-make/c-dynamic-dylib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-dynamic-rlib/cfoo.c b/src/test/run-make/c-dynamic-rlib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-dynamic-rlib/cfoo.c +++ b/src/test/run-make/c-dynamic-rlib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-link-to-rust-dylib/bar.c b/src/test/run-make/c-link-to-rust-dylib/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/c-link-to-rust-dylib/bar.c +++ b/src/test/run-make/c-link-to-rust-dylib/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/c-link-to-rust-staticlib/bar.c b/src/test/run-make/c-link-to-rust-staticlib/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/c-link-to-rust-staticlib/bar.c +++ b/src/test/run-make/c-link-to-rust-staticlib/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/c-static-dylib/cfoo.c b/src/test/run-make/c-static-dylib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-static-dylib/cfoo.c +++ b/src/test/run-make/c-static-dylib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-static-rlib/cfoo.c b/src/test/run-make/c-static-rlib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-static-rlib/cfoo.c +++ b/src/test/run-make/c-static-rlib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/extern-fn-generic/test.c b/src/test/run-make/extern-fn-generic/test.c index f23dd1eb1462c..f9faef64afc41 100644 --- a/src/test/run-make/extern-fn-generic/test.c +++ b/src/test/run-make/extern-fn-generic/test.c @@ -1,16 +1,17 @@ +// ignore-license #include typedef struct TestStruct { - uint8_t x; - int32_t y; + uint8_t x; + int32_t y; } TestStruct; typedef int callback(TestStruct s); uint32_t call(callback *c) { - TestStruct s; - s.x = 'a'; - s.y = 3; + TestStruct s; + s.x = 'a'; + s.y = 3; - return c(s); + return c(s); } diff --git a/src/test/run-make/extern-fn-mangle/test.c b/src/test/run-make/extern-fn-mangle/test.c index 8d93917ade03e..1a9855dedec49 100644 --- a/src/test/run-make/extern-fn-mangle/test.c +++ b/src/test/run-make/extern-fn-mangle/test.c @@ -1,8 +1,9 @@ +// ignore-license #include uint32_t foo(); uint32_t bar(); uint32_t add() { - return foo() + bar(); + return foo() + bar(); } diff --git a/src/test/run-make/extern-fn-with-packed-struct/test.c b/src/test/run-make/extern-fn-with-packed-struct/test.c index c3456a64b9bc4..121e48e84e46f 100644 --- a/src/test/run-make/extern-fn-with-packed-struct/test.c +++ b/src/test/run-make/extern-fn-with-packed-struct/test.c @@ -1,3 +1,4 @@ +// ignore-license // Pragma needed cause of gcc bug on windows: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 #pragma pack(1) struct __attribute__((packed)) Foo { diff --git a/src/test/run-make/extern-fn-with-union/test.c b/src/test/run-make/extern-fn-with-union/test.c index 86cb64537236e..8c87c230693d1 100644 --- a/src/test/run-make/extern-fn-with-union/test.c +++ b/src/test/run-make/extern-fn-with-union/test.c @@ -1,3 +1,4 @@ +// ignore-license #include #include diff --git a/src/test/run-make/interdependent-c-libraries/bar.c b/src/test/run-make/interdependent-c-libraries/bar.c index 812c975352872..c761f029effbe 100644 --- a/src/test/run-make/interdependent-c-libraries/bar.c +++ b/src/test/run-make/interdependent-c-libraries/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); void bar() { foo(); } diff --git a/src/test/run-make/interdependent-c-libraries/foo.c b/src/test/run-make/interdependent-c-libraries/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/interdependent-c-libraries/foo.c +++ b/src/test/run-make/interdependent-c-libraries/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {} diff --git a/src/test/run-make/issue-12446/foo.c b/src/test/run-make/issue-12446/foo.c index a58cd8bb7c98f..186a0046e80ac 100644 --- a/src/test/run-make/issue-12446/foo.c +++ b/src/test/run-make/issue-12446/foo.c @@ -1 +1,2 @@ +// ignore-license void some_c_symbol() {} diff --git a/src/test/run-make/issue-15460/foo.c b/src/test/run-make/issue-15460/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/issue-15460/foo.c +++ b/src/test/run-make/issue-15460/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {} diff --git a/src/test/run-make/link-path-order/correct.c b/src/test/run-make/link-path-order/correct.c index 3064af952f898..a595939f92e8c 100644 --- a/src/test/run-make/link-path-order/correct.c +++ b/src/test/run-make/link-path-order/correct.c @@ -1 +1,2 @@ +// ignore-license int should_return_one() { return 1; } diff --git a/src/test/run-make/link-path-order/wrong.c b/src/test/run-make/link-path-order/wrong.c index 64275b3ad6bb0..c53e7e3c48c05 100644 --- a/src/test/run-make/link-path-order/wrong.c +++ b/src/test/run-make/link-path-order/wrong.c @@ -1 +1,2 @@ +// ignore-license int should_return_one() { return 0; } diff --git a/src/test/run-make/linkage-attr-on-static/foo.c b/src/test/run-make/linkage-attr-on-static/foo.c index 78a6934f57f76..d7d33ea12e806 100644 --- a/src/test/run-make/linkage-attr-on-static/foo.c +++ b/src/test/run-make/linkage-attr-on-static/foo.c @@ -1,3 +1,4 @@ +// ignore-license #include extern int32_t BAZ; diff --git a/src/test/run-make/lto-smoke-c/bar.c b/src/test/run-make/lto-smoke-c/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/lto-smoke-c/bar.c +++ b/src/test/run-make/lto-smoke-c/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/manual-link/bar.c b/src/test/run-make/manual-link/bar.c index e42599986781f..3c167b45af98d 100644 --- a/src/test/run-make/manual-link/bar.c +++ b/src/test/run-make/manual-link/bar.c @@ -1 +1,2 @@ +// ignore-license void bar() {} diff --git a/src/test/run-make/manual-link/foo.c b/src/test/run-make/manual-link/foo.c index e42599986781f..3c167b45af98d 100644 --- a/src/test/run-make/manual-link/foo.c +++ b/src/test/run-make/manual-link/foo.c @@ -1 +1,2 @@ +// ignore-license void bar() {} diff --git a/src/test/run-make/no-duplicate-libs/bar.c b/src/test/run-make/no-duplicate-libs/bar.c index 330d914a011e2..a7b02a2f10b63 100644 --- a/src/test/run-make/no-duplicate-libs/bar.c +++ b/src/test/run-make/no-duplicate-libs/bar.c @@ -1,3 +1,4 @@ +// ignore-license extern void foo(); void bar() { foo(); } diff --git a/src/test/run-make/no-duplicate-libs/foo.c b/src/test/run-make/no-duplicate-libs/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/no-duplicate-libs/foo.c +++ b/src/test/run-make/no-duplicate-libs/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {}