@Test
    public void testVariableLocalConflict4() throws Exception {

		AddressSpace space = program.getAddressFactory().getDefaultAddressSpace();
		Listing listing = program.getListing();
		Function func1 = listing.getFunctionAt(space.getAddress(0x100415aL));
		Function func2 = listing.getFunctionAt(space.getAddress(0x1002cf5L));

		func1.addLocalVariable(new LocalVariableImpl(null, QWordDataType.dataType, -0x20, program),
			SourceType.DEFAULT);

		func2.replaceParameters(Arrays.asList(func1.getParameters()),
			FunctionUpdateType.CUSTOM_STORAGE, false, func1.getSignatureSource());
		func2.addLocalVariable(new LocalVariableImpl(null, DWordDataType.dataType, -0x1e, program),
			SourceType.DEFAULT);

		FunctionVariableStorageConflicts vsc = new FunctionVariableStorageConflicts(func1, func2,
			false, TaskMonitor.DUMMY);
		assertTrue("Local conflict expected", vsc.hasOverlapConflict());

		List<Pair<List<Variable>, List<Variable>>> overlappingVariables =
			vsc.getOverlappingVariables();
		assertEquals(1, overlappingVariables.size());
		Pair<List<Variable>, List<Variable>> pair = overlappingVariables.get(0);

		assertEquals("Expected two locals to overlap", 1, pair.first.size());
		Variable var1 = pair.first.get(0);
		assertTrue("Expected single local to overlap", !(var1 instanceof Parameter));
		assertEquals(-0x20, var1.getVariableStorage().getStackOffset());

		assertEquals("Expected single local overlap", 1, pair.second.size());
		Variable var2 = pair.second.get(0);
		assertTrue("Expected single local to overlap", !(var2 instanceof Parameter));
		assertEquals(-0x1e, var2.getVariableStorage().getStackOffset());
	}
Function@0x100415a
	
	             string *        Stack[0x8]:4        destStr                 XREF[2,0]:   0100416c(R),       
	                                                                                      01004189(R)  
	             undefined       Stack[0xc]:1        parm_3                  XREF[1,0]:   01004186(R)        
	             undefined       Stack[0x10]:1       parm_4                  XREF[1,0]:   0100419c(R)        
	             dword           Stack[-0x4]:4       i                       XREF[3,0]:   01004169(R),       
	                                                                                      01004180(R), 
	                                                                                      01004196(R)  
	             float           Stack[-0x8]:4       count                   XREF[3,0]:   01004162(R),       
	                                                                                      0100417c(R), 
	                                                                                      010041a1(R)  
	             byte            Stack[-0xc]:1       formatCount           
	             
	Function@0x1002cf5L
	
	             IntStruct * *   Stack[0x8]:4        param_1                 XREF[2,0]:   01002d3e(R),       
	                                                                                      01002d5b(R)  
	             byte[2][1][2]   Stack[0xc]:4        param_2                 XREF[2,0]:   01002d3a(R),       
	                                                                                      01002d55(R)  
	             undefined * *   Stack[0x10]:4       param_3                 XREF[3,0]:   01002d11(R),       
	                                                                                      01002d2f(R), 
	                                                                                      01002d58(R)  
	             undefined * *   Stack[0x14]:4       param_4                 XREF[3,0]:   01002cf8(R),       
	                                                                                      01002d06(R), 
	                                                                                      01002d2c(R)  
	             CoolUnion[3][2  Stack[0x18]:2880    param_5                 XREF[2,0]:   01002d37(R),
Ghidra/Features/Base/src/test/java/ghidra/app/merge/listing/VariableStorageConflictsTest.java