llvm-project/llvm/test/ThinLTO/X86
Nick Desaulniers 846e562dcc [Clang] add support for error+warning fn attrs
Add support for the GNU C style __attribute__((error(""))) and
__attribute__((warning(""))). These attributes are meant to be put on
declarations of functions whom should not be called.

They are frequently used to provide compile time diagnostics similar to
_Static_assert, but which may rely on non-ICE conditions (ie. relying on
compiler optimizations). This is also similar to diagnose_if function
attribute, but can diagnose after optimizations have been run.

While users may instead simply call undefined functions in such cases to
get a linkage failure from the linker, these provide a much more
ergonomic and actionable diagnostic to users and do so at compile time
rather than at link time. Users instead may be able use inline asm .err
directives.

These are used throughout the Linux kernel in its implementation of
BUILD_BUG and BUILD_BUG_ON macros. These macros generally cannot be
converted to use _Static_assert because many of the parameters are not
ICEs. The Linux kernel still needs to be modified to make use of these
when building with Clang; I have a patch that does so I will send once
this feature is landed.

To do so, we create a new IR level Function attribute, "dontcall" (both
error and warning boil down to one IR Fn Attr).  Then, similar to calls
to inline asm, we attach a !srcloc Metadata node to call sites of such
attributed callees.

The backend diagnoses these during instruction selection, while we still
know that a call is a call (vs say a JMP that's a tail call) in an arch
agnostic manner.

The frontend then reconstructs the SourceLocation from that Metadata,
and determines whether to emit an error or warning based on the callee's
attribute.

Link: https://bugs.llvm.org/show_bug.cgi?id=16428
Link: https://github.com/ClangBuiltLinux/linux/issues/1173

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D106030
2021-08-25 10:34:18 -07:00
..
Inputs [ThinLTO] Disallow importing for functions with indir branch to block address 2021-07-28 18:02:48 -07:00
DSOLocalEquivalent.ll [llvm] Change DSOLocalEquivalent type if the underlying global value type changes 2021-03-09 15:09:48 -08:00
alias_import.ll
alias_internal.ll
alias_resolution.ll
asm.ll [IRSymTab] Set FB_used on llvm.compiler.used symbols 2021-03-03 16:22:30 -08:00
autoupgrade.ll
builtin-nostrip.ll
cache-config.ll
cache-icall.ll
cache-import-lists.ll
cache-typeid-resolutions.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
cache.ll [ThinLTO] [test] cache.ll: Prevent Spotlight indexing of the output dir 2020-07-28 21:21:58 -07:00
callees-metadata.ll
cfi-devirt.ll [InstCombine] Always try to invert non-canonical predicate of an icmp 2020-07-04 18:12:04 +03:00
cfi-distributed.ll
cfi-icall-only-defuse.ll
cfi-icall.ll
cfi-unsat.ll Restore "[WPD/LowerTypeTests] Delay lowering/removal of type tests until after ICP" 2020-07-14 12:16:57 -07:00
cfi.ll
crash_debuginfo.ll [test] Make ThinLTO/X86/crash_debuginfo.ll work with -enable-new-pm=1 2020-10-27 12:37:19 -07:00
deadstrip.ll
debuginfo-compositetype-import.ll
debuginfo-cu-import.ll
devirt-after-icp.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt.ll Don't use $ as suffix for symbol names in ThinLTOBitcodeWriter and other places 2021-03-29 13:03:52 +02:00
devirt2.ll ThinLTO: Fix inline assembly references to static functions with CFI 2021-08-03 11:35:30 -07:00
devirt_alias.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_available_externally.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_check.ll [WPD] Add an optional checking mode for debugging devirtualization 2021-02-17 16:46:15 -08:00
devirt_external_comdat_same_guid.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_local_same_guid.ll
devirt_multiple_type_test.ll [WPD] Allow virtual calls to be analyzed with multiple type tests 2020-06-24 10:51:24 -07:00
devirt_promote.ll [test] Fix unused FileCheck prefix in ThinLTO test 2020-11-02 09:06:36 -08:00
devirt_promote_legacy.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_pure_virtual_base.ll [WPD] Fix handling of pure virtual base class 2021-02-23 16:07:09 -08:00
devirt_single_hybrid.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_vcall_vis_hidden.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
devirt_vcall_vis_public.ll Restore "[LTO/WPD] Enable aggressive WPD under LTO option" 2020-01-27 07:55:05 -08:00
diagnostic-handler-remarks-with-hotness.ll [InlineAdvisor] Add single quotes around caller/callee names 2021-08-10 11:51:31 -07:00
diagnostic-handler-remarks.ll [InlineAdvisor] Add single quotes around caller/callee names 2021-08-10 11:51:31 -07:00
dicompositetype-unique-alias.ll
dicompositetype-unique.ll
dicompositetype-unique2.ll
distributed_import.ll
distributed_indexes.ll [ThinLTO] Compute the basic block count across modules. 2020-05-28 10:33:05 -07:00
dontcall.ll [Clang] add support for error+warning fn attrs 2021-08-25 10:34:18 -07:00
dot-dumper-full-lto.ll
dot-dumper.ll [ThinLTO] Always import constants 2020-01-15 19:29:01 +03:00
dot-dumper2.ll
drop-debug-info.ll
dsolocal_dllimport.ll
emit_imports.ll
empty-module.ll [LTO] Suppress emission of empty combined module by default 2020-05-04 18:31:09 -07:00
empty_module_with_cache.ll
export.ll
funcimport-debug.ll
funcimport-stats.ll
funcimport-tbaa.ll
funcimport.ll
funcimport2.ll
funcimport_alwaysinline.ll [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
function_entry_count.ll
globals-import-blockaddr.ll [ThinLTO] Disallow importing for functions with indir branch to block address 2021-07-28 18:02:48 -07:00
globals-import-const-fold.ll
globals-import.ll
guid_collision.ll
import-constant.ll Preserve the lexical order for global variables during llvm-link merge 2021-04-26 10:11:34 -07:00
import-dsolocal.ll [ThinLTO] Respect ClearDSOLocalOnDeclarations for unimported functions 2021-07-02 17:08:25 -07:00
import-metadata.ll [ThinLTO] Fix a metadata lost issue with DICompileUnit import. 2020-09-02 14:40:41 -07:00
import-ro-constant.ll [ThinLTO] Always import constants 2020-01-15 19:29:01 +03:00
import-symver.ll [ThinLTO] Import symver directives for imported symbols (PR48214) 2020-12-02 14:56:43 +01:00
import_opaque_type.ll
index-const-prop-O0.ll
index-const-prop-alias.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-cache.ll
index-const-prop-comdat.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-dead.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-full-lto.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-gvref-pie.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-gvref.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-ldst.ll [ThinLTO] Drop dso_local if a GlobalVariable satisfies isDeclarationForLinker() 2020-04-07 15:46:01 -07:00
index-const-prop-linkage.ll [ThinLTO] Respect ClearDSOLocalOnDeclarations for unimported functions 2021-07-02 17:08:25 -07:00
index-const-prop.ll Preserve the lexical order for global variables during llvm-link merge 2021-04-26 10:11:34 -07:00
index-const-prop2.ll Preserve the lexical order for global variables during llvm-link merge 2021-04-26 10:11:34 -07:00
internalize.ll [ThinLTO][Legacy] Compute PreservedGUID based on IRName in Symtab 2020-08-26 10:15:00 -07:00
lazyload_metadata.ll
linkonce_aliasee_ref_import.ll
linkonce_odr_unnamed_addr.ll
linkonce_resolution_comdat.ll
lit.local.cfg
llvm.used.ll
load-store-caching.ll [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
local_name_conflict.ll
local_name_conflict_var.ll
mangled_symbol.ll [ThinLTO][Legacy] Compute PreservedGUID based on IRName in Symtab 2020-08-26 10:15:00 -07:00
merge-triple.ll
module_asm2.ll
module_asm_glob.ll
module_summary_graph_traits.ll Fix [ADT][NFC] SCCIterator: Change hasLoop() to hasCycle() 2020-03-01 19:35:58 +02:00
newpm-basic.ll [LTO] Support new PM in ThinLTOCodeGenerator. 2021-06-09 10:05:14 +01:00
nodevirt-nonpromoted-typeid.ll Restore "[WPD/LowerTypeTests] Delay lowering/removal of type tests until after ICP" 2020-07-14 12:16:57 -07:00
noinline.ll
nossp.ll [ThinLTO][test] Fix X86/nossp.ll after D91816 2020-12-02 13:13:58 -08:00
not-internalized.ll
personality-local.ll
personality.ll
pr35472.ll
prefix_replace.ll
printer.ll [NewPM] Cleanup IR printing instrumentation 2021-04-15 09:50:55 -07:00
pseudo-probe-desc-import.ll [CSSPGO] Do not import pseudo probe desc in thinLTO 2021-07-13 18:26:36 -07:00
reference_non_importable.ll
referenced_by_constant.ll [ThinLTO] Disable "Always import constants" due to compile time issues 2020-01-30 10:12:48 -08:00
save_objects.ll
section.ll
strong_non_prevailing.ll Reland "[llvm-nm] Don't report "no symbols" error for files that contain symbols" 2020-01-17 10:08:42 -08:00
thinlto-internalize-doublepromoted.ll
thinlto-internalize-used.ll
tli-nobuiltin.ll
type_test_noindircall.ll Restore "[WPD/LowerTypeTests] Delay lowering/removal of type tests until after ICP" 2020-07-14 12:16:57 -07:00
visibility-elf.ll [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
visibility-macho.ll [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
weak_externals.ll
weak_globals_import.ll [ThinLTO] Fix import of multiply defined global variables 2021-02-21 18:34:12 +02:00
weak_resolution.ll [ThinLTO][Legacy] Compute PreservedGUID based on IRName in Symtab 2020-08-26 10:15:00 -07:00
weak_resolution_single.ll [ThinLTO][Legacy] Compute PreservedGUID based on IRName in Symtab 2020-08-26 10:15:00 -07:00
writeonly-with-refs.ll
writeonly.ll Preserve the lexical order for global variables during llvm-link merge 2021-04-26 10:11:34 -07:00
writeonly2.ll Preserve the lexical order for global variables during llvm-link merge 2021-04-26 10:11:34 -07:00