Summary: | libstdc++ doesn't pass self check | ||
---|---|---|---|
Product: | libabigail | Reporter: | Ben Woodard <woodard> |
Component: | default | Assignee: | Dodji Seketeli <dodji> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | libabigail |
Priority: | P2 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Bug Depends on: | |||
Bug Blocks: | 27019 |
Description
Ben Woodard
2022-01-11 01:55:15 UTC
commit 72b46b2600ef1f7af54b6d5f7dd6afc23c7cf2c3 Author: Dodji Seketeli <dodji@redhat.com> Date: Thu Jun 23 12:13:05 2022 +0200 ir: Make canonicalization stable wrt typedefs in fn return types In the grand scheme of things, two function return types can be equal modulo typedefs. Because those two function textual representations are different, the two overall function types would end up having different canonical types and thus, the two functions would be considered as having different sub-types. The harmless change pass would then kick in and flag that change as harmless. But then, "abidw --abidiff" that is used for testing purposes would still be not happy. This patch strips typedefs off of return types of function types when the string representation is to be used for internal (e.g, type canonicalization) purposes. The fix for this change uncovered another issue: When setting the naming typedefs for an (anonymous) C++ class, the qualified name of the class was wrongly being set to the qualified name of the typedef. Only the name of the class should be affected, in essence. The qualified name would, ONLY as a result of the name change, be adjusted. This patch fixes those issues and adjusts the test suite accordingly. * src/abg-ir.cc (get_function_type_name, get_method_type_name): When the function type name is for internal purposes, strip potential typedefs off. (equal): In the overload for function_type, strip potential typedefs off of return types before comparing them. (decl_base::set_naming_typedef): Properly adjust the qualified name of the type to which a naming typedef is being set. * tests/data/test-alt-dwarf-file/libstdc++/libstdc++-report.txt: New reference test output. * tests/data/test-alt-dwarf-file/libstdc++/usr/lib/debug/usr/lib64/libstdc++.so.6.0.30-12.1.1-1.fc37.x86_64.debug: New binary test input. * tests/data/test-alt-dwarf-file/libstdc++/usr/lib64/libstdc++.so.6.0.30: New binary test input. * tests/data/Makefile.am: Add the new test material to source distribution. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise. * tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise. * tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise. Signed-off-by: Dodji Seketeli <dodji@redhat.com> |