Don't ignore options when diffing translation units (.bi files).
authorGiuliano Procida <gprocida@google.com>
Mon, 3 Feb 2020 12:04:39 +0000 (12:04 +0000)
committerDodji Seketeli <dodji@redhat.com>
Mon, 3 Feb 2020 13:08:26 +0000 (14:08 +0100)
There was an inconsistency in the way the diff context was used for
different file types. This change eliminates this and so .bi files now
have all the command line options applied to their diffs.

* tests/data/Makefile.am: Add test case files.
* tests/data/test-abidiff-exit/test-loc-*: New test cases.
* tests/test-abidiff-exit.cc (in_out_specs): Add new test cases.
* tools/abidiff.cc (main): Use populated ctxt for translation unit
diff.

Signed-off-by: Giuliano Procida <gprocida@google.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
tests/data/Makefile.am
tests/data/test-abidiff-exit/test-loc-v0.bi [new file with mode: 0644]
tests/data/test-abidiff-exit/test-loc-v1.bi [new file with mode: 0644]
tests/data/test-abidiff-exit/test-loc-with-locs-report.txt [new file with mode: 0644]
tests/data/test-abidiff-exit/test-loc-without-locs-report.txt [new file with mode: 0644]
tests/test-abidiff-exit.cc
tools/abidiff.cc

index 1ae9d31a4cd424330ae3ed3acd40d96f6e0aff25..1f574d2e3eee19ec6156af0068a7e9c11241c922 100644 (file)
@@ -103,6 +103,10 @@ test-abidiff-exit/test2-filtered-removed-fns-v1.c \
 test-abidiff-exit/test2-filtered-removed-fns-v0.o \
 test-abidiff-exit/test2-filtered-removed-fns-v1.o \
 test-abidiff-exit/test2-filtered-removed-fns.abignore \
+test-abidiff-exit/test-loc-v0.bi \
+test-abidiff-exit/test-loc-v1.bi \
+test-abidiff-exit/test-loc-with-locs-report.txt \
+test-abidiff-exit/test-loc-without-locs-report.txt \
 \
 test-diff-dwarf/test0-v0.cc            \
 test-diff-dwarf/test0-v0.o                     \
diff --git a/tests/data/test-abidiff-exit/test-loc-v0.bi b/tests/data/test-abidiff-exit/test-loc-v0.bi
new file mode 100644 (file)
index 0000000..da3a7c6
--- /dev/null
@@ -0,0 +1,13 @@
+<abi-corpus path='test-loc-v0.o' architecture='elf-amd-x86_64'>
+  <elf-function-symbols>
+    <elf-symbol name='x' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+  </elf-function-symbols>
+  <abi-instr version='1.0' address-size='64' path='test-loc-v0.c' comp-dir-path='/tmp' language='LANG_C99'>
+    <type-decl name='unsigned char' size-in-bits='8' id='type-id-1'/>
+    <type-decl name='void' id='type-id-2'/>
+    <function-decl name='x' mangled-name='x' filepath='test-loc-v0.c' line='1' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='x'>
+      <parameter type-id='type-id-1' name='y' filepath='test-loc-v0.c' line='1' column='1'/>
+      <return type-id='type-id-2'/>
+    </function-decl>
+  </abi-instr>
+</abi-corpus>
diff --git a/tests/data/test-abidiff-exit/test-loc-v1.bi b/tests/data/test-abidiff-exit/test-loc-v1.bi
new file mode 100644 (file)
index 0000000..43ac6ec
--- /dev/null
@@ -0,0 +1,13 @@
+<abi-corpus path='test-loc-v1.o' architecture='elf-amd-x86_64'>
+  <elf-function-symbols>
+    <elf-symbol name='x' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+  </elf-function-symbols>
+  <abi-instr version='1.0' address-size='64' path='test-loc-v1.c' comp-dir-path='/tmp' language='LANG_C99'>
+    <type-decl name='signed char' size-in-bits='8' id='type-id-1'/>
+    <type-decl name='void' id='type-id-2'/>
+    <function-decl name='x' mangled-name='x' filepath='test-loc-v1.c' line='1' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='x'>
+      <parameter type-id='type-id-1' name='y' filepath='test-loc-v1.c' line='1' column='1'/>
+      <return type-id='type-id-2'/>
+    </function-decl>
+  </abi-instr>
+</abi-corpus>
diff --git a/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt b/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt
new file mode 100644 (file)
index 0000000..d62e405
--- /dev/null
@@ -0,0 +1,12 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+  [C]'function void x(unsigned char)' at test-loc-v1.c:1:1 has some indirect sub-type changes:
+    parameter 1 of type 'unsigned char' changed:
+      type name changed from 'unsigned char' to 'signed char'
+      type size hasn't changed
+
+
+
diff --git a/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt b/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt
new file mode 100644 (file)
index 0000000..5a72047
--- /dev/null
@@ -0,0 +1,12 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+  [C]'function void x(unsigned char)' has some indirect sub-type changes:
+    parameter 1 of type 'unsigned char' changed:
+      type name changed from 'unsigned char' to 'signed char'
+      type size hasn't changed
+
+
+
index e6df5933046230f0829936ef1409160c3d419bb2..4cef727e692d1ede21e514a7eb0ab800ade47ac6 100644 (file)
@@ -93,6 +93,24 @@ InOutSpec in_out_specs[] =
     "data/test-abidiff-exit/test2-filtered-removed-fns-report1.txt",
     "output/test-abidiff-exit/test2-filtered-removed-fns-report1.txt"
   },
+  {
+    "data/test-abidiff-exit/test-loc-v0.bi",
+    "data/test-abidiff-exit/test-loc-v1.bi",
+    "",
+    "",
+    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    "data/test-abidiff-exit/test-loc-with-locs-report.txt",
+    "output/test-abidiff-exit/test-loc-with-locs-report.txt"
+  },
+  {
+    "data/test-abidiff-exit/test-loc-v0.bi",
+    "data/test-abidiff-exit/test-loc-v1.bi",
+    "",
+    "--no-show-locs",
+    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    "data/test-abidiff-exit/test-loc-without-locs-report.txt",
+    "output/test-abidiff-exit/test-loc-without-locs-report.txt"
+  },
   {0, 0, 0 ,0,  abigail::tools_utils::ABIDIFF_OK, 0, 0}
 };
 
index 1d02f65e76971cec89c4cd31f8eda72da079a305..32f793e8a5147e9425554ea3ca54408fc646c915 100644 (file)
@@ -1243,8 +1243,7 @@ main(int argc, char* argv[])
 
       if (t1)
        {
-         diff_context_sptr diff_ctxt(new diff_context);
-         translation_unit_diff_sptr diff = compute_diff(t1, t2, diff_ctxt);
+         translation_unit_diff_sptr diff = compute_diff(t1, t2, ctxt);
          if (diff->has_changes())
            diff->report(cout);
        }