Hi! So i just added archive handling to ease looking at more than just the plain frontends, applied as r264856. You can now use the exact files passed to the driver when linking e.g. cc1. We link libcommon.a twice? Didn't look. e.g.: me@there:.../gcc$ /scratch/src/gcc-trunk/contrib/unused_functions.py c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o c/c-fold.o c/gimple-parser.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-ubsan.o c-family/known-headers.o c-family/c-attribs.o c-family/c-warn.o c-family/c-spellcheck.o i386-c.o glibc-c.o cc1-checksum.o libbackend.a main.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a results in the attached output. This properly flags functions like e.g.: init_branch_prob (dead code), bitwise_mode_for_mode in stor-layout.c (should be static). Of course it also complains about cases like supports_one_only() in cc1 where that is only used in cc1plus. Likewise constant_pool_empty_p() on i386 which is only used by ppc and spe. HTH,