Index: llvm/test/tools/llvm-ar/mri-create-overwrite.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-ar/mri-create-overwrite.test @@ -0,0 +1,84 @@ +## Show that CREATE/CREATETHIN overwrite existing files appropriately. + +# RUN: touch %t/1.txt +# RUN: touch %t/2.txt + +# ARCH: ! +# THIN: ! +# ONE: 1.txt +# TWO: 2.txt + +## Show that an existing file that is not an archive is overwritten by CREATE. +# RUN: rm -f %t/test.a +# RUN: touch %t/test.a +# RUN: echo "CREATE %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/1.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=ARCH,ONE + +## Show that an existing file that is not an archive is overwritten by CREATETHIN. +# RUN: rm -f %t/test.a +# RUN: touch %t/test.a +# RUN: echo "CREATETHIN %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/1.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=THIN,ONE + +## Show that an existing regular archive is overwritten by CREATE. +# RUN: rm -f %t/test.a +# RUN: llvm-ar cr %t/test.a %t/1.txt +# RUN: echo "CREATE %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: llvm-ar tv %t/test.a +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=ARCH,TWO --implicit-check-not=1.txt + +## Show that an existing regular archive is overwritten by CREATETHIN. +# RUN: rm -f %t/test.a +# RUN: llvm-ar cr %t/test.a %t/1.txt +# RUN: echo "CREATETHIN %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=THIN,TWO --implicit-check-not=1.txt + +## Show that an existing thin archive is overwritten by CREATE. +# RUN: rm -f %t/test.a +# RUN: llvm-ar crT %t/test.a %t/1.txt +# RUN: echo "CREATE %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=ARCH,TWO --implicit-check-not=1.txt + +## Show that an existing thin archive is overwritten by CREATETHIN. +# RUN: rm -f %t/test.a +# RUN: llvm-ar crT %t/test.a %t/1.txt +# RUN: echo "CREATETHIN %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=THIN,TWO --implicit-check-not=1.txt + +## Show that the output is not overwritten without a SAVE. +# RUN: rm -f %t/test.a +# RUN: llvm-ar crT %t/test.a %t/1.txt +# RUN: echo "CREATE %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=THIN,ONE --implicit-check-not=2.txt + +## Show that only the last mentioned file is overwritten. +# RUN: rm -f %t/test.a +# RUN: llvm-ar crT %t/test.a %t/1.txt +# RUN: echo "CREATE %t/test.a" > %t/test.mri +# RUN: echo "ADDMOD %t/1.txt" >> %t/test.mri +# RUN: echo "CREATETHIN %t/last.a" > %t/test.mri +# RUN: echo "ADDMOD %t/2.txt" >> %t/test.mri +# RUN: echo "SAVE" >> %t/test.mri +# RUN: llvm-ar -M < %t/test.mri +# RUN: FileCheck --input-file=%t/test.a %s --check-prefixes=THIN,ONE --implicit-check-not=2.txt +# RUN: FileCheck --input-file=%t/last.a %s --check-prefixes=THIN,TWO --implicit-check-not=1.txt Index: llvm/tools/llvm-ar/llvm-ar.cpp =================================================================== --- llvm/tools/llvm-ar/llvm-ar.cpp +++ llvm/tools/llvm-ar/llvm-ar.cpp @@ -1052,7 +1052,8 @@ } } - performOperation(Operation, nullptr, nullptr, NewMembers); + performOperation(Operation, /*OldArchive*/ nullptr, /*OldArchiveBuf*/ nullptr, + NewMembers); return 0; } @@ -1134,7 +1135,8 @@ // Nothing to do if not saved. if (Saved) - performOperation(ReplaceOrInsert, &NewMembers); + performOperation(ReplaceOrInsert, /*OldArchive*/ nullptr, + /*OldArchiveBuf*/ nullptr, &NewMembers); exit(0); }