aboutsummaryrefslogtreecommitdiff
path: root/libcpp/files.c
diff options
context:
space:
mode:
authorAlfie Richards <alfie.richards@arm.com>2025-04-02 13:37:02 +0000
committerAlfie Richards <alfie.richards@arm.com>2025-10-02 08:29:06 +0000
commit73888cefe6da6531c590216c74ea5e04521897cb (patch)
treec023a9bfba52349d3b820f6b55989c4d88b2fbe0 /libcpp/files.c
parent5f08e49653f5c04df39faef23bba4abfb555e053 (diff)
downloadgcc-73888cefe6da6531c590216c74ea5e04521897cb.zip
gcc-73888cefe6da6531c590216c74ea5e04521897cb.tar.gz
gcc-73888cefe6da6531c590216c74ea5e04521897cb.tar.bz2
c: Add target_version attribute support.
This commit introduces support for the target_version attribute in the c frontend, following the behavior defined in the Arm C Language Extension. Key changes include: - During pushdecl, the compiler now checks whether the current symbol is part of a multiversioned set. - New versions are added to the function multiversioning (FMV) set, and the symbol binding is updated to include the default version (if present). This means the binding for a multiversioned symbol will always reference the default version (if present), as it defines the scope and signature for the entire set. - Pre-existing versions are merged with their previous version (or diagnosed). - Lookup logic is adjusted to prevent resolving non-default versions. - start_decl and start_function are updated to handle marking and mangling of versioned functions. - c_parse_final_cleanups now includes a call to process_same_body_aliases. This has no functional impact other than setting cpp_implicit_aliases_done on all nodes, which is necessary for certain shared FMV logic. gcc/c/ChangeLog: * c-decl.cc (maybe_mark_function_versioned): New function. (merge_decls): Preserve DECL_FUNCTION_VERSIONED in merging. (duplicate_decls): Add check and diagnostic for unmergable version decls. (pushdecl): Add FMV target_version logic. (lookup_name): Don't resolve non-default versions. (start_decl): Mark and mangle versioned functions. (start_function): Mark and mangle versioned functions. (c_parse_final_cleanups): Add call to process_same_body_aliases. gcc/testsuite/ChangeLog: * gcc.target/aarch64/mv-1.c: New test. * gcc.target/aarch64/mv-and-mvc1.c: New test. * gcc.target/aarch64/mv-and-mvc2.c: New test. * gcc.target/aarch64/mv-and-mvc3.c: New test. * gcc.target/aarch64/mv-and-mvc4.c: New test. * gcc.target/aarch64/mv-symbols1.c: New test. * gcc.target/aarch64/mv-symbols10.c: New test. * gcc.target/aarch64/mv-symbols11.c: New test. * gcc.target/aarch64/mv-symbols12.c: New test. * gcc.target/aarch64/mv-symbols13.c: New test. * gcc.target/aarch64/mv-symbols14.c: New test. * gcc.target/aarch64/mv-symbols2.c: New test. * gcc.target/aarch64/mv-symbols3.c: New test. * gcc.target/aarch64/mv-symbols4.c: New test. * gcc.target/aarch64/mv-symbols5.c: New test. * gcc.target/aarch64/mv-symbols6.c: New test. * gcc.target/aarch64/mv-symbols7.c: New test. * gcc.target/aarch64/mv-symbols8.c: New test. * gcc.target/aarch64/mv-symbols9.c: New test. * gcc.target/aarch64/mvc-symbols1.c: New test. * gcc.target/aarch64/mvc-symbols2.c: New test. * gcc.target/aarch64/mvc-symbols3.c: New test. * gcc.target/aarch64/mvc-symbols4.c: New test.
Diffstat (limited to 'libcpp/files.c')
0 files changed, 0 insertions, 0 deletions