diff options
Diffstat (limited to 'test')
608 files changed, 4120 insertions, 3071 deletions
diff --git a/test/BlocksRuntime/block-static.c b/test/BlocksRuntime/block-static.c index d38c816cf..6c51528ac 100644 --- a/test/BlocksRuntime/block-static.c +++ b/test/BlocksRuntime/block-static.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // testfilerunner CONFIG diff --git a/test/BlocksRuntime/blockimport.c b/test/BlocksRuntime/blockimport.c index 178fce439..1b860ef21 100644 --- a/test/BlocksRuntime/blockimport.c +++ b/test/BlocksRuntime/blockimport.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * blockimport.c diff --git a/test/BlocksRuntime/byrefaccess.c b/test/BlocksRuntime/byrefaccess.c index 456555333..b03c6a8b5 100644 --- a/test/BlocksRuntime/byrefaccess.c +++ b/test/BlocksRuntime/byrefaccess.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // byrefaccess.m diff --git a/test/BlocksRuntime/byrefcopy.c b/test/BlocksRuntime/byrefcopy.c index 513b63c27..b1110c996 100644 --- a/test/BlocksRuntime/byrefcopy.c +++ b/test/BlocksRuntime/byrefcopy.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // byrefcopy.m diff --git a/test/BlocksRuntime/byrefcopycopy.c b/test/BlocksRuntime/byrefcopycopy.c index d6fafc152..1c03f6ca8 100644 --- a/test/BlocksRuntime/byrefcopycopy.c +++ b/test/BlocksRuntime/byrefcopycopy.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG rdar://6255170 diff --git a/test/BlocksRuntime/byrefcopyinner.c b/test/BlocksRuntime/byrefcopyinner.c index 07770933a..004474750 100644 --- a/test/BlocksRuntime/byrefcopyinner.c +++ b/test/BlocksRuntime/byrefcopyinner.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <Block.h> #include <stdio.h> diff --git a/test/BlocksRuntime/byrefcopyint.c b/test/BlocksRuntime/byrefcopyint.c index d632f88a0..b9148cb66 100644 --- a/test/BlocksRuntime/byrefcopyint.c +++ b/test/BlocksRuntime/byrefcopyint.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * byrefcopyint.c diff --git a/test/BlocksRuntime/byrefcopystack.c b/test/BlocksRuntime/byrefcopystack.c index d119afa36..745bdf173 100644 --- a/test/BlocksRuntime/byrefcopystack.c +++ b/test/BlocksRuntime/byrefcopystack.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // byrefcopystack.m diff --git a/test/BlocksRuntime/byrefsanity.c b/test/BlocksRuntime/byrefsanity.c index dfa16b0dd..a37fa2571 100644 --- a/test/BlocksRuntime/byrefsanity.c +++ b/test/BlocksRuntime/byrefsanity.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG diff --git a/test/BlocksRuntime/byrefstruct.c b/test/BlocksRuntime/byrefstruct.c index a3dc44e2c..d30207e2d 100644 --- a/test/BlocksRuntime/byrefstruct.c +++ b/test/BlocksRuntime/byrefstruct.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // CONFIG diff --git a/test/BlocksRuntime/c99.c b/test/BlocksRuntime/c99.c index 8f31ab3fd..7370684ba 100644 --- a/test/BlocksRuntime/c99.c +++ b/test/BlocksRuntime/c99.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // c99.m diff --git a/test/BlocksRuntime/cast.c b/test/BlocksRuntime/cast.c index 5bef2c19d..09175a757 100644 --- a/test/BlocksRuntime/cast.c +++ b/test/BlocksRuntime/cast.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * cast.c diff --git a/test/BlocksRuntime/constassign.c b/test/BlocksRuntime/constassign.c index 537cb2df0..932afce9b 100644 --- a/test/BlocksRuntime/constassign.c +++ b/test/BlocksRuntime/constassign.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // constassign.c diff --git a/test/BlocksRuntime/copy-block-literal-rdar6439600.c b/test/BlocksRuntime/copy-block-literal-rdar6439600.c index 6fa488eee..9eebe7aa0 100644 --- a/test/BlocksRuntime/copy-block-literal-rdar6439600.c +++ b/test/BlocksRuntime/copy-block-literal-rdar6439600.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG open rdar://6439600 diff --git a/test/BlocksRuntime/copyconstructor.C b/test/BlocksRuntime/copyconstructor.C index 626d33e80..c3917315d 100644 --- a/test/BlocksRuntime/copyconstructor.C +++ b/test/BlocksRuntime/copyconstructor.C @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stdio.h> #include <Block.h> diff --git a/test/BlocksRuntime/copynull.c b/test/BlocksRuntime/copynull.c index c49e499f3..478e300d4 100644 --- a/test/BlocksRuntime/copynull.c +++ b/test/BlocksRuntime/copynull.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * copynull.c diff --git a/test/BlocksRuntime/dispatch_async.c b/test/BlocksRuntime/dispatch_async.c index e3e517c54..a6f9c1f75 100644 --- a/test/BlocksRuntime/dispatch_async.c +++ b/test/BlocksRuntime/dispatch_async.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <CoreFoundation/CoreFoundation.h> diff --git a/test/BlocksRuntime/dispatch_call_Block_with_release.c b/test/BlocksRuntime/dispatch_call_Block_with_release.c index 9e06f69ba..21e810f3c 100644 --- a/test/BlocksRuntime/dispatch_call_Block_with_release.c +++ b/test/BlocksRuntime/dispatch_call_Block_with_release.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stdio.h> #include <Block.h> diff --git a/test/BlocksRuntime/fail.c b/test/BlocksRuntime/fail.c index 28dbc2d15..aec0cfcfa 100644 --- a/test/BlocksRuntime/fail.c +++ b/test/BlocksRuntime/fail.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * fail.c diff --git a/test/BlocksRuntime/flagsisa.c b/test/BlocksRuntime/flagsisa.c index 5d4b2dcb4..29148b27f 100644 --- a/test/BlocksRuntime/flagsisa.c +++ b/test/BlocksRuntime/flagsisa.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stdio.h> diff --git a/test/BlocksRuntime/globalexpression.c b/test/BlocksRuntime/globalexpression.c index eeedd75e7..759a9d29b 100644 --- a/test/BlocksRuntime/globalexpression.c +++ b/test/BlocksRuntime/globalexpression.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // testfilerunner CONFIG diff --git a/test/BlocksRuntime/goto.c b/test/BlocksRuntime/goto.c index 7e5b08adb..cdc40d966 100644 --- a/test/BlocksRuntime/goto.c +++ b/test/BlocksRuntime/goto.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * goto.c diff --git a/test/BlocksRuntime/hasdescriptor.c b/test/BlocksRuntime/hasdescriptor.c index 429adb9bd..445b5f462 100644 --- a/test/BlocksRuntime/hasdescriptor.c +++ b/test/BlocksRuntime/hasdescriptor.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception diff --git a/test/BlocksRuntime/josh.C b/test/BlocksRuntime/josh.C index dbc7369e8..8a1854c9e 100644 --- a/test/BlocksRuntime/josh.C +++ b/test/BlocksRuntime/josh.C @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG C++ GC RR open rdar://6347910 diff --git a/test/BlocksRuntime/k-and-r.c b/test/BlocksRuntime/k-and-r.c index 16b9cc643..2661eece3 100644 --- a/test/BlocksRuntime/k-and-r.c +++ b/test/BlocksRuntime/k-and-r.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // CONFIG error: incompatible block pointer types assigning diff --git a/test/BlocksRuntime/large-struct.c b/test/BlocksRuntime/large-struct.c index 1867bd02d..815dcfc8a 100644 --- a/test/BlocksRuntime/large-struct.c +++ b/test/BlocksRuntime/large-struct.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // CONFIG diff --git a/test/BlocksRuntime/localisglobal.c b/test/BlocksRuntime/localisglobal.c index 75a79dff4..c4e5628b5 100644 --- a/test/BlocksRuntime/localisglobal.c +++ b/test/BlocksRuntime/localisglobal.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * localisglobal.c diff --git a/test/BlocksRuntime/macro.c b/test/BlocksRuntime/macro.c index 988c0689b..06732e752 100644 --- a/test/BlocksRuntime/macro.c +++ b/test/BlocksRuntime/macro.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG open rdar://6718399 #include <Block.h> diff --git a/test/BlocksRuntime/makefile b/test/BlocksRuntime/makefile index 2734bcae3..f40ca4d1c 100644 --- a/test/BlocksRuntime/makefile +++ b/test/BlocksRuntime/makefile @@ -1,8 +1,7 @@ # -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception CCDIR=/usr/bin #CCDIR=/Volumes/Keep/gcc/usr/bin diff --git a/test/BlocksRuntime/modglobal.c b/test/BlocksRuntime/modglobal.c index 562d5a5cc..c76e8b6c7 100644 --- a/test/BlocksRuntime/modglobal.c +++ b/test/BlocksRuntime/modglobal.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stdio.h> // CONFIG diff --git a/test/BlocksRuntime/nestedimport.c b/test/BlocksRuntime/nestedimport.c index e8066922f..01dfa7e7d 100644 --- a/test/BlocksRuntime/nestedimport.c +++ b/test/BlocksRuntime/nestedimport.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // nestedimport.m diff --git a/test/BlocksRuntime/nullblockisa.c b/test/BlocksRuntime/nullblockisa.c index ba0282e82..5bf7240cb 100644 --- a/test/BlocksRuntime/nullblockisa.c +++ b/test/BlocksRuntime/nullblockisa.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // nullblockisa.m diff --git a/test/BlocksRuntime/objectRRGC.c b/test/BlocksRuntime/objectRRGC.c index 2cefea2af..a9665c8e9 100644 --- a/test/BlocksRuntime/objectRRGC.c +++ b/test/BlocksRuntime/objectRRGC.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * objectRRGC.c diff --git a/test/BlocksRuntime/objectassign.c b/test/BlocksRuntime/objectassign.c index 1c4f48414..c9e5a3ff6 100644 --- a/test/BlocksRuntime/objectassign.c +++ b/test/BlocksRuntime/objectassign.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * objectassign.c diff --git a/test/BlocksRuntime/orbars.c b/test/BlocksRuntime/orbars.c index 18a924445..e7c00183c 100644 --- a/test/BlocksRuntime/orbars.c +++ b/test/BlocksRuntime/orbars.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * orbars.c diff --git a/test/BlocksRuntime/rdar6396238.c b/test/BlocksRuntime/rdar6396238.c index 280415643..2ba0dbf4b 100644 --- a/test/BlocksRuntime/rdar6396238.c +++ b/test/BlocksRuntime/rdar6396238.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG rdar://6396238 diff --git a/test/BlocksRuntime/rdar6405500.c b/test/BlocksRuntime/rdar6405500.c index 1ab4624bc..03fb43c6b 100644 --- a/test/BlocksRuntime/rdar6405500.c +++ b/test/BlocksRuntime/rdar6405500.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG rdar://6405500 diff --git a/test/BlocksRuntime/rdar6414583.c b/test/BlocksRuntime/rdar6414583.c index 2ada04d3d..671179aa5 100644 --- a/test/BlocksRuntime/rdar6414583.c +++ b/test/BlocksRuntime/rdar6414583.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG rdar://6414583 diff --git a/test/BlocksRuntime/recursive-block.c b/test/BlocksRuntime/recursive-block.c index 454ad4826..a93ceb6a7 100644 --- a/test/BlocksRuntime/recursive-block.c +++ b/test/BlocksRuntime/recursive-block.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stdio.h> #include <Block.h> diff --git a/test/BlocksRuntime/recursive-test.c b/test/BlocksRuntime/recursive-test.c index f79914863..473bdefbd 100644 --- a/test/BlocksRuntime/recursive-test.c +++ b/test/BlocksRuntime/recursive-test.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG open rdar://6416474 // was rdar://5847976 diff --git a/test/BlocksRuntime/recursiveassign.c b/test/BlocksRuntime/recursiveassign.c index f0070cbe5..df60704e0 100644 --- a/test/BlocksRuntime/recursiveassign.c +++ b/test/BlocksRuntime/recursiveassign.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * recursiveassign.c diff --git a/test/BlocksRuntime/reference.C b/test/BlocksRuntime/reference.C index f86f11e86..dcddf3aa8 100644 --- a/test/BlocksRuntime/reference.C +++ b/test/BlocksRuntime/reference.C @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #import <Block.h> #import <stdio.h> diff --git a/test/BlocksRuntime/rettypepromotion.c b/test/BlocksRuntime/rettypepromotion.c index 597eafe8b..1fc6b9c8b 100644 --- a/test/BlocksRuntime/rettypepromotion.c +++ b/test/BlocksRuntime/rettypepromotion.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * rettypepromotion.c diff --git a/test/BlocksRuntime/returnfunctionptr.c b/test/BlocksRuntime/returnfunctionptr.c index 6c7df631f..c4e764e62 100644 --- a/test/BlocksRuntime/returnfunctionptr.c +++ b/test/BlocksRuntime/returnfunctionptr.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // CONFIG rdar://6339747 but wasn't diff --git a/test/BlocksRuntime/shorthandexpression.c b/test/BlocksRuntime/shorthandexpression.c index bf4582072..5d9aac312 100644 --- a/test/BlocksRuntime/shorthandexpression.c +++ b/test/BlocksRuntime/shorthandexpression.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * shorthandexpression.c diff --git a/test/BlocksRuntime/sizeof.c b/test/BlocksRuntime/sizeof.c index 1f84fc16f..2bd1f4862 100644 --- a/test/BlocksRuntime/sizeof.c +++ b/test/BlocksRuntime/sizeof.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * sizeof.c diff --git a/test/BlocksRuntime/small-struct.c b/test/BlocksRuntime/small-struct.c index 434f3c179..618a1726c 100644 --- a/test/BlocksRuntime/small-struct.c +++ b/test/BlocksRuntime/small-struct.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // CONFIG diff --git a/test/BlocksRuntime/structmember.c b/test/BlocksRuntime/structmember.c index c451d3f34..b47f83d45 100644 --- a/test/BlocksRuntime/structmember.c +++ b/test/BlocksRuntime/structmember.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * structmember.c diff --git a/test/BlocksRuntime/testfilerunner.h b/test/BlocksRuntime/testfilerunner.h index d4e54f029..fd7113ae5 100644 --- a/test/BlocksRuntime/testfilerunner.h +++ b/test/BlocksRuntime/testfilerunner.h @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // testfilerunner.h diff --git a/test/BlocksRuntime/testfilerunner.m b/test/BlocksRuntime/testfilerunner.m index 459adf889..c3a9004c5 100644 --- a/test/BlocksRuntime/testfilerunner.m +++ b/test/BlocksRuntime/testfilerunner.m @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // testfilerunner.m diff --git a/test/BlocksRuntime/varargs-bad-assign.c b/test/BlocksRuntime/varargs-bad-assign.c index b978668b9..85a12a919 100644 --- a/test/BlocksRuntime/varargs-bad-assign.c +++ b/test/BlocksRuntime/varargs-bad-assign.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // HACK ALERT: gcc and g++ give different errors, referencing the line number to ensure that it checks for the right error; MUST KEEP IN SYNC WITH THE TEST diff --git a/test/BlocksRuntime/varargs.c b/test/BlocksRuntime/varargs.c index 01affc76e..a0f56a579 100644 --- a/test/BlocksRuntime/varargs.c +++ b/test/BlocksRuntime/varargs.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- // CONFIG diff --git a/test/BlocksRuntime/variadic.c b/test/BlocksRuntime/variadic.c index 1d80657e9..e2e273a75 100644 --- a/test/BlocksRuntime/variadic.c +++ b/test/BlocksRuntime/variadic.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * variadic.c diff --git a/test/BlocksRuntime/voidarg.c b/test/BlocksRuntime/voidarg.c index a8f034b47..92fba4f1a 100644 --- a/test/BlocksRuntime/voidarg.c +++ b/test/BlocksRuntime/voidarg.c @@ -1,8 +1,7 @@ // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception /* * voidarg.c diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2e239d54e..0d9ac5528 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,17 +14,13 @@ if(COMPILER_RT_BUILD_PROFILE AND COMPILER_RT_HAS_PROFILE) list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS profile) endif() -if(COMPILER_RT_STANDALONE_BUILD) - list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS FileCheck) -endif() - # When ANDROID, we build tests with the host compiler (i.e. CMAKE_C_COMPILER), # and run tests with tools from the host toolchain. if(NOT ANDROID) - if(NOT COMPILER_RT_STANDALONE_BUILD) + if(NOT COMPILER_RT_STANDALONE_BUILD AND NOT RUNTIMES_BUILD) # Use LLVM utils and Clang from the same build tree. list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS - clang clang-headers FileCheck count not llvm-config llvm-nm llvm-objdump + clang clang-resource-headers FileCheck count not llvm-config llvm-nm llvm-objdump llvm-readobj llvm-symbolizer compiler-rt-headers sancov) if (WIN32) list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS KillTheDoctor) @@ -77,6 +73,9 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS) if(COMPILER_RT_BUILD_XRAY) compiler_rt_test_runtime(xray) endif() + if(COMPILER_RT_BUILD_CRT AND COMPILER_RT_HAS_CRT) + add_subdirectory(crt) + endif() # ShadowCallStack does not yet provide a runtime with compiler-rt, the tests # include their own minimal runtime add_subdirectory(shadowcallstack) diff --git a/test/asan/CMakeLists.txt b/test/asan/CMakeLists.txt index 6c22ef3b1..2a44aebd5 100644 --- a/test/asan/CMakeLists.txt +++ b/test/asan/CMakeLists.txt @@ -45,14 +45,8 @@ if(OS_NAME MATCHES "SunOS") endif() foreach(arch ${ASAN_TEST_ARCH}) - if(ANDROID) - set(ASAN_TEST_TARGET_ARCH ${arch}-android) - else() - set(ASAN_TEST_TARGET_ARCH ${arch}) - endif() - + set(ASAN_TEST_TARGET_ARCH ${arch}) set(ASAN_TEST_APPLE_PLATFORM "osx") - string(TOLOWER "-${arch}-${OS_NAME}" ASAN_TEST_CONFIG_SUFFIX) get_bits_for_arch(${arch} ASAN_TEST_BITS) get_test_cc_for_arch(${arch} ASAN_TEST_TARGET_CC ASAN_TEST_TARGET_CFLAGS) diff --git a/test/asan/TestCases/Darwin/asan-symbolize-with-module-map.cc b/test/asan/TestCases/Darwin/asan-symbolize-with-module-map.cc new file mode 100644 index 000000000..4557adeb0 --- /dev/null +++ b/test/asan/TestCases/Darwin/asan-symbolize-with-module-map.cc @@ -0,0 +1,31 @@ +// UNSUPPORTED: ios +// RUN: %clangxx_asan -O0 -g %s -o %t.executable + +// Deliberately don't produce the module map and then check that offline symbolization fails +// when we try to look for it. +// RUN: %env_asan_opts="symbolize=0,print_module_map=0" not %run %t.executable > %t_no_module_map.log 2>&1 +// RUN: not %asan_symbolize --module-map %t_no_module_map.log --force-system-symbolizer < %t_no_module_map.log 2>&1 | FileCheck -check-prefix=CHECK-NO-MM %s +// CHECK-NO-MM: ERROR:{{.*}} Failed to find module map + +// Now produce the module map and check we can symbolize. +// RUN: %env_asan_opts="symbolize=0,print_module_map=2" not %run %t.executable > %t_with_module_map.log 2>&1 +// RUN: %asan_symbolize --module-map %t_with_module_map.log --force-system-symbolizer < %t_with_module_map.log 2>&1 | FileCheck -check-prefix=CHECK-MM %s + +#include <cstdlib> + +// CHECK-MM: WRITE of size 4 + +extern "C" void foo(int* a) { + // CHECK-MM: #0 0x{{.+}} in foo {{.*}}asan-symbolize-with-module-map.cc:[[@LINE+1]] + *a = 5; +} + +int main() { + int* a = (int*) malloc(sizeof(int)); + if (!a) + return 0; + free(a); + // CHECK-MM: #1 0x{{.+}} in main {{.*}}asan-symbolize-with-module-map.cc:[[@LINE+1]] + foo(a); + return 0; +} diff --git a/test/asan/TestCases/Linux/asan-asm-stacktrace-test.cc b/test/asan/TestCases/Linux/asan-asm-stacktrace-test.cc deleted file mode 100644 index acbe94726..000000000 --- a/test/asan/TestCases/Linux/asan-asm-stacktrace-test.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Check that a stack unwinding algorithm works corretly even with the assembly -// instrumentation. - -// REQUIRES: x86_64-target-arch, shadow-scale-3 -// RUN: %clangxx_asan -g -O1 %s -fno-inline-functions -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -mllvm -asan-instrument-assembly -o %t && not %run %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -g -O1 %s -fno-inline-functions -fomit-frame-pointer -momit-leaf-frame-pointer -mllvm -asan-instrument-assembly -o %t && not %run %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -g0 -O1 %s -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-exceptions -fno-inline-functions -fomit-frame-pointer -momit-leaf-frame-pointer -mllvm -asan-instrument-assembly -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nounwind - -#include <cstddef> - -// CHECK: READ of size 4 -// CHECK-NEXT: {{#0 0x[0-9a-fA-F]+ in foo}} -// CHECK-NEXT: {{#1 0x[0-9a-fA-F]+ in main}} - -// CHECK-nounwind: READ of size 4 -// CHECK-nounwind-NEXT: {{#0 0x[0-9a-fA-F]+ in foo}} - -__attribute__((noinline)) int foo(size_t n, int *buffer) { - int r; - __asm__("movl (%[buffer], %[n], 4), %[r] \n\t" - : [r] "=r"(r) - : [buffer] "r"(buffer), [n] "r"(n) - : "memory"); - return r; -} - -int main() { - const size_t n = 16; - int *buffer = new int[n]; - foo(n, buffer); - delete[] buffer; - return 0; -} diff --git a/test/asan/TestCases/Linux/bzero.cc b/test/asan/TestCases/Linux/bzero.cc new file mode 100644 index 000000000..430edb744 --- /dev/null +++ b/test/asan/TestCases/Linux/bzero.cc @@ -0,0 +1,15 @@ +// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s + +// REQUIRES: !android + +#include <assert.h> +#include <strings.h> + +int main(int argc, char *argv[]) { + char buf[100]; + // *& to suppress bzero-to-memset optimization. + (*&bzero)(buf, sizeof(buf) + 1); + // CHECK: AddressSanitizer: stack-buffer-overflow + // CHECK-NEXT: WRITE of size 101 at + return 0; +} diff --git a/test/asan/TestCases/Linux/swapcontext_annotation.cc b/test/asan/TestCases/Linux/swapcontext_annotation.cc index 3bfda7353..5eae27a32 100644 --- a/test/asan/TestCases/Linux/swapcontext_annotation.cc +++ b/test/asan/TestCases/Linux/swapcontext_annotation.cc @@ -12,7 +12,8 @@ // // This test is too subtle to try on non-x86 arch for now. -// REQUIRES: x86-target-arch +// Android does not support swapcontext. +// REQUIRES: x86-target-arch && !android #include <pthread.h> #include <setjmp.h> diff --git a/test/asan/TestCases/Linux/swapcontext_test.cc b/test/asan/TestCases/Linux/swapcontext_test.cc index 210a667d0..2660ffe3b 100644 --- a/test/asan/TestCases/Linux/swapcontext_test.cc +++ b/test/asan/TestCases/Linux/swapcontext_test.cc @@ -6,7 +6,8 @@ // RUN: %clangxx_asan -O3 %s -o %t && %run %t 2>&1 | FileCheck %s // // This test is too sublte to try on non-x86 arch for now. -// REQUIRES: x86-target-arch +// Android does not support swapcontext. +// REQUIRES: x86-target-arch && !android #include <stdio.h> #include <ucontext.h> diff --git a/test/asan/TestCases/Linux/unpoison_tls.cc b/test/asan/TestCases/Linux/unpoison_tls.cc index 19ebec467..e22345342 100644 --- a/test/asan/TestCases/Linux/unpoison_tls.cc +++ b/test/asan/TestCases/Linux/unpoison_tls.cc @@ -1,5 +1,5 @@ // Test that TLS is unpoisoned on thread death. -// REQUIRES: x86-target-arch +// REQUIRES: x86-target-arch && !android // RUN: %clangxx_asan -O1 %s -pthread -o %t && %run %t 2>&1 diff --git a/test/asan/TestCases/Linux/vfork.cc b/test/asan/TestCases/Linux/vfork.cc new file mode 100644 index 000000000..31a32dc56 --- /dev/null +++ b/test/asan/TestCases/Linux/vfork.cc @@ -0,0 +1,31 @@ +// https://github.com/google/sanitizers/issues/925 +// RUN: %clang_asan -O0 %s -o %t && %run %t 2>&1 + +// REQUIRES: aarch64-target-arch || x86_64-target-arch || i386-target-arch || arm-target-arch + +#include <assert.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> +#include <stdio.h> +#include <sanitizer/asan_interface.h> + +__attribute__((noinline, no_sanitize("address"))) void child() { + alignas(8) char x[100000]; + __asan_poison_memory_region(x, sizeof(x)); + _exit(0); +} + +__attribute__((noinline, no_sanitize("address"))) void parent() { + alignas(8) char x[100000]; + assert(__asan_address_is_poisoned(x + 5000) == 0); +} + +int main(int argc, char **argv) { + if (vfork()) + parent(); + else + child(); + + return 0; +} diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/logging_options_in_help.cc b/test/asan/TestCases/Posix/asan_symbolize_script/logging_options_in_help.cc new file mode 100644 index 000000000..b3df1cb35 --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/logging_options_in_help.cc @@ -0,0 +1,5 @@ +// RUN: %asan_symbolize --help > %t_help_output.txt +// RUN: FileCheck %s -input-file=%t_help_output.txt +// CHECK: optional arguments: +// CHECK: --log-dest +// CHECK: --log-level diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op.py b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op.py new file mode 100644 index 000000000..c636bdfa2 --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op.py @@ -0,0 +1,17 @@ +class NoOpPlugin(AsanSymbolizerPlugIn): + def register_cmdline_args(self, parser): + logging.info('Adding --unlikely-option-name-XXX option') + parser.add_argument('--unlikely-option-name-XXX', type=int, default=0) + + def process_cmdline_args(self, pargs): + logging.info('GOT --unlikely-option-name-XXX=%d', pargs.unlikely_option_name_XXX) + return True + + def destroy(self): + logging.info('destroy() called on NoOpPlugin') + + def filter_binary_path(self, path): + logging.info('filter_binary_path called in NoOpPlugin') + return path + +register_plugin(NoOpPlugin()) diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_help_output.cc b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_help_output.cc new file mode 100644 index 000000000..71f32e0d6 --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_help_output.cc @@ -0,0 +1,7 @@ +// Check help output. +// RUN: %asan_symbolize --log-level info --plugins %S/plugin_no_op.py --help 2>&1 | FileCheck %s +// CHECK: Registering plugin NoOpPlugin +// CHECK: Adding --unlikely-option-name-XXX option +// CHECK: optional arguments: +// CHECK: --unlikely-option-name-XXX + diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_symbolicate.cc b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_symbolicate.cc new file mode 100644 index 000000000..3f3ad9bfd --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/plugin_no_op_symbolicate.cc @@ -0,0 +1,24 @@ +// UNSUPPORTED: ios, android +// Check plugin command line args get parsed and that plugin functions get called as expected. + +// RUN: %clangxx_asan -O0 -g %s -o %t.executable +// RUN: not %env_asan_opts=symbolize=0 %run %t.executable > %t.log 2>&1 +// RUN: %asan_symbolize --plugins %S/plugin_no_op.py --log-level info -l %t.log --unlikely-option-name-XXX=15 2>&1 | FileCheck %s + +// CHECK: GOT --unlikely-option-name-XXX=15 +// CHECK: filter_binary_path called in NoOpPlugin +// CHECK: destroy() called on NoOpPlugin + +#include <cstdlib> +extern "C" void foo(int* a) { + *a = 5; +} + +int main() { + int* a = (int*) malloc(sizeof(int)); + if (!a) + return 0; + free(a); + foo(a); + return 0; +} diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/set_log_dest.cc b/test/asan/TestCases/Posix/asan_symbolize_script/set_log_dest.cc new file mode 100644 index 000000000..f2c309808 --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/set_log_dest.cc @@ -0,0 +1,3 @@ +// RUN: %asan_symbolize --log-level debug --log-dest %t_debug_log_output.txt --help +// RUN: FileCheck %s -input-file=%t_debug_log_output.txt -check-prefix=DEBUG-CHECK +// DEBUG-CHECK: DEBUG: [setup_logging() asan_symbolize.py:{{[0-9]+}}] Logging level set to "debug" diff --git a/test/asan/TestCases/Posix/asan_symbolize_script/set_log_level.cc b/test/asan/TestCases/Posix/asan_symbolize_script/set_log_level.cc new file mode 100644 index 000000000..b30fd6ec3 --- /dev/null +++ b/test/asan/TestCases/Posix/asan_symbolize_script/set_log_level.cc @@ -0,0 +1,8 @@ +// RUN: %asan_symbolize --log-level debug --help 2> %t_debug_log_output.txt +// RUN: FileCheck %s -input-file=%t_debug_log_output.txt -check-prefix=DEBUG-CHECK +// DEBUG-CHECK: DEBUG: [setup_logging() asan_symbolize.py:{{[0-9]+}}] Logging level set to "debug" +// +// FileCheck doesn't like empty files so add stdout too. +// RUN: %asan_symbolize --log-level info --help > %t_info_log_output.txt 2>&1 +// RUN: FileCheck %s -input-file=%t_info_log_output.txt -check-prefix=INFO-CHECK +// INFO-CHECK-NOT: DEBUG: [setup_logging() asan_symbolize.py:{{[0-9]+}}] diff --git a/test/asan/TestCases/Posix/bcmp_test.cc b/test/asan/TestCases/Posix/bcmp_test.cc new file mode 100644 index 000000000..44aa9cd24 --- /dev/null +++ b/test/asan/TestCases/Posix/bcmp_test.cc @@ -0,0 +1,18 @@ +// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s + +// REQUIRES: compiler-rt-optimized, (linux && !android) || openbsd || freebsd || netbsd +// XFAIL: darwin + +#include <string.h> +int main(int argc, char **argv) { + char a1[] = {static_cast<char>(argc), 2, 3, 4}; + char a2[] = {1, static_cast<char>(2 * argc), 3, 4}; + int res = bcmp(a1, a2, 4 + argc); // BOOM + // CHECK: AddressSanitizer: stack-buffer-overflow + // CHECK: {{#1.*bcmp}} + // CHECK: {{#2.*main}} + return res; +} diff --git a/test/asan/TestCases/Posix/start-deactivated.cc b/test/asan/TestCases/Posix/start-deactivated.cc index 736d7f698..9c674ac57 100644 --- a/test/asan/TestCases/Posix/start-deactivated.cc +++ b/test/asan/TestCases/Posix/start-deactivated.cc @@ -18,7 +18,6 @@ // RUN: %env_asan_opts=start_deactivated=1 \ // RUN: ASAN_ACTIVATION_OPTIONS=help=1,handle_segv=0,verbosity=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-UNSUPPORTED -// UNSUPPORTED: ios // END. diff --git a/test/asan/TestCases/Posix/wcrtomb.c b/test/asan/TestCases/Posix/wcrtomb.c new file mode 100644 index 000000000..bd9a8bf3e --- /dev/null +++ b/test/asan/TestCases/Posix/wcrtomb.c @@ -0,0 +1,16 @@ +// Function not intercepted on android. +// UNSUPPORTED: android + +// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s + +#include <stdlib.h> +#include <wchar.h> + +int main() { + char *buff = (char*) malloc(MB_CUR_MAX); + free(buff); + wcrtomb(buff, L'a', NULL); + // CHECK: use-after-free + // CHECK: SUMMARY + return 0; +} diff --git a/test/asan/TestCases/Windows/dll_intercept_memcpy.cc b/test/asan/TestCases/Windows/dll_intercept_memcpy.cc index a5981fa5b..53cb7ef1c 100644 --- a/test/asan/TestCases/Windows/dll_intercept_memcpy.cc +++ b/test/asan/TestCases/Windows/dll_intercept_memcpy.cc @@ -1,9 +1,9 @@ // RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -Wno-fortify-source -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s // Test that it works correctly even with ICF enabled. -// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll -link /OPT:REF /OPT:ICF +// RUN: %clang_cl_asan -Wno-fortify-source -LD -O0 %s -Fe%t.dll -link /OPT:REF /OPT:ICF // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include <stdio.h> diff --git a/test/asan/TestCases/Windows/dll_intercept_memset.cc b/test/asan/TestCases/Windows/dll_intercept_memset.cc index 4baa0a161..51096e4bb 100644 --- a/test/asan/TestCases/Windows/dll_intercept_memset.cc +++ b/test/asan/TestCases/Windows/dll_intercept_memset.cc @@ -1,9 +1,9 @@ // RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t -// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll +// RUN: %clang_cl_asan -Wno-fortify-source -LD -O0 %s -Fe%t.dll // RUN: not %run %t %t.dll 2>&1 | FileCheck %s // Test that it works correctly even with ICF enabled. -// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll -link /OPT:REF /OPT:ICF +// RUN: %clang_cl_asan -Wno-fortify-source -LD -O0 %s -Fe%t.dll -link /OPT:REF /OPT:ICF // RUN: not %run %t %t.dll 2>&1 | FileCheck %s #include <stdio.h> diff --git a/test/asan/TestCases/Windows/heaprealloc_zero_size.cc b/test/asan/TestCases/Windows/heaprealloc_zero_size.cc new file mode 100644 index 000000000..3d60202ce --- /dev/null +++ b/test/asan/TestCases/Windows/heaprealloc_zero_size.cc @@ -0,0 +1,21 @@ +// RUN: %clang_cl_asan /Od -o %t %s +// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_cl /Od -o %t %s +// RUN: %run %t 2>&1 | FileCheck %s +#include <cassert> +#include <stdio.h> +#include<windows.h> + +int main() { + HANDLE heap = HeapCreate(0, 0, 0); + void *ptr = HeapAlloc(heap, 0, 4); + assert(ptr); + void *ptr2 = HeapReAlloc(heap, 0, ptr, 0); + assert(ptr2); + HeapFree(heap, 0, ptr2); + fprintf(stderr, "passed!\n"); +} + +// CHECK-NOT: double-free +// CHECK-NOT: AddressSanitizer +// CHECK: passed!
\ No newline at end of file diff --git a/test/asan/TestCases/Windows/recalloc_sanity.cc b/test/asan/TestCases/Windows/recalloc_sanity.cc new file mode 100644 index 000000000..41df5d002 --- /dev/null +++ b/test/asan/TestCases/Windows/recalloc_sanity.cc @@ -0,0 +1,37 @@ +// RUN: %clang_cl_asan %s -o %t.exe +// RUN: %run %t.exe 2>&1 | FileCheck %s +// RUN: %clang_cl %s -o %t.exe +// RUN: %run %t.exe 2>&1 | FileCheck %s + +#include <cassert> +#include <stdio.h> +#include <windows.h> + +int main() { + void *p = calloc(1, 100); + assert(p); + void *np = _recalloc(p, 2, 100); + assert(np); + for (int i = 0; i < 2 * 100; i++) { + assert(((BYTE *)np)[i] == 0); + } + void *nnp = _recalloc(np, 1, 100); + assert(nnp); + for (int i = 0; i < 100; i++) { + assert(((BYTE *)nnp)[i] == 0); + ((BYTE *)nnp)[i] = 0x0d; + } + void *nnnp = _recalloc(nnp, 2, 100); + assert(nnnp); + for (int i = 0; i < 100; i++) { + assert(((BYTE *)nnnp)[i] == 0x0d); + } + for (int i = 100; i < 200; i++) { + assert(((BYTE *)nnnp)[i] == 0); + } + fprintf(stderr, "passed\n"); + return 0; +} + +// CHECK-NOT: Assertion +// CHECK: passed
\ No newline at end of file diff --git a/test/asan/TestCases/memcmp_test.cc b/test/asan/TestCases/memcmp_test.cc index 0dd9820f5..e666b6d16 100644 --- a/test/asan/TestCases/memcmp_test.cc +++ b/test/asan/TestCases/memcmp_test.cc @@ -11,7 +11,7 @@ int main(int argc, char **argv) { char a2[] = {1, static_cast<char>(2*argc), 3, 4}; int res = memcmp(a1, a2, 4 + argc); // BOOM // CHECK: AddressSanitizer: stack-buffer-overflow - // CHECK: {{#0.*memcmp}} - // CHECK: {{#1.*main}} + // CHECK: {{#1.*memcmp}} + // CHECK: {{#2.*main}} return res; } diff --git a/test/asan/lit.cfg b/test/asan/lit.cfg index 3deb4ccc5..05878a8ef 100644 --- a/test/asan/lit.cfg +++ b/test/asan/lit.cfg @@ -181,7 +181,7 @@ if re.search('mthumb', config.target_cflags) is None: config.available_features.add('fast-unwinder-works') # Turn on leak detection on 64-bit Linux. -leak_detection_linux = (config.host_os == 'Linux') and (config.target_arch == 'x86_64' or config.target_arch == 'i386') +leak_detection_linux = (config.host_os == 'Linux') and (not config.android) and (config.target_arch == 'x86_64' or config.target_arch == 'i386') leak_detection_mac = (config.host_os == 'Darwin') and (config.target_arch == 'x86_64') if leak_detection_linux or leak_detection_mac: config.available_features.add('leak-detection') @@ -220,8 +220,5 @@ else: if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'SunOS', 'Windows', 'NetBSD']: config.unsupported = True -if config.host_os == 'Darwin': - if config.target_arch in ["x86_64", "x86_64h"]: - config.parallelism_group = "darwin-64bit-sanitizer" - elif config.apple_platform != "osx" and not config.apple_platform.endswith("sim"): - config.parallelism_group = "darwin-ios-device-sanitizer" +if not config.parallelism_group: + config.parallelism_group = 'shadow-memory' diff --git a/test/builtins/Unit/absvdi2_test.c b/test/builtins/Unit/absvdi2_test.c index dd9dfd17e..00db5cc2f 100644 --- a/test/builtins/Unit/absvdi2_test.c +++ b/test/builtins/Unit/absvdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- absvdi2_test.c - Test __absvdi2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/absvsi2_test.c b/test/builtins/Unit/absvsi2_test.c index bae306b2c..332395b24 100644 --- a/test/builtins/Unit/absvsi2_test.c +++ b/test/builtins/Unit/absvsi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- absvsi2_test.c - Test __absvsi2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/absvti2_test.c b/test/builtins/Unit/absvti2_test.c index 3c2ded7b7..60d6c34ff 100644 --- a/test/builtins/Unit/absvti2_test.c +++ b/test/builtins/Unit/absvti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- absvti2_test.c - Test __absvti2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/adddf3vfp_test.c b/test/builtins/Unit/adddf3vfp_test.c index e0da08bc0..f2642323d 100644 --- a/test/builtins/Unit/adddf3vfp_test.c +++ b/test/builtins/Unit/adddf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- adddf3vfp_test.c - Test __adddf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/addsf3vfp_test.c b/test/builtins/Unit/addsf3vfp_test.c index ed18de3b6..8a742e6a4 100644 --- a/test/builtins/Unit/addsf3vfp_test.c +++ b/test/builtins/Unit/addsf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- addsf3vfp_test.c - Test __addsf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/addtf3_test.c b/test/builtins/Unit/addtf3_test.c index 57a4729f4..8f00f6de7 100644 --- a/test/builtins/Unit/addtf3_test.c +++ b/test/builtins/Unit/addtf3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- addtf3_test.c - Test __addtf3 ------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/addvdi3_test.c b/test/builtins/Unit/addvdi3_test.c index 99e70403e..e30993ec0 100644 --- a/test/builtins/Unit/addvdi3_test.c +++ b/test/builtins/Unit/addvdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- addvdi3_test.c - Test __addvdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/addvsi3_test.c b/test/builtins/Unit/addvsi3_test.c index 11fdbc3c1..03ced89c2 100644 --- a/test/builtins/Unit/addvsi3_test.c +++ b/test/builtins/Unit/addvsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- addvsi3_test.c - Test __addvsi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/addvti3_test.c b/test/builtins/Unit/addvti3_test.c index 23e52d345..289ddc360 100644 --- a/test/builtins/Unit/addvti3_test.c +++ b/test/builtins/Unit/addvti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- addvti3_test.c - Test __addvti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c b/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c index 0d9e006f0..bdd357c59 100644 --- a/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c +++ b/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c @@ -3,10 +3,9 @@ // RUN: %clang_builtins %s %t.aspr.o %librt -o %t && %run %t //===-- aeabi_cdcmpeq.c - Test __aeabi_cdcmpeq ----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_cdcmple_test.c b/test/builtins/Unit/arm/aeabi_cdcmple_test.c index e499bf85a..1bfbb4e1e 100644 --- a/test/builtins/Unit/arm/aeabi_cdcmple_test.c +++ b/test/builtins/Unit/arm/aeabi_cdcmple_test.c @@ -4,10 +4,9 @@ //===-- aeabi_cdcmple.c - Test __aeabi_cdcmple and __aeabi_cdrcmple -------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c b/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c index 72a556ca7..9a98179ec 100644 --- a/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c +++ b/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c @@ -3,10 +3,9 @@ // RUN: %clang_builtins %s %t.aspr.o %librt -o %t && %run %t //===-- aeabi_cfcmpeq.c - Test __aeabi_cfcmpeq ----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_cfcmple_test.c b/test/builtins/Unit/arm/aeabi_cfcmple_test.c index a09aead6b..7d3ff78d1 100644 --- a/test/builtins/Unit/arm/aeabi_cfcmple_test.c +++ b/test/builtins/Unit/arm/aeabi_cfcmple_test.c @@ -4,10 +4,9 @@ //===-- aeabi_cfcmple.c - Test __aeabi_cfcmple and __aeabi_cfrcmple -------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_drsub_test.c b/test/builtins/Unit/arm/aeabi_drsub_test.c index 8bd04a989..2c6689102 100644 --- a/test/builtins/Unit/arm/aeabi_drsub_test.c +++ b/test/builtins/Unit/arm/aeabi_drsub_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- aeabi_drsub.c - Test __aeabi_drsub --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_frsub_test.c b/test/builtins/Unit/arm/aeabi_frsub_test.c index 3d301616a..2fadfb2df 100644 --- a/test/builtins/Unit/arm/aeabi_frsub_test.c +++ b/test/builtins/Unit/arm/aeabi_frsub_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- aeabi_frsub.c - Test __aeabi_frsub --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_idivmod_test.c b/test/builtins/Unit/arm/aeabi_idivmod_test.c index ac1804694..cec9468cb 100644 --- a/test/builtins/Unit/arm/aeabi_idivmod_test.c +++ b/test/builtins/Unit/arm/aeabi_idivmod_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- aeabi_idivmod_test.c - Test __aeabi_idivmod -----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_uidivmod_test.c b/test/builtins/Unit/arm/aeabi_uidivmod_test.c index 9ac51da59..e29cd5a97 100644 --- a/test/builtins/Unit/arm/aeabi_uidivmod_test.c +++ b/test/builtins/Unit/arm/aeabi_uidivmod_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- aeabi_uidivmod_test.c - Test __aeabi_uidivmod ---------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/aeabi_uldivmod_test.c b/test/builtins/Unit/arm/aeabi_uldivmod_test.c index a40f006fa..465d3bf40 100644 --- a/test/builtins/Unit/arm/aeabi_uldivmod_test.c +++ b/test/builtins/Unit/arm/aeabi_uldivmod_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- aeabi_uldivmod_test.c - Test aeabi_uldivmod -----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/call_apsr.S b/test/builtins/Unit/arm/call_apsr.S index 2656f8de6..86f6c7c94 100644 --- a/test/builtins/Unit/arm/call_apsr.S +++ b/test/builtins/Unit/arm/call_apsr.S @@ -1,9 +1,8 @@ //===-- call_apsr.S - Helpers for ARM EABI floating point tests -----------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/arm/call_apsr.h b/test/builtins/Unit/arm/call_apsr.h index 54438413e..d4fcf5c97 100644 --- a/test/builtins/Unit/arm/call_apsr.h +++ b/test/builtins/Unit/arm/call_apsr.h @@ -1,9 +1,8 @@ //===-- call_apsr.h - Helpers for ARM EABI floating point tests -----------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ashldi3_test.c b/test/builtins/Unit/ashldi3_test.c index f0984e06d..671dcadc3 100644 --- a/test/builtins/Unit/ashldi3_test.c +++ b/test/builtins/Unit/ashldi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ashldi3_test.c - Test __ashldi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ashlti3_test.c b/test/builtins/Unit/ashlti3_test.c index 2dcd4494f..125863189 100644 --- a/test/builtins/Unit/ashlti3_test.c +++ b/test/builtins/Unit/ashlti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- ashlti3_test.c - Test __ashlti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ashrdi3_test.c b/test/builtins/Unit/ashrdi3_test.c index a987c9530..456660037 100644 --- a/test/builtins/Unit/ashrdi3_test.c +++ b/test/builtins/Unit/ashrdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ashrdi3_test.c - Test __ashrdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ashrti3_test.c b/test/builtins/Unit/ashrti3_test.c index 69d0715b7..530cff53c 100644 --- a/test/builtins/Unit/ashrti3_test.c +++ b/test/builtins/Unit/ashrti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- ashrti3_test.c - Test __ashrti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/bswapdi2_test.c b/test/builtins/Unit/bswapdi2_test.c index 57ee38b78..a6b07775f 100644 --- a/test/builtins/Unit/bswapdi2_test.c +++ b/test/builtins/Unit/bswapdi2_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- bswapdi2_test.c - Test __bswapdi2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/bswapsi2_test.c b/test/builtins/Unit/bswapsi2_test.c index 899c251d9..d2f03cb74 100644 --- a/test/builtins/Unit/bswapsi2_test.c +++ b/test/builtins/Unit/bswapsi2_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- bswapsi2_test.c - Test __bswapsi2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/clear_cache_test.c b/test/builtins/Unit/clear_cache_test.c index e50e66f5e..e85cc3027 100644 --- a/test/builtins/Unit/clear_cache_test.c +++ b/test/builtins/Unit/clear_cache_test.c @@ -3,10 +3,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- clear_cache_test.c - Test clear_cache -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/test/builtins/Unit/clzdi2_test.c b/test/builtins/Unit/clzdi2_test.c index a8c0e1b35..1ef1ff323 100644 --- a/test/builtins/Unit/clzdi2_test.c +++ b/test/builtins/Unit/clzdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- clzdi2_test.c - Test __clzdi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/clzsi2_test.c b/test/builtins/Unit/clzsi2_test.c index f86e8885e..e2e1e1b65 100644 --- a/test/builtins/Unit/clzsi2_test.c +++ b/test/builtins/Unit/clzsi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- clzsi2_test.c - Test __clzsi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/clzti2_test.c b/test/builtins/Unit/clzti2_test.c index 082583cb3..15b871327 100644 --- a/test/builtins/Unit/clzti2_test.c +++ b/test/builtins/Unit/clzti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- clzti2_test.c - Test __clzti2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/cmpdi2_test.c b/test/builtins/Unit/cmpdi2_test.c index 1420dc773..4bfcac025 100644 --- a/test/builtins/Unit/cmpdi2_test.c +++ b/test/builtins/Unit/cmpdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- cmpdi2_test.c - Test __cmpdi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/cmpti2_test.c b/test/builtins/Unit/cmpti2_test.c index e74f379c8..03183c870 100644 --- a/test/builtins/Unit/cmpti2_test.c +++ b/test/builtins/Unit/cmpti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- cmpti2_test.c - Test __cmpti2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/comparedf2_test.c b/test/builtins/Unit/comparedf2_test.c index 844690197..9b1cac20b 100644 --- a/test/builtins/Unit/comparedf2_test.c +++ b/test/builtins/Unit/comparedf2_test.c @@ -2,10 +2,9 @@ //===-- cmpdf2_test.c - Test __cmpdf2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/comparesf2_test.c b/test/builtins/Unit/comparesf2_test.c index 1b5902f37..cabd20241 100644 --- a/test/builtins/Unit/comparesf2_test.c +++ b/test/builtins/Unit/comparesf2_test.c @@ -2,10 +2,9 @@ //===-- cmpsf2_test.c - Test __cmpsf2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/compiler_rt_logb_test.c b/test/builtins/Unit/compiler_rt_logb_test.c index 796765980..c36b19ca3 100644 --- a/test/builtins/Unit/compiler_rt_logb_test.c +++ b/test/builtins/Unit/compiler_rt_logb_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- compiler_rt_logb_test.c - Test __compiler_rt_logb -----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // @@ -36,7 +35,15 @@ double cases[] = { -0.0, 0.0, 1, -2, 2, -0.5, 0.5, }; +#ifndef __GLIBC_PREREQ +#define __GLIBC_PREREQ(x, y) 0 +#endif + int main() { + // Do not the run the compiler-rt logb test case if using GLIBC version + // < 2.23. Older versions might not compute to the same value as the + // compiler-rt value. +#if __GLIBC_PREREQ(2, 23) const unsigned N = sizeof(cases) / sizeof(cases[0]); unsigned i; for (i = 0; i < N; ++i) { @@ -58,6 +65,9 @@ int main() { if (test__compiler_rt_logb(fromRep(signBit ^ x))) return 1; x >>= 1; } +#else + printf("skipped\n"); +#endif return 0; } diff --git a/test/builtins/Unit/compiler_rt_logbf_test.c b/test/builtins/Unit/compiler_rt_logbf_test.c index 5a4979a4b..fa3b8999f 100644 --- a/test/builtins/Unit/compiler_rt_logbf_test.c +++ b/test/builtins/Unit/compiler_rt_logbf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- compiler_rt_logbf_test.c - Test __compiler_rt_logbf ---------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/compiler_rt_logbl_test.c b/test/builtins/Unit/compiler_rt_logbl_test.c index 2617748e9..52a03e17a 100644 --- a/test/builtins/Unit/compiler_rt_logbl_test.c +++ b/test/builtins/Unit/compiler_rt_logbl_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- compiler_rt_logbl_test.c - Test __compiler_rt_logbl ---------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/cpu_model_test.c b/test/builtins/Unit/cpu_model_test.c index 6b47d143f..dee031ea0 100644 --- a/test/builtins/Unit/cpu_model_test.c +++ b/test/builtins/Unit/cpu_model_test.c @@ -4,10 +4,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- cpu_model_test.c - Test __builtin_cpu_supports --------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ctzdi2_test.c b/test/builtins/Unit/ctzdi2_test.c index 0515e2072..269c43540 100644 --- a/test/builtins/Unit/ctzdi2_test.c +++ b/test/builtins/Unit/ctzdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ctzdi2_test.c - Test __ctzdi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ctzsi2_test.c b/test/builtins/Unit/ctzsi2_test.c index bf8982bf0..15ca4fdf1 100644 --- a/test/builtins/Unit/ctzsi2_test.c +++ b/test/builtins/Unit/ctzsi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ctzsi2_test.c - Test __ctzsi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ctzti2_test.c b/test/builtins/Unit/ctzti2_test.c index 2ddcf0d0a..a321a0aac 100644 --- a/test/builtins/Unit/ctzti2_test.c +++ b/test/builtins/Unit/ctzti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- ctzti2_test.c - Test __ctzti2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divdc3_test.c b/test/builtins/Unit/divdc3_test.c index 042fd23f0..6a59691c4 100644 --- a/test/builtins/Unit/divdc3_test.c +++ b/test/builtins/Unit/divdc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divdc3_test.c - Test __divdc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divdf3_test.c b/test/builtins/Unit/divdf3_test.c new file mode 100644 index 000000000..00b021f4e --- /dev/null +++ b/test/builtins/Unit/divdf3_test.c @@ -0,0 +1,45 @@ +// RUN: %clang_builtins %s %librt -o %t && %run %t +//===--------------- divdf3_test.c - Test __divdf3 ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file tests __divdf3 for the compiler_rt library. +// +//===----------------------------------------------------------------------===// + +#include "int_lib.h" +#include <stdio.h> + +#include "fp_test.h" + +// Returns: a / b +COMPILER_RT_ABI double __divdf3(double a, double b); + +int test__divdf3(double a, double b, uint64_t expected) +{ + double x = __divdf3(a, b); + int ret = compareResultD(x, expected); + + if (ret){ + printf("error in test__divdf3(%.20e, %.20e) = %.20e, " + "expected %.20e\n", a, b, x, + fromRep64(expected)); + } + return ret; +} + +int main() +{ + // 1/3 + if (test__divdf3(1., 3., 0x3fd5555555555555ULL)) + return 1; + // smallest normal result + if (test__divdf3(4.450147717014403e-308, 2., 0x10000000000000ULL)) + return 1; + + return 0; +} diff --git a/test/builtins/Unit/divdf3vfp_test.c b/test/builtins/Unit/divdf3vfp_test.c index 4f18409a2..76d7cfafa 100644 --- a/test/builtins/Unit/divdf3vfp_test.c +++ b/test/builtins/Unit/divdf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divdf3vfp_test.c - Test __divdf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divdi3_test.c b/test/builtins/Unit/divdi3_test.c index 4c8c92226..41ee1cf07 100644 --- a/test/builtins/Unit/divdi3_test.c +++ b/test/builtins/Unit/divdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divdi3_test.c - Test __divdi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divmodsi4_test.c b/test/builtins/Unit/divmodsi4_test.c index e766aaee1..4630ad8e7 100644 --- a/test/builtins/Unit/divmodsi4_test.c +++ b/test/builtins/Unit/divmodsi4_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divmodsi4_test.c - Test __divmodsi4 -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divsc3_test.c b/test/builtins/Unit/divsc3_test.c index daa221825..f9ad42abc 100644 --- a/test/builtins/Unit/divsc3_test.c +++ b/test/builtins/Unit/divsc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -lm -o %t && %run %t //===-- divsc3_test.c - Test __divsc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divsf3_test.c b/test/builtins/Unit/divsf3_test.c new file mode 100644 index 000000000..4b14c81b3 --- /dev/null +++ b/test/builtins/Unit/divsf3_test.c @@ -0,0 +1,45 @@ +// RUN: %clang_builtins %s %librt -o %t && %run %t +//===--------------- divsf3_test.c - Test __divsf3 ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file tests __divsf3 for the compiler_rt library. +// +//===----------------------------------------------------------------------===// + +#include "int_lib.h" +#include <stdio.h> + +#include "fp_test.h" + +// Returns: a / b +COMPILER_RT_ABI float __divsf3(float a, float b); + +int test__divsf3(float a, float b, uint32_t expected) +{ + float x = __divsf3(a, b); + int ret = compareResultF(x, expected); + + if (ret){ + printf("error in test__divsf3(%.20e, %.20e) = %.20e, " + "expected %.20e\n", a, b, x, + fromRep32(expected)); + } + return ret; +} + +int main() +{ + // 1/3 + if (test__divsf3(1.f, 3.f, 0x3EAAAAABU)) + return 1; + // smallest normal result + if (test__divsf3(2.3509887e-38, 2., 0x00800000U)) + return 1; + + return 0; +} diff --git a/test/builtins/Unit/divsf3vfp_test.c b/test/builtins/Unit/divsf3vfp_test.c index 75b7eba7a..fc3860e2c 100644 --- a/test/builtins/Unit/divsf3vfp_test.c +++ b/test/builtins/Unit/divsf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divsf3vfp_test.c - Test __divsf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divsi3_test.c b/test/builtins/Unit/divsi3_test.c index 4c5d0fba5..fb453403c 100644 --- a/test/builtins/Unit/divsi3_test.c +++ b/test/builtins/Unit/divsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- divsi3_test.c - Test __divsi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divtc3_test.c b/test/builtins/Unit/divtc3_test.c index 7474330f6..b809ca23a 100644 --- a/test/builtins/Unit/divtc3_test.c +++ b/test/builtins/Unit/divtc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -lm -o %t && %run %t //===-- divtc3_test.c - Test __divtc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divtf3_test.c b/test/builtins/Unit/divtf3_test.c index 12cb94a26..23e1b5580 100644 --- a/test/builtins/Unit/divtf3_test.c +++ b/test/builtins/Unit/divtf3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- divtf3_test.c - Test __divtf3 ------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // @@ -29,8 +28,8 @@ int test__divtf3(long double a, long double b, int ret = compareResultLD(x, expectedHi, expectedLo); if (ret){ - printf("error in test__divtf3(%.20Lf, %.20Lf) = %.20Lf, " - "expected %.20Lf\n", a, b, x, + printf("error in test__divtf3(%.20Le, %.20Le) = %.20Le, " + "expected %.20Le\n", a, b, x, fromRep128(expectedHi, expectedLo)); } return ret; @@ -87,6 +86,11 @@ int main() UINT64_C(0x50bf2e02f0798d36), UINT64_C(0x5e6fcb6b60044078))) return 1; + if (test__divtf3(6.72420628622418701252535563464350521E-4932L, + 2.L, + UINT64_C(0x0001000000000000), + UINT64_C(0))) + return 1; #else printf("skipped\n"); diff --git a/test/builtins/Unit/divti3_test.c b/test/builtins/Unit/divti3_test.c index 77776e28a..e29658d1a 100644 --- a/test/builtins/Unit/divti3_test.c +++ b/test/builtins/Unit/divti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- divti3_test.c - Test __divti3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/divxc3_test.c b/test/builtins/Unit/divxc3_test.c index 876cdde57..4dbe5afa7 100644 --- a/test/builtins/Unit/divxc3_test.c +++ b/test/builtins/Unit/divxc3_test.c @@ -3,10 +3,9 @@ // UNSUPPORTED: powerpc64 //===-- divxc3_test.c - Test __divxc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/enable_execute_stack_test.c b/test/builtins/Unit/enable_execute_stack_test.c index 72fc042e6..ef29a1679 100644 --- a/test/builtins/Unit/enable_execute_stack_test.c +++ b/test/builtins/Unit/enable_execute_stack_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- enable_execute_stack_test.c - Test __enable_execute_stack ----------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/test/builtins/Unit/endianness.h b/test/builtins/Unit/endianness.h index 9cecd2165..f868e3f06 100644 --- a/test/builtins/Unit/endianness.h +++ b/test/builtins/Unit/endianness.h @@ -1,9 +1,8 @@ /* ===-- endianness.h - configuration header for libgcc replacement --------=== * - * The LLVM Compiler Infrastructure - * - * This file is dual licensed under the MIT and the University of Illinois Open - * Source Licenses. See LICENSE.TXT for details. + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * * ===----------------------------------------------------------------------=== * diff --git a/test/builtins/Unit/eqdf2vfp_test.c b/test/builtins/Unit/eqdf2vfp_test.c index 69dd37b8f..789a509f1 100644 --- a/test/builtins/Unit/eqdf2vfp_test.c +++ b/test/builtins/Unit/eqdf2vfp_test.c @@ -2,10 +2,9 @@ //===-- eqdf2vfp_test.c - Test __eqdf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/eqsf2vfp_test.c b/test/builtins/Unit/eqsf2vfp_test.c index 9c8dc1659..9ab748183 100644 --- a/test/builtins/Unit/eqsf2vfp_test.c +++ b/test/builtins/Unit/eqsf2vfp_test.c @@ -2,10 +2,9 @@ //===-- eqsf2vfp_test.c - Test __eqsf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/eqtf2_test.c b/test/builtins/Unit/eqtf2_test.c index 91b35cff2..e460b0871 100644 --- a/test/builtins/Unit/eqtf2_test.c +++ b/test/builtins/Unit/eqtf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ eqtf2_test.c - Test __eqtf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/extebdsfdf2vfp_test.c b/test/builtins/Unit/extebdsfdf2vfp_test.c index c350d933d..2255e6735 100644 --- a/test/builtins/Unit/extebdsfdf2vfp_test.c +++ b/test/builtins/Unit/extebdsfdf2vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- extendsfdf2vfp_test.c - Test __extendsfdf2vfp ---------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/extenddftf2_test.c b/test/builtins/Unit/extenddftf2_test.c index 7254141a2..0ca825dd1 100644 --- a/test/builtins/Unit/extenddftf2_test.c +++ b/test/builtins/Unit/extenddftf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- extenddftf2_test.c - Test __extenddftf2 --------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/extendhfsf2_test.c b/test/builtins/Unit/extendhfsf2_test.c index d423e7b4e..73676806a 100644 --- a/test/builtins/Unit/extendhfsf2_test.c +++ b/test/builtins/Unit/extendhfsf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- extendhfsf2_test.c - Test __extendhfsf2 --------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/extendsftf2_test.c b/test/builtins/Unit/extendsftf2_test.c index 4fad9060f..2357fd341 100644 --- a/test/builtins/Unit/extendsftf2_test.c +++ b/test/builtins/Unit/extendsftf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- extendsftf2_test.c - Test __extendsftf2 --------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ffsdi2_test.c b/test/builtins/Unit/ffsdi2_test.c index 80c0c08cb..86ab9b979 100644 --- a/test/builtins/Unit/ffsdi2_test.c +++ b/test/builtins/Unit/ffsdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ffsdi2_test.c - Test __ffsdi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ffssi2_test.c b/test/builtins/Unit/ffssi2_test.c index 5d96b9636..f97b398a7 100644 --- a/test/builtins/Unit/ffssi2_test.c +++ b/test/builtins/Unit/ffssi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ffssi2_test.c - Test __ffssi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ffsti2_test.c b/test/builtins/Unit/ffsti2_test.c index a7f0ca02b..abc32e14f 100644 --- a/test/builtins/Unit/ffsti2_test.c +++ b/test/builtins/Unit/ffsti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- ffsti2_test.c - Test __ffsti2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixdfdi_test.c b/test/builtins/Unit/fixdfdi_test.c index d2ba7b19f..30f0a3b25 100644 --- a/test/builtins/Unit/fixdfdi_test.c +++ b/test/builtins/Unit/fixdfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixdfdi_test.c - Test __fixdfdi -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixdfsivfp_test.c b/test/builtins/Unit/fixdfsivfp_test.c index 33b4d2408..4a76ea960 100644 --- a/test/builtins/Unit/fixdfsivfp_test.c +++ b/test/builtins/Unit/fixdfsivfp_test.c @@ -2,10 +2,9 @@ //===-- fixdfsivfp_test.c - Test __fixdfsivfp -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixdfti_test.c b/test/builtins/Unit/fixdfti_test.c index 2b9db0f51..9a2de08dc 100644 --- a/test/builtins/Unit/fixdfti_test.c +++ b/test/builtins/Unit/fixdfti_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- fixdfti_test.c - Test __fixdfti -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixsfdi_test.c b/test/builtins/Unit/fixsfdi_test.c index 468299f9b..e4b23f5b2 100644 --- a/test/builtins/Unit/fixsfdi_test.c +++ b/test/builtins/Unit/fixsfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixsfdi_test.c - Test __fixsfdi -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixsfsivfp_test.c b/test/builtins/Unit/fixsfsivfp_test.c index ee33a1dc9..7e6039319 100644 --- a/test/builtins/Unit/fixsfsivfp_test.c +++ b/test/builtins/Unit/fixsfsivfp_test.c @@ -2,10 +2,9 @@ //===-- fixsfsivfp_test.c - Test __fixsfsivfp -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixsfti_test.c b/test/builtins/Unit/fixsfti_test.c index 25cf092c4..bf985d2b2 100644 --- a/test/builtins/Unit/fixsfti_test.c +++ b/test/builtins/Unit/fixsfti_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- fixsfti_test.c - Test __fixsfti -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixtfdi_test.c b/test/builtins/Unit/fixtfdi_test.c index 3cd1ebf78..1d1e1102c 100644 --- a/test/builtins/Unit/fixtfdi_test.c +++ b/test/builtins/Unit/fixtfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- fixtfdi_test.c - Test __fixtfdi ----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixtfsi_test.c b/test/builtins/Unit/fixtfsi_test.c index 59e43520a..752ede215 100644 --- a/test/builtins/Unit/fixtfsi_test.c +++ b/test/builtins/Unit/fixtfsi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- fixtfsi_test.c - Test __fixtfsi ----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixtfti_test.c b/test/builtins/Unit/fixtfti_test.c index 4d3b56c78..ea648148d 100644 --- a/test/builtins/Unit/fixtfti_test.c +++ b/test/builtins/Unit/fixtfti_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- fixtfti_test.c - Test __fixtfti ----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsdfdi_test.c b/test/builtins/Unit/fixunsdfdi_test.c index ab09bd0f3..0497a9175 100644 --- a/test/builtins/Unit/fixunsdfdi_test.c +++ b/test/builtins/Unit/fixunsdfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunsdfdi_test.c - Test __fixunsdfdi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsdfsi_test.c b/test/builtins/Unit/fixunsdfsi_test.c index 7fbd9ee11..967e47334 100644 --- a/test/builtins/Unit/fixunsdfsi_test.c +++ b/test/builtins/Unit/fixunsdfsi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunsdfsi_test.c - Test __fixunsdfsi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsdfsivfp_test.c b/test/builtins/Unit/fixunsdfsivfp_test.c index b70799247..6d9b2307b 100644 --- a/test/builtins/Unit/fixunsdfsivfp_test.c +++ b/test/builtins/Unit/fixunsdfsivfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunsdfsivfp_test.c - Test __fixunsdfsivfp -----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsdfti_test.c b/test/builtins/Unit/fixunsdfti_test.c index ca0bb76f1..0c68a6690 100644 --- a/test/builtins/Unit/fixunsdfti_test.c +++ b/test/builtins/Unit/fixunsdfti_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- fixunsdfti_test.c - Test __fixunsdfti -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunssfdi_test.c b/test/builtins/Unit/fixunssfdi_test.c index 2d693eb9c..e68be55d2 100644 --- a/test/builtins/Unit/fixunssfdi_test.c +++ b/test/builtins/Unit/fixunssfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunssfdi_test.c - Test __fixunssfdi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunssfsi_test.c b/test/builtins/Unit/fixunssfsi_test.c index 3974b5329..89b16d871 100644 --- a/test/builtins/Unit/fixunssfsi_test.c +++ b/test/builtins/Unit/fixunssfsi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunssfsi_test.c - Test __fixunssfsi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunssfsivfp_test.c b/test/builtins/Unit/fixunssfsivfp_test.c index c1d8ed77f..1f3df0bd3 100644 --- a/test/builtins/Unit/fixunssfsivfp_test.c +++ b/test/builtins/Unit/fixunssfsivfp_test.c @@ -2,10 +2,9 @@ //===-- fixunssfsivfp_test.c - Test __fixunssfsivfp -----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunssfti_test.c b/test/builtins/Unit/fixunssfti_test.c index 2306d283b..7d75d2291 100644 --- a/test/builtins/Unit/fixunssfti_test.c +++ b/test/builtins/Unit/fixunssfti_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- fixunssfti_test.c - Test __fixunssfti -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunstfdi_test.c b/test/builtins/Unit/fixunstfdi_test.c index 67fcc2fde..ddaea4e1b 100644 --- a/test/builtins/Unit/fixunstfdi_test.c +++ b/test/builtins/Unit/fixunstfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunstfdi_test.c - Test __fixunstfdi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunstfsi_test.c b/test/builtins/Unit/fixunstfsi_test.c index edf5422a8..b6958ecb7 100644 --- a/test/builtins/Unit/fixunstfsi_test.c +++ b/test/builtins/Unit/fixunstfsi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- fixunstfsi_test.c - Test __fixunstfsi ----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunstfti_test.c b/test/builtins/Unit/fixunstfti_test.c index eaf4b8fb5..b4013d5c1 100644 --- a/test/builtins/Unit/fixunstfti_test.c +++ b/test/builtins/Unit/fixunstfti_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunstfti_test.c - Test __fixunstfti -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsxfdi_test.c b/test/builtins/Unit/fixunsxfdi_test.c index c5c27d359..7bbeccf66 100644 --- a/test/builtins/Unit/fixunsxfdi_test.c +++ b/test/builtins/Unit/fixunsxfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunsxfdi_test.c - Test __fixunsxfdi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsxfsi_test.c b/test/builtins/Unit/fixunsxfsi_test.c index e0bed7ec8..ae7e5b649 100644 --- a/test/builtins/Unit/fixunsxfsi_test.c +++ b/test/builtins/Unit/fixunsxfsi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixunsxfsi_test.c - Test __fixunsxfsi -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixunsxfti_test.c b/test/builtins/Unit/fixunsxfti_test.c index 4e6fd39dc..8527d574a 100644 --- a/test/builtins/Unit/fixunsxfti_test.c +++ b/test/builtins/Unit/fixunsxfti_test.c @@ -3,10 +3,9 @@ //===-- fixunsxfti_test.c - Test __fixunsxfti -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixxfdi_test.c b/test/builtins/Unit/fixxfdi_test.c index dcfa75c4b..6cb31b32a 100644 --- a/test/builtins/Unit/fixxfdi_test.c +++ b/test/builtins/Unit/fixxfdi_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- fixxfdi_test.c - Test __fixxfdi -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fixxfti_test.c b/test/builtins/Unit/fixxfti_test.c index 86f4c02da..b92338848 100644 --- a/test/builtins/Unit/fixxfti_test.c +++ b/test/builtins/Unit/fixxfti_test.c @@ -3,10 +3,9 @@ //===-- fixxfti_test.c - Test __fixxfti -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatdidf_test.c b/test/builtins/Unit/floatdidf_test.c index 77429173d..e3e091ee5 100644 --- a/test/builtins/Unit/floatdidf_test.c +++ b/test/builtins/Unit/floatdidf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatdidf.c - Test __floatdidf ------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatdisf_test.c b/test/builtins/Unit/floatdisf_test.c index 8299bb171..ce7a04d52 100644 --- a/test/builtins/Unit/floatdisf_test.c +++ b/test/builtins/Unit/floatdisf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatdisf_test.c - Test __floatdisf -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatditf_test.c b/test/builtins/Unit/floatditf_test.c index bdfb7f948..27ef9482e 100644 --- a/test/builtins/Unit/floatditf_test.c +++ b/test/builtins/Unit/floatditf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatditf_test.c - Test __floatditf -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatdixf_test.c b/test/builtins/Unit/floatdixf_test.c index 0a4ca3a57..0ee92e8bc 100644 --- a/test/builtins/Unit/floatdixf_test.c +++ b/test/builtins/Unit/floatdixf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatdixf_test.c - Test __floatdixf -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatsidfvfp_test.c b/test/builtins/Unit/floatsidfvfp_test.c index 8a3c7fb4e..eb1d06b23 100644 --- a/test/builtins/Unit/floatsidfvfp_test.c +++ b/test/builtins/Unit/floatsidfvfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatsidfvfp_test.c - Test __floatsidfvfp -------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatsisfvfp_test.c b/test/builtins/Unit/floatsisfvfp_test.c index 7c044b2f3..b977e339d 100644 --- a/test/builtins/Unit/floatsisfvfp_test.c +++ b/test/builtins/Unit/floatsisfvfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatsisfvfp_test.c - Test __floatsisfvfp -------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatsitf_test.c b/test/builtins/Unit/floatsitf_test.c index f8d700b3b..424a10fbc 100644 --- a/test/builtins/Unit/floatsitf_test.c +++ b/test/builtins/Unit/floatsitf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- floatsitf_test.c - Test __floatsitf ------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floattidf_test.c b/test/builtins/Unit/floattidf_test.c index 51178f28e..76288f002 100644 --- a/test/builtins/Unit/floattidf_test.c +++ b/test/builtins/Unit/floattidf_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- floattidf.c - Test __floattidf ------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floattisf_test.c b/test/builtins/Unit/floattisf_test.c index 9162471a3..4d48d94bb 100644 --- a/test/builtins/Unit/floattisf_test.c +++ b/test/builtins/Unit/floattisf_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- floattisf_test.c - Test __floattisf -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floattitf_test.c b/test/builtins/Unit/floattitf_test.c index 5aeb76057..f0c7dfbc2 100644 --- a/test/builtins/Unit/floattitf_test.c +++ b/test/builtins/Unit/floattitf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floattitf.c - Test __floattitf ------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floattixf_test.c b/test/builtins/Unit/floattixf_test.c index 501a8dc6c..5ab471263 100644 --- a/test/builtins/Unit/floattixf_test.c +++ b/test/builtins/Unit/floattixf_test.c @@ -3,10 +3,9 @@ //===-- floattixf.c - Test __floattixf ------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatundidf_test.c b/test/builtins/Unit/floatundidf_test.c index d5d74195c..e165228a8 100644 --- a/test/builtins/Unit/floatundidf_test.c +++ b/test/builtins/Unit/floatundidf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatundidf_test.c - Test __floatundidf ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatundisf_test.c b/test/builtins/Unit/floatundisf_test.c index 898d8863f..1a2feebf1 100644 --- a/test/builtins/Unit/floatundisf_test.c +++ b/test/builtins/Unit/floatundisf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatundisf_test.c - Test __floatundisf ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatunditf_test.c b/test/builtins/Unit/floatunditf_test.c index 342dc278f..163f0099a 100644 --- a/test/builtins/Unit/floatunditf_test.c +++ b/test/builtins/Unit/floatunditf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatunditf_test.c - Test __floatunditf ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatundixf_test.c b/test/builtins/Unit/floatundixf_test.c index 47b431697..356653578 100644 --- a/test/builtins/Unit/floatundixf_test.c +++ b/test/builtins/Unit/floatundixf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatundixf_test.c - Test __floatundixf ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatunsitf_test.c b/test/builtins/Unit/floatunsitf_test.c index 966a4fd7b..99ca0b685 100644 --- a/test/builtins/Unit/floatunsitf_test.c +++ b/test/builtins/Unit/floatunsitf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- floatunsitf_test.c - Test __floatunsitf --------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatunssidfvfp_test.c b/test/builtins/Unit/floatunssidfvfp_test.c index 733755719..e1ce2d288 100644 --- a/test/builtins/Unit/floatunssidfvfp_test.c +++ b/test/builtins/Unit/floatunssidfvfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatunssidfvfp_test.c - Test __floatunssidfvfp -------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatunssisfvfp_test.c b/test/builtins/Unit/floatunssisfvfp_test.c index 9d7fb654f..878a42dd8 100644 --- a/test/builtins/Unit/floatunssisfvfp_test.c +++ b/test/builtins/Unit/floatunssisfvfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatunssisfvfp_test.c - Test __floatunssisfvfp -------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatuntidf_test.c b/test/builtins/Unit/floatuntidf_test.c index f91d0e1bd..47c281560 100644 --- a/test/builtins/Unit/floatuntidf_test.c +++ b/test/builtins/Unit/floatuntidf_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- floatuntidf.c - Test __floatuntidf --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatuntisf_test.c b/test/builtins/Unit/floatuntisf_test.c index f460a059e..b3a50ed73 100644 --- a/test/builtins/Unit/floatuntisf_test.c +++ b/test/builtins/Unit/floatuntisf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatuntisf.c - Test __floatuntisf --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatuntitf_test.c b/test/builtins/Unit/floatuntitf_test.c index e81c30e32..eb4287ded 100644 --- a/test/builtins/Unit/floatuntitf_test.c +++ b/test/builtins/Unit/floatuntitf_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- floatuntitf.c - Test __floatuntitf --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/floatuntixf_test.c b/test/builtins/Unit/floatuntixf_test.c index a9a8441d0..9ff0b5fa8 100644 --- a/test/builtins/Unit/floatuntixf_test.c +++ b/test/builtins/Unit/floatuntixf_test.c @@ -3,10 +3,9 @@ //===-- floatuntixf.c - Test __floatuntixf --------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/fp_test.h b/test/builtins/Unit/fp_test.h index 781b7e2c7..49f719724 100644 --- a/test/builtins/Unit/fp_test.h +++ b/test/builtins/Unit/fp_test.h @@ -1,9 +1,8 @@ //===--------------------------- fp_test.h - ------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/gcc_personality_test.c b/test/builtins/Unit/gcc_personality_test.c index b3345dd73..9b2d412fc 100644 --- a/test/builtins/Unit/gcc_personality_test.c +++ b/test/builtins/Unit/gcc_personality_test.c @@ -3,10 +3,9 @@ // RUN: %clangxx_builtins %s %librt -o %t && %run %t /* ===-- gcc_personality_test.c - Tests __gcc_personality_v0 -------------=== * - * The LLVM Compiler Infrastructure - * - * This file is dual licensed under the MIT and the University of Illinois Open - * Source Licenses. See LICENSE.TXT for details. + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * * ===----------------------------------------------------------------------=== */ diff --git a/test/builtins/Unit/gcc_personality_test_helper.cxx b/test/builtins/Unit/gcc_personality_test_helper.cxx index 7d1ddfb5d..8987cac00 100644 --- a/test/builtins/Unit/gcc_personality_test_helper.cxx +++ b/test/builtins/Unit/gcc_personality_test_helper.cxx @@ -1,9 +1,8 @@ //===-- gcc_personality_test_helper.cxx -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/test/builtins/Unit/gedf2vfp_test.c b/test/builtins/Unit/gedf2vfp_test.c index ad72083b4..0edf4b848 100644 --- a/test/builtins/Unit/gedf2vfp_test.c +++ b/test/builtins/Unit/gedf2vfp_test.c @@ -2,10 +2,9 @@ //===-- gedf2vfp_test.c - Test __gedf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/gesf2vfp_test.c b/test/builtins/Unit/gesf2vfp_test.c index 8a855e12f..e84fa4672 100644 --- a/test/builtins/Unit/gesf2vfp_test.c +++ b/test/builtins/Unit/gesf2vfp_test.c @@ -2,10 +2,9 @@ //===-- gesf2vfp_test.c - Test __gesf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/getf2_test.c b/test/builtins/Unit/getf2_test.c index 115b630b4..be8e122d2 100644 --- a/test/builtins/Unit/getf2_test.c +++ b/test/builtins/Unit/getf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ getf2_test.c - Test __getf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/gtdf2vfp_test.c b/test/builtins/Unit/gtdf2vfp_test.c index e6eb545db..d69d05347 100644 --- a/test/builtins/Unit/gtdf2vfp_test.c +++ b/test/builtins/Unit/gtdf2vfp_test.c @@ -2,10 +2,9 @@ //===-- gtdf2vfp_test.c - Test __gtdf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/gtsf2vfp_test.c b/test/builtins/Unit/gtsf2vfp_test.c index e0442c6cd..b1eccfe90 100644 --- a/test/builtins/Unit/gtsf2vfp_test.c +++ b/test/builtins/Unit/gtsf2vfp_test.c @@ -2,10 +2,9 @@ //===-- gtsf2vfp_test.c - Test __gtsf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/gttf2_test.c b/test/builtins/Unit/gttf2_test.c index 81d68cbf1..712d6818e 100644 --- a/test/builtins/Unit/gttf2_test.c +++ b/test/builtins/Unit/gttf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ gttf2_test.c - Test __gttf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ledf2vfp_test.c b/test/builtins/Unit/ledf2vfp_test.c index f0cd56eab..651a6cceb 100644 --- a/test/builtins/Unit/ledf2vfp_test.c +++ b/test/builtins/Unit/ledf2vfp_test.c @@ -2,10 +2,9 @@ //===-- ledf2vfp_test.c - Test __ledf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/lesf2vfp_test.c b/test/builtins/Unit/lesf2vfp_test.c index 02ae182e6..274be1b12 100644 --- a/test/builtins/Unit/lesf2vfp_test.c +++ b/test/builtins/Unit/lesf2vfp_test.c @@ -2,10 +2,9 @@ //===-- lesf2vfp_test.c - Test __lesf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/letf2_test.c b/test/builtins/Unit/letf2_test.c index bb8452567..39b3e9bfd 100644 --- a/test/builtins/Unit/letf2_test.c +++ b/test/builtins/Unit/letf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ letf2_test.c - Test __letf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/lshrdi3_test.c b/test/builtins/Unit/lshrdi3_test.c index c5faa98ee..791980b0f 100644 --- a/test/builtins/Unit/lshrdi3_test.c +++ b/test/builtins/Unit/lshrdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- lshrdi3_test.c - Test __lshrdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/lshrti3_test.c b/test/builtins/Unit/lshrti3_test.c index 51020edbf..c16437708 100644 --- a/test/builtins/Unit/lshrti3_test.c +++ b/test/builtins/Unit/lshrti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- lshrti3_test.c - Test __lshrti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ltdf2vfp_test.c b/test/builtins/Unit/ltdf2vfp_test.c index 1edb319d4..89a719d90 100644 --- a/test/builtins/Unit/ltdf2vfp_test.c +++ b/test/builtins/Unit/ltdf2vfp_test.c @@ -2,10 +2,9 @@ //===-- ltdf2vfp_test.c - Test __ltdf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ltsf2vfp_test.c b/test/builtins/Unit/ltsf2vfp_test.c index 2fc0c1127..d286ac09b 100644 --- a/test/builtins/Unit/ltsf2vfp_test.c +++ b/test/builtins/Unit/ltsf2vfp_test.c @@ -2,10 +2,9 @@ //===-- ltsf2vfp_test.c - Test __ltsf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/lttf2_test.c b/test/builtins/Unit/lttf2_test.c index cfe1906d2..c57c5d76d 100644 --- a/test/builtins/Unit/lttf2_test.c +++ b/test/builtins/Unit/lttf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ lttf2_test.c - Test __lttf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/moddi3_test.c b/test/builtins/Unit/moddi3_test.c index 8325ad75b..02face1b9 100644 --- a/test/builtins/Unit/moddi3_test.c +++ b/test/builtins/Unit/moddi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- moddi3_test.c - Test __moddi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/modsi3_test.c b/test/builtins/Unit/modsi3_test.c index 8075f5160..bab944476 100644 --- a/test/builtins/Unit/modsi3_test.c +++ b/test/builtins/Unit/modsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t /* ===-- modsi3_test.c - Test __modsi3 -------------------------------------=== * - * The LLVM Compiler Infrastructure - * - * This file is dual licensed under the MIT and the University of Illinois Open - * Source Licenses. See LICENSE.TXT for details. + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * * ===----------------------------------------------------------------------=== * diff --git a/test/builtins/Unit/modti3_test.c b/test/builtins/Unit/modti3_test.c index 9faa0b5af..22b4483ad 100644 --- a/test/builtins/Unit/modti3_test.c +++ b/test/builtins/Unit/modti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- modti3_test.c - Test __modti3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/muldc3_test.c b/test/builtins/Unit/muldc3_test.c index 5a856bc2c..855a05f0c 100644 --- a/test/builtins/Unit/muldc3_test.c +++ b/test/builtins/Unit/muldc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -lm -o %t && %run %t //===-- muldc3_test.c - Test __muldc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/muldf3vfp_test.c b/test/builtins/Unit/muldf3vfp_test.c index 36a22625c..7022906b2 100644 --- a/test/builtins/Unit/muldf3vfp_test.c +++ b/test/builtins/Unit/muldf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- muldf3vfp_test.c - Test __muldf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/muldi3_test.c b/test/builtins/Unit/muldi3_test.c index d09e74d1a..c4eaf0437 100644 --- a/test/builtins/Unit/muldi3_test.c +++ b/test/builtins/Unit/muldi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- muldi3_test.c - Test __muldi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulodi4_test.c b/test/builtins/Unit/mulodi4_test.c index f03b8fecf..d3d46ad38 100644 --- a/test/builtins/Unit/mulodi4_test.c +++ b/test/builtins/Unit/mulodi4_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulodi4_test.c - Test __mulodi4 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulosi4_test.c b/test/builtins/Unit/mulosi4_test.c index 12913f1d7..4e90fb7a3 100644 --- a/test/builtins/Unit/mulosi4_test.c +++ b/test/builtins/Unit/mulosi4_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulosi4_test.c - Test __mulosi4 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/muloti4_test.c b/test/builtins/Unit/muloti4_test.c index 9eb56f648..d13a97758 100644 --- a/test/builtins/Unit/muloti4_test.c +++ b/test/builtins/Unit/muloti4_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- muloti4_test.c - Test __muloti4 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulsc3_test.c b/test/builtins/Unit/mulsc3_test.c index 4125a307b..0a4b92945 100644 --- a/test/builtins/Unit/mulsc3_test.c +++ b/test/builtins/Unit/mulsc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -lm -o %t && %run %t //===-- mulsc3_test.c - Test __mulsc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulsf3vfp_test.c b/test/builtins/Unit/mulsf3vfp_test.c index 8ee05510b..464e9f126 100644 --- a/test/builtins/Unit/mulsf3vfp_test.c +++ b/test/builtins/Unit/mulsf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulsf3vfp_test.c - Test __mulsf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/multc3_test.c b/test/builtins/Unit/multc3_test.c index 5ef84670e..811260507 100644 --- a/test/builtins/Unit/multc3_test.c +++ b/test/builtins/Unit/multc3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- multc3_test.c - Test __multc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/multf3_test.c b/test/builtins/Unit/multf3_test.c index 2bce70793..c821799bc 100644 --- a/test/builtins/Unit/multf3_test.c +++ b/test/builtins/Unit/multf3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- multf3_test.c - Test __multf3 ------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/multi3_test.c b/test/builtins/Unit/multi3_test.c index d92bae68b..52516cde6 100644 --- a/test/builtins/Unit/multi3_test.c +++ b/test/builtins/Unit/multi3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- multi3_test.c - Test __multi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulvdi3_test.c b/test/builtins/Unit/mulvdi3_test.c index 0e10bbef1..5b0c3cbe4 100644 --- a/test/builtins/Unit/mulvdi3_test.c +++ b/test/builtins/Unit/mulvdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulvdi3_test.c - Test __mulvdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulvsi3_test.c b/test/builtins/Unit/mulvsi3_test.c index f62a5aa42..3e38a8826 100644 --- a/test/builtins/Unit/mulvsi3_test.c +++ b/test/builtins/Unit/mulvsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulvsi3_test.c - Test __mulvsi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulvti3_test.c b/test/builtins/Unit/mulvti3_test.c index f964ed699..9afe3c81f 100644 --- a/test/builtins/Unit/mulvti3_test.c +++ b/test/builtins/Unit/mulvti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- mulvti3_test.c - Test __mulvti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/mulxc3_test.c b/test/builtins/Unit/mulxc3_test.c index 9f0b41829..8458daf52 100644 --- a/test/builtins/Unit/mulxc3_test.c +++ b/test/builtins/Unit/mulxc3_test.c @@ -3,10 +3,9 @@ // REQUIRES: x86-target-arch //===-- mulxc3_test.c - Test __mulxc3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/nedf2vfp_test.c b/test/builtins/Unit/nedf2vfp_test.c index 536917af3..b6f0f4ade 100644 --- a/test/builtins/Unit/nedf2vfp_test.c +++ b/test/builtins/Unit/nedf2vfp_test.c @@ -2,10 +2,9 @@ //===-- nedf2vfp_test.c - Test __nedf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negdf2vfp_test.c b/test/builtins/Unit/negdf2vfp_test.c index 776dca618..221452ebf 100644 --- a/test/builtins/Unit/negdf2vfp_test.c +++ b/test/builtins/Unit/negdf2vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- negdf2vfp_test.c - Test __negdf2vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negdi2_test.c b/test/builtins/Unit/negdi2_test.c index c85e91581..77386882d 100644 --- a/test/builtins/Unit/negdi2_test.c +++ b/test/builtins/Unit/negdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- negdi2_test.c - Test __negdi2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negsf2vfp_test.c b/test/builtins/Unit/negsf2vfp_test.c index e15e43c80..72b990f1c 100644 --- a/test/builtins/Unit/negsf2vfp_test.c +++ b/test/builtins/Unit/negsf2vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- negsf2vfp_test.c - Test __negsf2vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negti2_test.c b/test/builtins/Unit/negti2_test.c index 89eb0b04f..45533d070 100644 --- a/test/builtins/Unit/negti2_test.c +++ b/test/builtins/Unit/negti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- negti2_test.c - Test __negti2 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negvdi2_test.c b/test/builtins/Unit/negvdi2_test.c index 4e17c3089..f6e70c800 100644 --- a/test/builtins/Unit/negvdi2_test.c +++ b/test/builtins/Unit/negvdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- negvdi2_test.c - Test __negvdi2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negvsi2_test.c b/test/builtins/Unit/negvsi2_test.c index 3deb4235b..437ba8808 100644 --- a/test/builtins/Unit/negvsi2_test.c +++ b/test/builtins/Unit/negvsi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- negvsi2_test.c - Test __negvsi2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/negvti2_test.c b/test/builtins/Unit/negvti2_test.c index 9c2765ec6..fd2ee25a0 100644 --- a/test/builtins/Unit/negvti2_test.c +++ b/test/builtins/Unit/negvti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- negvti2_test.c - Test __negvti2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/nesf2vfp_test.c b/test/builtins/Unit/nesf2vfp_test.c index bb0149087..dca50c781 100644 --- a/test/builtins/Unit/nesf2vfp_test.c +++ b/test/builtins/Unit/nesf2vfp_test.c @@ -2,10 +2,9 @@ //===-- nesf2vfp_test.c - Test __nesf2vfp ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/netf2_test.c b/test/builtins/Unit/netf2_test.c index c0b839d64..75114979e 100644 --- a/test/builtins/Unit/netf2_test.c +++ b/test/builtins/Unit/netf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ netf2_test.c - Test __netf2------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/paritydi2_test.c b/test/builtins/Unit/paritydi2_test.c index cc56eda57..ac5e47271 100644 --- a/test/builtins/Unit/paritydi2_test.c +++ b/test/builtins/Unit/paritydi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- paritydi2_test.c - Test __paritydi2 -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/paritysi2_test.c b/test/builtins/Unit/paritysi2_test.c index 42d687f17..f650b5661 100644 --- a/test/builtins/Unit/paritysi2_test.c +++ b/test/builtins/Unit/paritysi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- paritysi2_test.c - Test __paritysi2 -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/parityti2_test.c b/test/builtins/Unit/parityti2_test.c index 11d578be5..2a1b654f9 100644 --- a/test/builtins/Unit/parityti2_test.c +++ b/test/builtins/Unit/parityti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- parityti2_test.c - Test __parityti2 -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/popcountdi2_test.c b/test/builtins/Unit/popcountdi2_test.c index 1d52fb8db..1d0eaee3c 100644 --- a/test/builtins/Unit/popcountdi2_test.c +++ b/test/builtins/Unit/popcountdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- popcountdi2_test.c - Test __popcountdi2 ----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/popcountsi2_test.c b/test/builtins/Unit/popcountsi2_test.c index 5eb88ac62..4ab3499e9 100644 --- a/test/builtins/Unit/popcountsi2_test.c +++ b/test/builtins/Unit/popcountsi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- popcountsi2_test.c - Test __popcountsi2 ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/popcountti2_test.c b/test/builtins/Unit/popcountti2_test.c index 91c169fb5..4e32ba747 100644 --- a/test/builtins/Unit/popcountti2_test.c +++ b/test/builtins/Unit/popcountti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- popcountti2_test.c - Test __popcountti2 ----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/powidf2_test.c b/test/builtins/Unit/powidf2_test.c index 210e3c3c7..6bdca0899 100644 --- a/test/builtins/Unit/powidf2_test.c +++ b/test/builtins/Unit/powidf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- powidf2_test.cpp - Test __powidf2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/powisf2_test.c b/test/builtins/Unit/powisf2_test.c index add4be43f..f344f0833 100644 --- a/test/builtins/Unit/powisf2_test.c +++ b/test/builtins/Unit/powisf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- powisf2_test.cpp - Test __powisf2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/powitf2_test.c b/test/builtins/Unit/powitf2_test.c index 9d11b76cb..0850d77d7 100644 --- a/test/builtins/Unit/powitf2_test.c +++ b/test/builtins/Unit/powitf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- powitf2_test.cpp - Test __powitf2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/powixf2_test.c b/test/builtins/Unit/powixf2_test.c index 1df76f2b8..03a157fc6 100644 --- a/test/builtins/Unit/powixf2_test.c +++ b/test/builtins/Unit/powixf2_test.c @@ -3,10 +3,9 @@ // REQUIRES: x86-target-arch //===-- powixf2_test.cpp - Test __powixf2 ---------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/riscv/mulsi3_test.c b/test/builtins/Unit/riscv/mulsi3_test.c index 9033004f1..8383d4548 100644 --- a/test/builtins/Unit/riscv/mulsi3_test.c +++ b/test/builtins/Unit/riscv/mulsi3_test.c @@ -2,10 +2,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- mulsi3_test.c - Test __mulsi3 -------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subdf3vfp_test.c b/test/builtins/Unit/subdf3vfp_test.c index 75bfe4542..afaaca804 100644 --- a/test/builtins/Unit/subdf3vfp_test.c +++ b/test/builtins/Unit/subdf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- subdf3vfp_test.c - Test __subdf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subsf3vfp_test.c b/test/builtins/Unit/subsf3vfp_test.c index fb3839f23..d93df6bdc 100644 --- a/test/builtins/Unit/subsf3vfp_test.c +++ b/test/builtins/Unit/subsf3vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- subsf3vfp_test.c - Test __subsf3vfp -------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subtf3_test.c b/test/builtins/Unit/subtf3_test.c index 771242ba4..bcf82e0c6 100644 --- a/test/builtins/Unit/subtf3_test.c +++ b/test/builtins/Unit/subtf3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- subtf3_test.c - Test __subtf3 ------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subvdi3_test.c b/test/builtins/Unit/subvdi3_test.c index 7606e27d1..04febf95c 100644 --- a/test/builtins/Unit/subvdi3_test.c +++ b/test/builtins/Unit/subvdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- subvdi3_test.c - Test __subvdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subvsi3_test.c b/test/builtins/Unit/subvsi3_test.c index f52a12b60..fc8898ecd 100644 --- a/test/builtins/Unit/subvsi3_test.c +++ b/test/builtins/Unit/subvsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- subvsi3_test.c - Test __subvsi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/subvti3_test.c b/test/builtins/Unit/subvti3_test.c index 3add1ebc4..9db967469 100644 --- a/test/builtins/Unit/subvti3_test.c +++ b/test/builtins/Unit/subvti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- subvti3_test.c - Test __subvti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/trampoline_setup_test.c b/test/builtins/Unit/trampoline_setup_test.c index b8c3eae2d..316d7cce8 100644 --- a/test/builtins/Unit/trampoline_setup_test.c +++ b/test/builtins/Unit/trampoline_setup_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -fnested-functions -o %t && %run %t /* ===-- trampoline_setup_test.c - Test __trampoline_setup -----------------=== * - * The LLVM Compiler Infrastructure - * - * This file is dual licensed under the MIT and the University of Illinois Open - * Source Licenses. See LICENSE.TXT for details. + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * * ===----------------------------------------------------------------------=== */ diff --git a/test/builtins/Unit/truncdfhf2_test.c b/test/builtins/Unit/truncdfhf2_test.c index b172811a1..1b09fef78 100644 --- a/test/builtins/Unit/truncdfhf2_test.c +++ b/test/builtins/Unit/truncdfhf2_test.c @@ -2,10 +2,9 @@ //===--------------- truncdfhf2_test.c - Test __truncdfhf2 ----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/truncdfsf2_test.c b/test/builtins/Unit/truncdfsf2_test.c index 04bebf4c6..6c8f11948 100644 --- a/test/builtins/Unit/truncdfsf2_test.c +++ b/test/builtins/Unit/truncdfsf2_test.c @@ -2,10 +2,9 @@ //===--------------- truncdfsf2_test.c - Test __truncdfsf2 ----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/truncdfsf2vfp_test.c b/test/builtins/Unit/truncdfsf2vfp_test.c index f034dd2da..0e52d3419 100644 --- a/test/builtins/Unit/truncdfsf2vfp_test.c +++ b/test/builtins/Unit/truncdfsf2vfp_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- truncdfsf2vfp_test.c - Test __truncdfsf2vfp -----------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/truncsfhf2_test.c b/test/builtins/Unit/truncsfhf2_test.c index 2240c14a5..f6f3fc2ec 100644 --- a/test/builtins/Unit/truncsfhf2_test.c +++ b/test/builtins/Unit/truncsfhf2_test.c @@ -2,10 +2,9 @@ //===--------------- truncsfhf2_test.c - Test __truncsfhf2 ----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/trunctfdf2_test.c b/test/builtins/Unit/trunctfdf2_test.c index 1d8c2bf05..ae372be84 100644 --- a/test/builtins/Unit/trunctfdf2_test.c +++ b/test/builtins/Unit/trunctfdf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-------------- trunctfdf2_test.c - Test __trunctfdf2 -----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/trunctfsf2_test.c b/test/builtins/Unit/trunctfsf2_test.c index 177508319..3f350e621 100644 --- a/test/builtins/Unit/trunctfsf2_test.c +++ b/test/builtins/Unit/trunctfsf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===--------------- trunctfsf2_test.c - Test __trunctfsf2 ----------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ucmpdi2_test.c b/test/builtins/Unit/ucmpdi2_test.c index ee815454a..6faaac1d2 100644 --- a/test/builtins/Unit/ucmpdi2_test.c +++ b/test/builtins/Unit/ucmpdi2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- ucmpdi2_test.c - Test __ucmpdi2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/ucmpti2_test.c b/test/builtins/Unit/ucmpti2_test.c index 39a6f5b95..71db5df23 100644 --- a/test/builtins/Unit/ucmpti2_test.c +++ b/test/builtins/Unit/ucmpti2_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- ucmpti2_test.c - Test __ucmpti2 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivdi3_test.c b/test/builtins/Unit/udivdi3_test.c index 5858bc7f9..bfdd1db13 100644 --- a/test/builtins/Unit/udivdi3_test.c +++ b/test/builtins/Unit/udivdi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- udivdi3_test.c - Test __udivdi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivmoddi4_test.c b/test/builtins/Unit/udivmoddi4_test.c index a5024bae0..278b29abc 100644 --- a/test/builtins/Unit/udivmoddi4_test.c +++ b/test/builtins/Unit/udivmoddi4_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- udivmoddi4_test.c - Test __udivmoddi4 -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivmodsi4_test.c b/test/builtins/Unit/udivmodsi4_test.c index 320018cba..b390796a4 100644 --- a/test/builtins/Unit/udivmodsi4_test.c +++ b/test/builtins/Unit/udivmodsi4_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- udivmodsi4_test.c - Test __udivmodsi4 -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivmodti4_test.c b/test/builtins/Unit/udivmodti4_test.c index 38da855ae..d022759db 100644 --- a/test/builtins/Unit/udivmodti4_test.c +++ b/test/builtins/Unit/udivmodti4_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- udivmodti4_test.c - Test __udivmodti4 -----------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivsi3_test.c b/test/builtins/Unit/udivsi3_test.c index 7adf30a15..f4249f5d1 100644 --- a/test/builtins/Unit/udivsi3_test.c +++ b/test/builtins/Unit/udivsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- udivsi3_test.c - Test __udivsi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/udivti3_test.c b/test/builtins/Unit/udivti3_test.c index 2db440d5b..ae6412338 100644 --- a/test/builtins/Unit/udivti3_test.c +++ b/test/builtins/Unit/udivti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- udivti3_test.c - Test __udivti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/umoddi3_test.c b/test/builtins/Unit/umoddi3_test.c index b1382b621..5c79e56a7 100644 --- a/test/builtins/Unit/umoddi3_test.c +++ b/test/builtins/Unit/umoddi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- umoddi3_test.c - Test __umoddi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/umodsi3_test.c b/test/builtins/Unit/umodsi3_test.c index c43053874..2ff1f9e79 100644 --- a/test/builtins/Unit/umodsi3_test.c +++ b/test/builtins/Unit/umodsi3_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===-- umodsi3_test.c - Test __umodsi3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/umodti3_test.c b/test/builtins/Unit/umodti3_test.c index adfc8eba3..0f9317599 100644 --- a/test/builtins/Unit/umodti3_test.c +++ b/test/builtins/Unit/umodti3_test.c @@ -2,10 +2,9 @@ // REQUIRES: int128 //===-- umodti3_test.c - Test __umodti3 -----------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/unorddf2vfp_test.c b/test/builtins/Unit/unorddf2vfp_test.c index 21938d044..128c1d81f 100644 --- a/test/builtins/Unit/unorddf2vfp_test.c +++ b/test/builtins/Unit/unorddf2vfp_test.c @@ -2,10 +2,9 @@ //===-- unorddf2vfp_test.c - Test __unorddf2vfp ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/unordsf2vfp_test.c b/test/builtins/Unit/unordsf2vfp_test.c index 712665294..94f06d841 100644 --- a/test/builtins/Unit/unordsf2vfp_test.c +++ b/test/builtins/Unit/unordsf2vfp_test.c @@ -2,10 +2,9 @@ //===-- unordsf2vfp_test.c - Test __unordsf2vfp ---------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/builtins/Unit/unordtf2_test.c b/test/builtins/Unit/unordtf2_test.c index 22907ce76..8f5b11004 100644 --- a/test/builtins/Unit/unordtf2_test.c +++ b/test/builtins/Unit/unordtf2_test.c @@ -1,10 +1,9 @@ // RUN: %clang_builtins %s %librt -o %t && %run %t //===------------ unordtf2_test.c - Test __unordtf2------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // diff --git a/test/cfi/CMakeLists.txt b/test/cfi/CMakeLists.txt index 4dbbf1759..d99213632 100644 --- a/test/cfi/CMakeLists.txt +++ b/test/cfi/CMakeLists.txt @@ -74,15 +74,17 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) opt sanstats ) - if(LLVM_ENABLE_PIC AND LLVM_BINUTILS_INCDIR) - list(APPEND CFI_TEST_DEPS - LLVMgold - ) - endif() - if(APPLE) - list(APPEND CFI_TEST_DEPS - LTO - ) + if(LLVM_ENABLE_PIC) + if(LLVM_BINUTILS_INCDIR) + list(APPEND CFI_TEST_DEPS + LLVMgold + ) + endif() + if(APPLE) + list(APPEND CFI_TEST_DEPS + LTO + ) + endif() endif() if(NOT APPLE AND COMPILER_RT_HAS_LLD) list(APPEND CFI_TEST_DEPS diff --git a/test/crt/CMakeLists.txt b/test/crt/CMakeLists.txt new file mode 100644 index 000000000..253b76a8c --- /dev/null +++ b/test/crt/CMakeLists.txt @@ -0,0 +1,34 @@ +set(CRT_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + +set(CRT_TESTSUITES) + +set(CRT_TEST_DEPS) +if(NOT COMPILER_RT_STANDALONE_BUILD) + list(APPEND CRT_TEST_DEPS crt) +endif() +if(NOT COMPILER_RT_STANDALONE_BUILD AND NOT RUNTIMES_BUILD) + # Use LLVM utils and Clang from the same build tree. + list(APPEND CRT_TEST_DEPS + clang clang-resource-headers FileCheck not llvm-config) +endif() + +set(CRT_TEST_ARCH ${CRT_SUPPORTED_ARCH}) +if (COMPILER_RT_BUILD_CRT AND COMPILER_RT_HAS_CRT) + foreach(arch ${CRT_TEST_ARCH}) + set(CRT_TEST_TARGET_ARCH ${arch}) + string(TOLOWER "-${arch}-${OS_NAME}" CRT_TEST_CONFIG_SUFFIX) + get_test_cc_for_arch(${arch} CRT_TEST_TARGET_CC CRT_TEST_TARGET_CFLAGS) + string(TOUPPER ${arch} ARCH_UPPER_CASE) + set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config) + + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) + list(APPEND CRT_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) + endforeach() +endif() + +add_lit_testsuite(check-crt "Running the CRT tests" + ${CRT_TESTSUITES} + DEPENDS ${CRT_TEST_DEPS}) +set_target_properties(check-crt PROPERTIES FOLDER "Compiler-RT Misc") diff --git a/test/crt/ctor_dtor.c b/test/crt/ctor_dtor.c new file mode 100644 index 000000000..64f188333 --- /dev/null +++ b/test/crt/ctor_dtor.c @@ -0,0 +1,22 @@ +// RUN: %clang -fno-use-init-array -g -c %s -o %t.o +// RUN: %clang -fno-use-init-array -g -o %t -nostdlib %crt1 %crti %crtbegin %t.o -lc %libgcc %crtend %crtn +// RUN: %run %t 2>&1 | FileCheck %s + +#include <stdio.h> + +// CHECK: ctor() +// CHECK-NEXT: main() +// CHECK-NEXT: dtor() + +void __attribute__((constructor)) ctor() { + printf("ctor()\n"); +} + +void __attribute__((destructor)) dtor() { + printf("dtor()\n"); +} + +int main() { + printf("main()\n"); + return 0; +} diff --git a/test/crt/dso_handle.cpp b/test/crt/dso_handle.cpp new file mode 100644 index 000000000..c08ed9c0e --- /dev/null +++ b/test/crt/dso_handle.cpp @@ -0,0 +1,33 @@ +// RUN: %clangxx -g -DCRT_SHARED -c %s -fPIC -o %tshared.o +// RUN: %clangxx -g -c %s -fPIC -o %t.o +// RUN: %clangxx -g -shared -o %t.so -nostdlib %crti %crtbegin %tshared.o %libstdcxx -lc -lm %libgcc %crtend %crtn +// RUN: %clangxx -g -o %t -nostdlib %crt1 %crti %crtbegin %t.o %libstdcxx -lc -lm %libgcc %t.so %crtend %crtn +// RUN: %run %t 2>&1 | FileCheck %s + +#include <stdio.h> + +// CHECK: 1 +// CHECK-NEXT: ~A() + +#ifdef CRT_SHARED +bool G; +void C() { + printf("%d\n", G); +} + +struct A { + A() { G = true; } + ~A() { + printf("~A()\n"); + } +}; + +A a; +#else +void C(); + +int main() { + C(); + return 0; +} +#endif diff --git a/test/crt/lit.cfg b/test/crt/lit.cfg new file mode 100644 index 000000000..eaf00217e --- /dev/null +++ b/test/crt/lit.cfg @@ -0,0 +1,78 @@ +# -*- Python -*- + +import os +import subprocess + +# Setup config name. +config.name = 'CRT' + config.name_suffix + +# Setup source root. +config.test_source_root = os.path.dirname(__file__) + + +def get_library_path(file): + cmd = subprocess.Popen([config.clang.strip(), + config.target_cflags.strip(), + '-print-file-name=%s' % file], + stdout=subprocess.PIPE, + env=config.environment) + if not cmd.stdout: + lit_config.fatal("Couldn't find the library path for '%s'" % file) + dir = cmd.stdout.read().strip() + if sys.platform in ['win32'] and execute_external: + # Don't pass dosish path separator to msys bash.exe. + dir = dir.replace('\\', '/') + # Ensure the result is an ascii string, across Python2.5+ - Python3. + return str(dir.decode('ascii')) + + +def get_libgcc_file_name(): + cmd = subprocess.Popen([config.clang.strip(), + config.target_cflags.strip(), + '-print-libgcc-file-name'], + stdout=subprocess.PIPE, + env=config.environment) + if not cmd.stdout: + lit_config.fatal("Couldn't find the library path for '%s'" % file) + dir = cmd.stdout.read().strip() + if sys.platform in ['win32'] and execute_external: + # Don't pass dosish path separator to msys bash.exe. + dir = dir.replace('\\', '/') + # Ensure the result is an ascii string, across Python2.5+ - Python3. + return str(dir.decode('ascii')) + + +def build_invocation(compile_flags): + return ' ' + ' '.join([config.clang] + compile_flags) + ' ' + + +# Setup substitutions. +config.substitutions.append( + ('%clang ', build_invocation([config.target_cflags]))) +config.substitutions.append( + ('%clangxx ', + build_invocation(config.cxx_mode_flags + [config.target_cflags]))) + +base_lib = os.path.join( + config.compiler_rt_libdir, "clang_rt.%%s%s.o" % config.target_suffix) +config.substitutions.append(('%crtbegin', base_lib % "crtbegin")) +config.substitutions.append(('%crtend', base_lib % "crtend")) + +config.substitutions.append( + ('%crt1', get_library_path('crt1.o'))) +config.substitutions.append( + ('%crti', get_library_path('crti.o'))) +config.substitutions.append( + ('%crtn', get_library_path('crtn.o'))) + +config.substitutions.append( + ('%libgcc', get_libgcc_file_name())) + +config.substitutions.append( + ('%libstdcxx', '-l' + config.sanitizer_cxx_lib.lstrip('lib'))) + +# Default test suffixes. +config.suffixes = ['.c', '.cc', '.cpp'] + +if config.host_os not in ['Linux']: + config.unsupported = True diff --git a/test/crt/lit.site.cfg.in b/test/crt/lit.site.cfg.in new file mode 100644 index 000000000..a9a0ce0f3 --- /dev/null +++ b/test/crt/lit.site.cfg.in @@ -0,0 +1,14 @@ +@LIT_SITE_CFG_IN_HEADER@ + +# Tool-specific config options. +config.name_suffix = "@CRT_TEST_CONFIG_SUFFIX@" +config.crt_lit_source_dir = "@CRT_LIT_SOURCE_DIR@" +config.target_cflags = "@CRT_TEST_TARGET_CFLAGS@" +config.target_arch = "@CRT_TEST_TARGET_ARCH@" +config.sanitizer_cxx_lib = "@SANITIZER_TEST_CXX_LIBNAME@" + +# Load common config for all compiler-rt lit tests +lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") + +# Load tool-specific config that would do the real work. +lit_config.load_config(config, "@CRT_LIT_SOURCE_DIR@/lit.cfg") diff --git a/test/esan/CMakeLists.txt b/test/esan/CMakeLists.txt deleted file mode 100644 index bbdcd51af..000000000 --- a/test/esan/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -set(ESAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) -if(NOT COMPILER_RT_STANDALONE_BUILD) - list(APPEND ESAN_TEST_DEPS esan) -endif() - -set(ESAN_TESTSUITES) - -set(ESAN_TEST_ARCH ${ESAN_SUPPORTED_ARCH}) - -set(ESAN_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - -foreach(arch ${ESAN_TEST_ARCH}) - set(ESAN_TEST_TARGET_ARCH ${arch}) - string(TOLOWER "-${arch}" ESAN_TEST_CONFIG_SUFFIX) - get_target_flags_for_arch(${arch} ESAN_TEST_TARGET_CFLAGS) - string(REPLACE ";" " " ESAN_TEST_TARGET_CFLAGS "${ESAN_TEST_TARGET_CFLAGS}") - - string(TOUPPER ${arch} ARCH_UPPER_CASE) - set(CONFIG_NAME ${ARCH_UPPER_CASE}Config) - - configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) - list(APPEND ESAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) -endforeach() - -# TODO(bruening): add Unit/ tests as well - -add_lit_testsuite(check-esan "Running EfficiencySanitizer tests" - ${ESAN_TESTSUITES} - DEPENDS ${ESAN_TEST_DEPS}) -set_target_properties(check-esan PROPERTIES FOLDER "Compiler-RT Misc") diff --git a/test/esan/TestCases/large-stack-linux.c b/test/esan/TestCases/large-stack-linux.c deleted file mode 100644 index 17d88674b..000000000 --- a/test/esan/TestCases/large-stack-linux.c +++ /dev/null @@ -1,76 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts="verbosity=1 record_snapshots=0" %run %t %t 2>&1 | FileCheck %s -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <assert.h> -#include <stdio.h> -#include <sys/mman.h> -#include <sys/resource.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> - -static void testChildStackLimit(rlim_t StackLimit, char *ToRun) { - int Res; - struct rlimit Limit; - Limit.rlim_cur = RLIM_INFINITY; - Limit.rlim_max = RLIM_INFINITY; - Res = setrlimit(RLIMIT_STACK, &Limit); - if (Res != 0) { - // Probably our environment had a large limit and we ourselves got - // re-execed and can no longer raise our limit. - // We have to bail and emulate the regular test. - // We'd prefer to have branches in our FileCheck output to ensure the - // initial program was re-execed but this is the best we can do for now. - fprintf(stderr, "in esan::initializeLibrary\n"); - fprintf(stderr, "==1234==The stack size limit is beyond the maximum supported.\n"); - fprintf(stderr, "Re-execing with a stack size below 1TB.\n"); - fprintf(stderr, "in esan::initializeLibrary\n"); - fprintf(stderr, "done\n"); - fprintf(stderr, "in esan::finalizeLibrary\n"); - return; - } - - pid_t Child = fork(); - assert(Child >= 0); - if (Child > 0) { - pid_t WaitRes = waitpid(Child, NULL, 0); - assert(WaitRes == Child); - } else { - char *Args[2]; - Args[0] = ToRun; - Args[1] = NULL; - Res = execv(ToRun, Args); - assert(0); // Should not be reached. - } -} - -int main(int argc, char *argv[]) { - // The path to the program to exec must be passed in the first time. - if (argc == 2) { - fprintf(stderr, "Testing child with infinite stack\n"); - testChildStackLimit(RLIM_INFINITY, argv[1]); - fprintf(stderr, "Testing child with 1TB stack\n"); - testChildStackLimit(1ULL << 40, argv[1]); - } - fprintf(stderr, "done\n"); - // CHECK: in esan::initializeLibrary - // CHECK: Testing child with infinite stack - // CHECK-NEXT: in esan::initializeLibrary - // CHECK-NEXT: =={{[0-9:]+}}==The stack size limit is beyond the maximum supported. - // CHECK-NEXT: Re-execing with a stack size below 1TB. - // CHECK-NEXT: in esan::initializeLibrary - // CHECK: done - // CHECK: in esan::finalizeLibrary - // CHECK: Testing child with 1TB stack - // CHECK-NEXT: in esan::initializeLibrary - // CHECK-NEXT: =={{[0-9:]+}}==The stack size limit is beyond the maximum supported. - // CHECK-NEXT: Re-execing with a stack size below 1TB. - // CHECK-NEXT: in esan::initializeLibrary - // CHECK: done - // CHECK-NEXT: in esan::finalizeLibrary - // CHECK: done - // CHECK-NEXT: in esan::finalizeLibrary - return 0; -} diff --git a/test/esan/TestCases/libc-intercept.c b/test/esan/TestCases/libc-intercept.c deleted file mode 100644 index 8d8d81f0b..000000000 --- a/test/esan/TestCases/libc-intercept.c +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_esan_frag -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts=verbosity=3 %run %t 2>&1 | FileCheck %s - -#include <string.h> - -int main(int argc, char **argv) { - char Buf[2048]; - const char Str[] = "TestStringOfParticularLength"; // 29 chars. - strcpy(Buf, Str); - strncpy(Buf, Str, 17); - return strncmp(Buf, Str, 17); - // CHECK: in esan::initializeLibrary - // CHECK: in esan::processRangeAccess {{.*}} 29 - // CHECK: in esan::processRangeAccess {{.*}} 29 - // CHECK: in esan::processRangeAccess {{.*}} 17 - // CHECK: in esan::processRangeAccess {{.*}} 17 - // CHECK: in esan::processRangeAccess {{.*}} 17 - // CHECK: in esan::processRangeAccess {{.*}} 17 - // CHECK: in esan::finalizeLibrary -} diff --git a/test/esan/TestCases/mmap-shadow-conflict.c b/test/esan/TestCases/mmap-shadow-conflict.c deleted file mode 100644 index 8e86bba4a..000000000 --- a/test/esan/TestCases/mmap-shadow-conflict.c +++ /dev/null @@ -1,44 +0,0 @@ -// RUN: %clang_esan_frag -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts=verbosity=1 %run %t 2>&1 | FileCheck --check-prefix=%arch --check-prefix=CHECK %s - -#include <unistd.h> -#include <sys/mman.h> -#include <stdio.h> - -int main(int argc, char **argv) { -#if defined(__mips64) - void *Map = mmap((void *)0x0000001600000000ULL, 0x1000, PROT_READ, - MAP_ANON|MAP_PRIVATE|MAP_FIXED, -1, 0); -#else - void *Map = mmap((void *)0x0000016000000000ULL, 0x1000, PROT_READ, - MAP_ANON|MAP_PRIVATE|MAP_FIXED, -1, 0); -#endif - if (Map == (void *)-1) - fprintf(stderr, "map failed\n"); - else - fprintf(stderr, "mapped %p\n", Map); -#if defined(__mips64) - Map = mmap((void *)0x0000001600000000ULL, 0x1000, PROT_READ, - MAP_ANON|MAP_PRIVATE, -1, 0); -#else - Map = mmap((void *)0x0000016000000000ULL, 0x1000, PROT_READ, - MAP_ANON|MAP_PRIVATE, -1, 0); -#endif - fprintf(stderr, "mapped %p\n", Map); - // CHECK: in esan::initializeLibrary - // (There can be a re-exec for stack limit here.) - // x86_64: Shadow scale=2 offset=0x440000000000 - // x86_64-NEXT: Shadow #0: [110000000000-114000000000) (256GB) - // x86_64-NEXT: Shadow #1: [124000000000-12c000000000) (512GB) - // x86_64-NEXT: Shadow #2: [148000000000-150000000000) (512GB) - // mips64: Shadow scale=2 offset=0x4400000000 - // mips64-NEXT: Shadow #0: [1140000000-1180000000) (1GB) - // mips64-NEXT: Shadow #1: [1380000000-13c0000000) (1GB) - // mips64-NEXT: Shadow #2: [14c0000000-1500000000) (1GB) - // CHECK-NEXT: mmap conflict: {{.*}} - // CHECK-NEXT: map failed - // CHECK-NEXT: mmap conflict: {{.*}} - // CHECK-NEXT: mapped {{.*}} - // CHECK-NEXT: in esan::finalizeLibrary - return 0; -} diff --git a/test/esan/TestCases/struct-simple.cpp b/test/esan/TestCases/struct-simple.cpp deleted file mode 100644 index 7ec9761ff..000000000 --- a/test/esan/TestCases/struct-simple.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// RUN: %clang_esan_frag -O0 %s -DPART1 -mllvm -esan-aux-field-info=0 -c -o %t-part1.o 2>&1 -// RUN: %clang_esan_frag -O0 %s -DPART2 -c -o %t-part2.o 2>&1 -// RUN: %clang_esan_frag -O0 %s -DMAIN -c -o %t-main.o 2>&1 -// RUN: %clang_esan_frag -O0 %t-part1.o %t-part2.o %t-main.o -o %t 2>&1 -// RUN: %env_esan_opts=verbosity=2 %run %t 2>&1 | FileCheck %s - -// We generate two different object files from this file with different -// macros, and then link them together. We do this to test how we handle -// separate compilation with multiple compilation units. - -#include <stdio.h> - -extern "C" { - void part1(); - void part2(); -} - -//===-- compilation unit part1 without main function ----------------------===// - -#ifdef PART1 -struct A { - int x; - int y; -}; - -struct B { - float m; - double n; -}; - -union U { - float f; - double d; -}; - -// Same struct in both main and part1. -struct S { - int s1; - int s2; -}; - -// Different structs with the same name in main and part1. -struct D { - int d1; - int d2; - struct { - int x; - int y; - int z; - } ds[10]; -}; - -void part1() -{ - struct A a; - struct B b; - union U u; - struct S s; - struct D d; - for (int i = 0; i < (1 << 11); i++) - a.x = 0; - a.y = 1; - b.m = 2.0; - for (int i = 0; i < (1 << 21); i++) { - b.n = 3.0; - d.ds[3].y = 0; - } - u.f = 0.0; - u.d = 1.0; - s.s1 = 0; - d.d1 = 0; -} -#endif // PART1 - -//===-- compilation unit part2 without main function ----------------------===// -#ifdef PART2 -// No struct in this part. -void part2() -{ - // do nothing -} -#endif // PART2 - -//===-- compilation unit with main function -------------------------------===// - -#ifdef MAIN -class C { -public: - struct { - int x; - int y; - } cs; - union { - float f; - double d; - } cu; - char c[10]; -}; - -// Same struct in both main and part1. -struct S { - int s1; - int s2; -}; - -// Different structs with the same name in main and part1. -struct D { - int d1; - int d2; - int d3; -}; - -int main(int argc, char **argv) { - // CHECK: in esan::initializeLibrary - // CHECK: in esan::initializeCacheFrag - // CHECK-NEXT: in esan::processCompilationUnitInit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitInit: {{.*}}struct-simple.cpp with 6 class(es)/struct(s) - // CHECK-NEXT: Register struct.A$2$11$11: 2 fields - // CHECK-NEXT: Register struct.B$2$3$2: 2 fields - // CHECK-NEXT: Register union.U$1$3: 1 fields - // CHECK-NEXT: Register struct.S$2$11$11: 2 fields - // CHECK-NEXT: Register struct.D$3$14$11$11: 3 fields - // CHECK-NEXT: Register struct.anon$3$11$11$11: 3 fields - // CHECK-NEXT: in esan::processCompilationUnitInit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitInit: {{.*}}struct-simple.cpp with 0 class(es)/struct(s) - // CHECK-NEXT: in esan::processCompilationUnitInit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitInit: {{.*}}struct-simple.cpp with 5 class(es)/struct(s) - // CHECK-NEXT: Register class.C$3$14$13$13: 3 fields - // CHECK-NEXT: Register struct.anon$2$11$11: 2 fields - // CHECK-NEXT: Register union.anon$1$3: 1 fields - // CHECK-NEXT: Duplicated struct.S$2$11$11: 2 fields - // CHECK-NEXT: Register struct.D$3$11$11$11: 3 fields - struct C c[2]; - struct S s; - struct D d; - c[0].cs.x = 0; - c[1].cs.y = 1; - c[0].cu.f = 0.0; - c[1].cu.d = 1.0; - c[0].c[2] = 0; - s.s1 = 0; - d.d1 = 0; - d.d2 = 0; - part1(); - part2(); - return 0; - // CHECK: in esan::finalizeLibrary - // CHECK-NEXT: in esan::finalizeCacheFrag - // CHECK-NEXT: in esan::processCompilationUnitExit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitExit: {{.*}}struct-simple.cpp with 5 class(es)/struct(s) - // CHECK-NEXT: Unregister class.C$3$14$13$13: 3 fields - // CHECK-NEXT: {{.*}} class C - // CHECK-NEXT: {{.*}} size = 32, count = 5, ratio = 3, array access = 5 - // CHECK-NEXT: {{.*}} # 0: offset = 0, size = 8, count = 2, type = %struct.anon = type { i32, i32 } - // CHECK-NEXT: {{.*}} # 1: offset = 8, size = 8, count = 2, type = %union.anon = type { double } - // CHECK-NEXT: {{.*}} # 2: offset = 16, size = 10, count = 1, type = [10 x i8] - // CHECK-NEXT: Unregister struct.anon$2$11$11: 2 fields - // CHECK-NEXT: {{.*}} struct anon - // CHECK-NEXT: {{.*}} size = 8, count = 2, ratio = 1, array access = 0 - // CHECK-NEXT: {{.*}} # 0: offset = 0, size = 4, count = 1, type = i32 - // CHECK-NEXT: {{.*}} # 1: offset = 4, size = 4, count = 1, type = i32 - // CHECK-NEXT: Unregister union.anon$1$3: 1 fields - // CHECK-NEXT: Unregister struct.S$2$11$11: 2 fields - // CHECK-NEXT: {{.*}} struct S - // CHECK-NEXT: {{.*}} size = 8, count = 2, ratio = 2, array access = 0 - // CHECK-NEXT: {{.*}} # 0: count = 2 - // CHECK-NEXT: {{.*}} # 1: count = 0 - // CHECK-NEXT: Unregister struct.D$3$11$11$11: 3 fields - // CHECK-NEXT: {{.*}} struct D - // CHECK-NEXT: {{.*}} size = 12, count = 2, ratio = 2, array access = 0 - // CHECK-NEXT: {{.*}} # 0: offset = 0, size = 4, count = 1, type = i32 - // CHECK-NEXT: {{.*}} # 1: offset = 4, size = 4, count = 1, type = i32 - // CHECK-NEXT: {{.*}} # 2: offset = 8, size = 4, count = 0, type = i32 - // CHECK-NEXT: in esan::processCompilationUnitExit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitExit: {{.*}}struct-simple.cpp with 0 class(es)/struct(s) - // CHECK-NEXT: in esan::processCompilationUnitExit - // CHECK-NEXT: in esan::processCacheFragCompilationUnitExit: {{.*}}struct-simple.cpp with 6 class(es)/struct(s) - // CHECK-NEXT: Unregister struct.A$2$11$11: 2 fields - // CHECK-NEXT: {{.*}} struct A - // CHECK-NEXT: {{.*}} size = 8, count = 2049, ratio = 2048, array access = 0 - // CHECK-NEXT: {{.*}} # 0: count = 2048 - // CHECK-NEXT: {{.*}} # 1: count = 1 - // CHECK-NEXT: Unregister struct.B$2$3$2: 2 fields - // CHECK-NEXT: {{.*}} struct B - // CHECK-NEXT: {{.*}} size = 16, count = 2097153, ratio = 2097152, array access = 0 - // CHECK-NEXT: {{.*}} # 0: count = 1 - // CHECK-NEXT: {{.*}} # 1: count = 2097152 - // CHECK-NEXT: Unregister union.U$1$3: 1 fields - // CHECK-NEXT: Duplicated struct.S$2$11$11: 2 fields - // CHECK-NEXT: Unregister struct.D$3$14$11$11: 3 fields - // CHECK-NEXT: {{.*}} struct D - // CHECK-NEXT: {{.*}} size = 128, count = 2097153, ratio = 2097153, array access = 0 - // CHECK-NEXT: {{.*}} # 0: count = 1 - // CHECK-NEXT: {{.*}} # 1: count = 0 - // CHECK-NEXT: {{.*}} # 2: count = 2097152 - // CHECK-NEXT: Unregister struct.anon$3$11$11$11: 3 fields - // CHECK-NEXT: {{.*}} struct anon - // CHECK-NEXT: {{.*}} size = 12, count = 2097152, ratio = 4194304, array access = 2097152 - // CHECK-NEXT: {{.*}} # 0: count = 0 - // CHECK-NEXT: {{.*}} # 1: count = 2097152 - // CHECK-NEXT: {{.*}} # 2: count = 0 - // CHECK-NEXT: {{.*}}EfficiencySanitizer: total struct field access count = 6293518 -} -#endif // MAIN diff --git a/test/esan/TestCases/verbose-simple.c b/test/esan/TestCases/verbose-simple.c deleted file mode 100644 index 5ac37e159..000000000 --- a/test/esan/TestCases/verbose-simple.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_esan_frag -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts="verbosity=1 log_exe_name=1" %run %t 2>&1 | FileCheck --check-prefix=%arch --check-prefix=CHECK %s - -int main(int argc, char **argv) { - // CHECK: in esan::initializeLibrary - // (There can be a re-exec for stack limit here.) - // x86_64: Shadow scale=2 offset=0x440000000000 - // x86_64-NEXT: Shadow #0: [110000000000-114000000000) (256GB) - // x86_64-NEXT: Shadow #1: [124000000000-12c000000000) (512GB) - // x86_64-NEXT: Shadow #2: [148000000000-150000000000) (512GB) - // mips64: Shadow scale=2 offset=0x4400000000 - // mips64-NEXT: Shadow #0: [1140000000-1180000000) (1GB) - // mips64-NEXT: Shadow #1: [1380000000-13c0000000) (1GB) - // mips64-NEXT: Shadow #2: [14c0000000-1500000000) (1GB) - // CHECK: in esan::finalizeLibrary - // CHECK: ==verbose-simple{{.*}}EfficiencySanitizer: total struct field access count = 0 - return 0; -} diff --git a/test/esan/TestCases/workingset-early-fault.c b/test/esan/TestCases/workingset-early-fault.c deleted file mode 100644 index 971285b3f..000000000 --- a/test/esan/TestCases/workingset-early-fault.c +++ /dev/null @@ -1,35 +0,0 @@ -// Test shadow faults during esan initialization as well as -// faults during dlsym's calloc during interceptor init. -// -// RUN: %clang_esan_wset %s -o %t -// RUN: %run %t 2>&1 | FileCheck %s -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -// Our goal is to emulate an instrumented allocator, whose calloc -// invoked from dlsym will trigger shadow faults, to test an -// early shadow fault during esan interceptor init. -// We do this by replacing calloc: -void *calloc(size_t size, size_t n) { - // Unfortunately we can't print anything to make the test - // ensure we got here b/c the sanitizer interceptors can't - // handle that during interceptor init. - - // Ensure we trigger a shadow write fault: - int x[16]; - x[0] = size; - // Now just emulate calloc. - void *res = malloc(size*n); - memset(res, 0, size*n); - return res; -} - -int main(int argc, char **argv) { - printf("all done\n"); - return 0; -} -// CHECK: all done diff --git a/test/esan/TestCases/workingset-memset.cpp b/test/esan/TestCases/workingset-memset.cpp deleted file mode 100644 index 56ed2f5b7..000000000 --- a/test/esan/TestCases/workingset-memset.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> -#include <assert.h> -#include <string.h> - -int main(int argc, char **argv) { - const int size = 128*1024*1024; - char *p = (char *)mmap(0, size, PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); - // Test the slowpath at different cache line boundaries. - for (int i = 0; i < 630; i++) - memset((char *)p + 63*i, i, 63*i); - munmap(p, size); - return 0; - // CHECK: {{.*}} EfficiencySanitizer: the total working set size: 77 KB (12{{[0-9]+}} cache lines) -} diff --git a/test/esan/TestCases/workingset-midreport.cpp b/test/esan/TestCases/workingset-midreport.cpp deleted file mode 100644 index acd1eed17..000000000 --- a/test/esan/TestCases/workingset-midreport.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ESAN - -// RUN: %clang -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ESAN - -// FIXME: Re-enable once PR33590 is fixed. -// UNSUPPORTED: x86_64 -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <sanitizer/esan_interface.h> -#include <sched.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> - -const int size = 0x1 << 25; // 523288 cache lines -const int iters = 6; - -int main(int argc, char **argv) { - char *buf = (char *)mmap(0, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - // To avoid flakiness stemming from whether the sideline thread - // is scheduled enough on a loaded test machine, we coordinate - // with esan itself: - if (__esan_get_sample_count) { - while (__esan_get_sample_count() < 4) { - for (int i = 0; i < size; ++i) - buf[i] = i; - sched_yield(); - } - } - // Ensure a non-esan build works without ifdefs: - if (__esan_report) { - // We should get 2 roughly identical reports: - __esan_report(); - } - munmap(buf, size); - fprintf(stderr, "all done\n"); - // CHECK-NO-ESAN: all done - // We only check for a few samples here to reduce the chance of flakiness: - // CHECK-ESAN: =={{[0-9]+}}== Total number of samples: {{[0-9]+}} - // CHECK-ESAN-NEXT: =={{[0-9]+}}== Samples array #0 at period 20 ms - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 1: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 2: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 3: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN: =={{[0-9]+}}== Samples array #1 at period 80 ms - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN: =={{[0-9]+}}== Samples array #2 at period 320 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #3 at period 1280 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #4 at period 5120 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #5 at period 20 sec - // CHECK-ESAN: =={{[0-9]+}}== Samples array #6 at period 81 sec - // CHECK-ESAN: =={{[0-9]+}}== Samples array #7 at period 327 sec - // CHECK-ESAN: {{.*}} EfficiencySanitizer: the total working set size: 32 MB (5242{{[0-9][0-9]}} cache lines) - // CHECK-ESAN-NEXT: all done - // CHECK-ESAN-NEXT: =={{[0-9]+}}== Total number of samples: {{[0-9]+}} - // CHECK-ESAN-NEXT: =={{[0-9]+}}== Samples array #0 at period 20 ms - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 1: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 2: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 3: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN: =={{[0-9]+}}== Samples array #1 at period 80 ms - // CHECK-ESAN-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-ESAN: =={{[0-9]+}}== Samples array #2 at period 320 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #3 at period 1280 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #4 at period 5120 ms - // CHECK-ESAN: =={{[0-9]+}}== Samples array #5 at period 20 sec - // CHECK-ESAN: =={{[0-9]+}}== Samples array #6 at period 81 sec - // CHECK-ESAN: =={{[0-9]+}}== Samples array #7 at period 327 sec - // CHECK-ESAN: {{.*}} EfficiencySanitizer: the total working set size: 32 MB (5242{{[0-9][0-9]}} cache lines) - return 0; -} diff --git a/test/esan/TestCases/workingset-samples.cpp b/test/esan/TestCases/workingset-samples.cpp deleted file mode 100644 index 1f8e97dad..000000000 --- a/test/esan/TestCases/workingset-samples.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s - -// FIXME: Re-enable once PR33590 is fixed. -// UNSUPPORTED: x86_64 -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <sanitizer/esan_interface.h> -#include <sched.h> -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> - -const int size = 0x1 << 25; // 523288 cache lines - -int main(int argc, char **argv) { - char *buf = (char *)mmap(0, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - // To avoid flakiness stemming from whether the sideline thread - // is scheduled enough on a loaded test machine, we coordinate - // with esan itself: - if (__esan_get_sample_count) { - while (__esan_get_sample_count() < 4) { - for (int i = 0; i < size; ++i) - buf[i] = i; - sched_yield(); - } - } - munmap(buf, size); - // We only check for a few samples here to reduce the chance of flakiness. - // CHECK: =={{[0-9]+}}== Total number of samples: {{[0-9]+}} - // CHECK-NEXT: =={{[0-9]+}}== Samples array #0 at period 20 ms - // CHECK-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-NEXT: =={{[0-9]+}}==# 1: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-NEXT: =={{[0-9]+}}==# 2: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK-NEXT: =={{[0-9]+}}==# 3: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK: =={{[0-9]+}}== Samples array #1 at period 80 ms - // CHECK-NEXT: =={{[0-9]+}}==# 0: {{[ 0-9]+}} {{KB|MB|Bytes}} ({{[ 0-9]+}} cache lines) - // CHECK: =={{[0-9]+}}== Samples array #2 at period 320 ms - // CHECK: =={{[0-9]+}}== Samples array #3 at period 1280 ms - // CHECK: =={{[0-9]+}}== Samples array #4 at period 5120 ms - // CHECK: =={{[0-9]+}}== Samples array #5 at period 20 sec - // CHECK: =={{[0-9]+}}== Samples array #6 at period 81 sec - // CHECK: =={{[0-9]+}}== Samples array #7 at period 327 sec - // CHECK: {{.*}} EfficiencySanitizer: the total working set size: 32 MB (5242{{[0-9][0-9]}} cache lines) - return 0; -} diff --git a/test/esan/TestCases/workingset-signal-posix.cpp b/test/esan/TestCases/workingset-signal-posix.cpp deleted file mode 100644 index 6f9787bd7..000000000 --- a/test/esan/TestCases/workingset-signal-posix.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <assert.h> -#include <setjmp.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/mman.h> - -sigjmp_buf mark; - -static void SignalHandler(int Sig) { - if (Sig == SIGSEGV) { - fprintf(stderr, "Handling SIGSEGV for signal\n"); - siglongjmp(mark, 1); - } - exit(1); -} - -static void SigactionHandler(int Sig, siginfo_t *Info, void *Ctx) { - if (Sig == SIGSEGV) { - fprintf(stderr, "Handling SIGSEGV for sigaction\n"); - siglongjmp(mark, 1); - } - exit(1); -} - -int main(int argc, char **argv) { - __sighandler_t Prior = signal(SIGSEGV, SignalHandler); - assert(Prior == SIG_DFL); - if (sigsetjmp(mark, 1) == 0) - *((volatile int *)(ssize_t)argc) = 42; // Raise SIGSEGV - fprintf(stderr, "Past longjmp for signal\n"); - - Prior = signal(SIGSEGV, SIG_DFL); - assert(Prior == SignalHandler); - - struct sigaction SigAct; - SigAct.sa_sigaction = SigactionHandler; - int Res = sigfillset(&SigAct.sa_mask); - assert(Res == 0); - SigAct.sa_flags = SA_SIGINFO; - Res = sigaction(SIGSEGV, &SigAct, NULL); - assert(Res == 0); - - if (sigsetjmp(mark, 1) == 0) - *((volatile int *)(ssize_t)argc) = 42; // Raise SIGSEGV - fprintf(stderr, "Past longjmp for sigaction\n"); - - Res = sigaction(SIGSEGV, NULL, &SigAct); - assert(Res == 0); - assert(SigAct.sa_sigaction == SigactionHandler); - - // Test blocking SIGSEGV and raising a shadow fault. - sigset_t Set; - sigemptyset(&Set); - sigaddset(&Set, SIGSEGV); - Res = sigprocmask(SIG_BLOCK, &Set, NULL); - // Make a large enough mapping that its start point will be before any - // prior library-region shadow access. - char *buf = (char *)mmap(0, 640*1024, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - buf[0] = 4; - munmap(buf, 640*1024); - fprintf(stderr, "Past blocked-SIGSEGV shadow fault\n"); - - return 0; -} -// CHECK: Handling SIGSEGV for signal -// CHECK-NEXT: Past longjmp for signal -// CHECK-NEXT: Handling SIGSEGV for sigaction -// CHECK-NEXT: Past longjmp for sigaction -// CHECK-NEXT: Past blocked-SIGSEGV shadow fault -// CHECK: {{.*}} EfficiencySanitizer: the total working set size: {{[0-9]+}} Bytes ({{[0-9][0-9]}} cache lines) diff --git a/test/esan/TestCases/workingset-simple.cpp b/test/esan/TestCases/workingset-simple.cpp deleted file mode 100644 index dc17bcfd5..000000000 --- a/test/esan/TestCases/workingset-simple.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// RUN: %clang_esan_wset -O0 %s -o %t 2>&1 -// RUN: %run %t 2>&1 | FileCheck %s - -// FIXME: Re-enable once PR33590 is fixed. -// UNSUPPORTED: x86_64 -// Stucks at init and no clone feature equivalent. -// UNSUPPORTED: freebsd - -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> -#include <assert.h> - -const int size = 0x1 << 25; // 523288 cache lines -const int line_size = 64; - -int main(int argc, char **argv) { - char *bufA = (char *)malloc(sizeof(char) * line_size); - char bufB[64]; - char *bufC = (char *)mmap(0, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - bufA[0] = 0; - // This additional access to the same line should not increase the line - // count: but it's difficult to make a non-flaky test that measures the - // lines down to the ones digit so right now we're not really testing that. - // If we add a heap-only mode we may be able to be more precise. - bufA[1] = 0; - bufB[33] = 1; - for (int i = 0; i < size; i += line_size) - bufC[i] = 0; - free(bufA); - munmap(bufC, 0x4000); - // CHECK: {{.*}} EfficiencySanitizer: the total working set size: 32 MB (524{{[0-9][0-9][0-9]}} cache lines) - return 0; -} diff --git a/test/esan/Unit/circular_buffer.cpp b/test/esan/Unit/circular_buffer.cpp deleted file mode 100644 index 00999a272..000000000 --- a/test/esan/Unit/circular_buffer.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// RUN: %clangxx_unit -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts="record_snapshots=0" %run %t 2>&1 | FileCheck %s - -#include "esan/esan_circular_buffer.h" -#include "sanitizer_common/sanitizer_placement_new.h" -#include <assert.h> -#include <stdio.h> - -static const int TestBufCapacity = 4; - -// The buffer should have a capacity of TestBufCapacity. -void testBuffer(__esan::CircularBuffer<int> *Buf) { - assert(Buf->size() == 0); - assert(Buf->empty()); - - Buf->push_back(1); - assert(Buf->back() == 1); - assert((*Buf)[0] == 1); - assert(Buf->size() == 1); - assert(!Buf->empty()); - - Buf->push_back(2); - Buf->push_back(3); - Buf->push_back(4); - Buf->push_back(5); - assert((*Buf)[0] == 2); - assert(Buf->size() == 4); - - Buf->pop_back(); - assert((*Buf)[0] == 2); - assert(Buf->size() == 3); - - Buf->pop_back(); - Buf->pop_back(); - assert((*Buf)[0] == 2); - assert(Buf->size() == 1); - assert(!Buf->empty()); - - Buf->pop_back(); - assert(Buf->empty()); -} - -int main() -{ - // Test initialize/free. - __esan::CircularBuffer<int> GlobalBuf; - GlobalBuf.initialize(TestBufCapacity); - testBuffer(&GlobalBuf); - GlobalBuf.free(); - - // Test constructor/free. - __esan::CircularBuffer<int> *LocalBuf; - static char placeholder[sizeof(*LocalBuf)]; - LocalBuf = new(placeholder) __esan::CircularBuffer<int>(TestBufCapacity); - testBuffer(LocalBuf); - LocalBuf->free(); - - fprintf(stderr, "All checks passed.\n"); - // CHECK: All checks passed. - return 0; -} diff --git a/test/esan/Unit/hashtable.cpp b/test/esan/Unit/hashtable.cpp deleted file mode 100644 index 390a427da..000000000 --- a/test/esan/Unit/hashtable.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// RUN: %clangxx_unit -esan-instrument-loads-and-stores=0 -O0 %s -o %t 2>&1 -// RUN: %env_esan_opts="record_snapshots=0" %run %t 2>&1 | FileCheck %s - -#include "esan/esan_hashtable.h" -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -class MyData { - public: - MyData(const char *Str) : RefCount(0) { Buf = strdup(Str); } - ~MyData() { - fprintf(stderr, " Destructor: %s.\n", Buf); - free(Buf); - } - bool operator==(MyData &Cmp) { return strcmp(Buf, Cmp.Buf) == 0; } - operator size_t() const { - size_t Res = 0; - for (int i = 0; i < strlen(Buf); ++i) - Res ^= Buf[i]; - return Res; - } - char *Buf; - int RefCount; -}; - -// We use a smart pointer wrapper to free the payload on hashtable removal. -struct MyDataPayload { - MyDataPayload() : Data(nullptr) {} - explicit MyDataPayload(MyData *Data) : Data(Data) { ++Data->RefCount; } - ~MyDataPayload() { - if (Data && --Data->RefCount == 0) { - fprintf(stderr, "Deleting %s.\n", Data->Buf); - delete Data; - } - } - MyDataPayload(const MyDataPayload &Copy) { - Data = Copy.Data; - ++Data->RefCount; - } - MyDataPayload & operator=(const MyDataPayload &Copy) { - if (this != &Copy) { - this->~MyDataPayload(); - Data = Copy.Data; - ++Data->RefCount; - } - return *this; - } - bool operator==(MyDataPayload &Cmp) { return *Data == *Cmp.Data; } - operator size_t() const { return (size_t)*Data; } - MyData *Data; -}; - -int main() -{ - __esan::HashTable<int, int> IntTable; - assert(IntTable.size() == 0); - - // Test iteration on an empty table. - int Count = 0; - for (auto Iter = IntTable.begin(); Iter != IntTable.end(); - ++Iter, ++Count) { - // Empty. - } - assert(Count == 0); - - bool Added = IntTable.add(4, 42); - assert(Added); - assert(!IntTable.add(4, 42)); - assert(IntTable.size() == 1); - int Value; - bool Found = IntTable.lookup(4, Value); - assert(Found && Value == 42); - - // Test iterator. - IntTable.lock(); - for (auto Iter = IntTable.begin(); Iter != IntTable.end(); - ++Iter, ++Count) { - assert((*Iter).Key == 4); - assert((*Iter).Data == 42); - } - IntTable.unlock(); - assert(Count == 1); - assert(Count == IntTable.size()); - assert(!IntTable.remove(5)); - assert(IntTable.remove(4)); - - // Test a more complex payload. - __esan::HashTable<int, MyDataPayload> DataTable(4); - MyDataPayload NewData(new MyData("mystring")); - Added = DataTable.add(4, NewData); - assert(Added); - MyDataPayload FoundData; - Found = DataTable.lookup(4, FoundData); - assert(Found && strcmp(FoundData.Data->Buf, "mystring") == 0); - assert(!DataTable.remove(5)); - assert(DataTable.remove(4)); - // Test resize. - for (int i = 0; i < 4; ++i) { - MyDataPayload MoreData(new MyData("delete-at-end")); - Added = DataTable.add(i+1, MoreData); - assert(Added); - assert(!DataTable.add(i+1, MoreData)); - } - for (int i = 0; i < 4; ++i) { - Found = DataTable.lookup(i+1, FoundData); - assert(Found && strcmp(FoundData.Data->Buf, "delete-at-end") == 0); - } - DataTable.lock(); - Count = 0; - for (auto Iter = DataTable.begin(); Iter != DataTable.end(); - ++Iter, ++Count) { - int Key = (*Iter).Key; - FoundData = (*Iter).Data; - assert(Key >= 1 && Key <= 4); - assert(strcmp(FoundData.Data->Buf, "delete-at-end") == 0); - } - DataTable.unlock(); - assert(Count == 4); - assert(Count == DataTable.size()); - - // Ensure the iterator supports a range-based for loop. - DataTable.lock(); - Count = 0; - for (auto Pair : DataTable) { - assert(Pair.Key >= 1 && Pair.Key <= 4); - assert(strcmp(Pair.Data.Data->Buf, "delete-at-end") == 0); - ++Count; - } - DataTable.unlock(); - assert(Count == 4); - assert(Count == DataTable.size()); - - // Test payload freeing via smart pointer wrapper. - __esan::HashTable<MyDataPayload, MyDataPayload, true> DataKeyTable; - MyDataPayload DataA(new MyData("string AB")); - DataKeyTable.lock(); - Added = DataKeyTable.add(DataA, DataA); - assert(Added); - Found = DataKeyTable.lookup(DataA, FoundData); - assert(Found && strcmp(FoundData.Data->Buf, "string AB") == 0); - MyDataPayload DataB(new MyData("string AB")); - Added = DataKeyTable.add(DataB, DataB); - assert(!Added); - DataKeyTable.remove(DataB); // Should free the DataA payload. - DataKeyTable.unlock(); - - // Test custom functors. - struct CustomHash { - size_t operator()(int Key) const { return Key % 4; } - }; - struct CustomEqual { - bool operator()(int Key1, int Key2) const { return Key1 %4 == Key2 % 4; } - }; - __esan::HashTable<int, int, false, CustomHash, CustomEqual> ModTable; - Added = ModTable.add(2, 42); - assert(Added); - Added = ModTable.add(6, 42); - assert(!Added); - - fprintf(stderr, "All checks passed.\n"); - return 0; -} -// CHECK: Deleting mystring. -// CHECK-NEXT: Destructor: mystring. -// CHECK-NEXT: All checks passed. -// CHECK-NEXT: Deleting string AB. -// CHECK-NEXT: Destructor: string AB. -// CHECK-NEXT: Deleting string AB. -// CHECK-NEXT: Destructor: string AB. -// CHECK-NEXT: Deleting delete-at-end. -// CHECK-NEXT: Destructor: delete-at-end. -// CHECK-NEXT: Deleting delete-at-end. -// CHECK-NEXT: Destructor: delete-at-end. -// CHECK-NEXT: Deleting delete-at-end. -// CHECK-NEXT: Destructor: delete-at-end. -// CHECK-NEXT: Deleting delete-at-end. -// CHECK-NEXT: Destructor: delete-at-end. diff --git a/test/esan/lit.cfg b/test/esan/lit.cfg deleted file mode 100644 index 1bb34ee08..000000000 --- a/test/esan/lit.cfg +++ /dev/null @@ -1,43 +0,0 @@ -# -*- Python -*- - -import os - -# Setup config name. -config.name = 'EfficiencySanitizer' + config.name_suffix - -# Setup source root. -config.test_source_root = os.path.dirname(__file__) - -# Setup default compiler flags used with -fsanitize=efficiency option. -base_cflags = ([config.target_cflags] + config.debug_info_flags) -base_cxxflags = config.cxx_mode_flags + base_cflags - -frag_cflags = (["-fsanitize=efficiency-cache-frag"] + base_cflags) -wset_cflags = (["-fsanitize=efficiency-working-set"] + base_cflags) -esan_incdir = config.test_source_root + "/../../lib" -unit_cxxflags = (["-I%s" % esan_incdir, "-std=c++11", - # We need to link with the esan runtime. - # Tests should pass %env_esan_opts="record_snapshots=0". - "-fsanitize=efficiency-working-set"] + base_cxxflags) - -def build_invocation(compile_flags): - return " " + " ".join([config.clang] + compile_flags) + " " - -config.substitutions.append( ("%clang ", - build_invocation(base_cflags)) ) -config.substitutions.append( ("%clang_esan_frag ", - build_invocation(frag_cflags)) ) -config.substitutions.append( ("%clang_esan_wset ", - build_invocation(wset_cflags)) ) -config.substitutions.append( ("%clangxx_unit", - build_invocation(unit_cxxflags)) ) - -default_esan_opts = '' -config.substitutions.append(('%env_esan_opts=', - 'env ESAN_OPTIONS=' + default_esan_opts)) - -# Default test suffixes. -config.suffixes = ['.c', '.cpp'] - -if config.host_os not in ['Linux', 'FreeBSD'] or config.target_arch not in ['x86_64', 'mips64'] : - config.unsupported = True diff --git a/test/esan/lit.site.cfg.in b/test/esan/lit.site.cfg.in deleted file mode 100644 index b631ce42d..000000000 --- a/test/esan/lit.site.cfg.in +++ /dev/null @@ -1,14 +0,0 @@ -## Autogenerated by LLVM/Clang configuration. -# Do not edit! - -# Tool-specific config options. -config.name_suffix = "@ESAN_TEST_CONFIG_SUFFIX@" -config.esan_lit_source_dir = "@ESAN_LIT_SOURCE_DIR@" -config.target_cflags = "@ESAN_TEST_TARGET_CFLAGS@" -config.target_arch = "@ESAN_TEST_TARGET_ARCH@" - -# Load common config for all compiler-rt lit tests. -lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") - -# Load tool-specific config that would do the real work. -lit_config.load_config(config, "@ESAN_LIT_SOURCE_DIR@/lit.cfg") diff --git a/test/fuzzer/AFLDriverTest.cpp b/test/fuzzer/AFLDriverTest.cpp index b949adc7d..84b5f9f6b 100644 --- a/test/fuzzer/AFLDriverTest.cpp +++ b/test/fuzzer/AFLDriverTest.cpp @@ -1,28 +1,34 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// Contains dummy functions used to avoid dependency on AFL. #include <stdint.h> #include <stdio.h> #include <stdlib.h> +// Dummy functions used to avoid dependency on AFL. extern "C" void __afl_manual_init() {} extern "C" int __afl_persistent_loop(unsigned int N) { static int Count = N; - fprintf(stderr, "__afl_persistent_loop calle, Count = %d\n", Count); - if (Count--) return 1; - return 0; + fprintf(stderr, "__afl_persistent_loop called, Count = %d\n", Count); + return Count--; } // This declaration exists to prevent the Darwin linker // from complaining about this being a missing weak symbol. extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { - fprintf(stderr, "LLVMFuzzerInitialize called\n"); return 0; } extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - fprintf(stderr, "LLVMFuzzerTestOneInput called; Size = %zd\n", Size); - return 0; + puts("STDOUT MESSAGE"); + fflush(stdout); + fprintf(stderr, "STDERR MESSAGE\n" + "LLVMFuzzerTestOneInput called; Size = %zd\n", + Size); + if (Size < 4) + return 0; + + return Data[Size]; } diff --git a/test/fuzzer/AbsNegAndConstant64Test.cpp b/test/fuzzer/AbsNegAndConstant64Test.cpp index 0ba80b61d..c079b2070 100644 --- a/test/fuzzer/AbsNegAndConstant64Test.cpp +++ b/test/fuzzer/AbsNegAndConstant64Test.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // abs(x) < 0 and y == Const puzzle, 64-bit variant. #include <cstddef> diff --git a/test/fuzzer/AbsNegAndConstantTest.cpp b/test/fuzzer/AbsNegAndConstantTest.cpp index a3f534980..a0eedc19c 100644 --- a/test/fuzzer/AbsNegAndConstantTest.cpp +++ b/test/fuzzer/AbsNegAndConstantTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // abs(x) < 0 and y == Const puzzle. #include <cstddef> diff --git a/test/fuzzer/AccumulateAllocationsTest.cpp b/test/fuzzer/AccumulateAllocationsTest.cpp index e9acd7ccb..91886fa16 100644 --- a/test/fuzzer/AccumulateAllocationsTest.cpp +++ b/test/fuzzer/AccumulateAllocationsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test with a more mallocs than frees, but no leak. #include <cstddef> diff --git a/test/fuzzer/AcquireCrashStateTest.cpp b/test/fuzzer/AcquireCrashStateTest.cpp index 0fe71fd46..3035021ba 100644 --- a/test/fuzzer/AcquireCrashStateTest.cpp +++ b/test/fuzzer/AcquireCrashStateTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Ensures that error reports are suppressed after // __sanitizer_acquire_crash_state() has been called the first time. diff --git a/test/fuzzer/AlignmentAssumptionTest.cpp b/test/fuzzer/AlignmentAssumptionTest.cpp index be51d37e8..a9c4fc6c2 100644 --- a/test/fuzzer/AlignmentAssumptionTest.cpp +++ b/test/fuzzer/AlignmentAssumptionTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for alignment assumption failure. @@ -19,7 +20,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (Size > 1 && Data[1] == 'i') { Sink = 2; if (Size > 2 && Data[2] == '!') { - __builtin_assume_aligned(Data + 1, 0x8000); + auto r = __builtin_assume_aligned(Data + 1, 0x8000); } } } diff --git a/test/fuzzer/BadStrcmpTest.cpp b/test/fuzzer/BadStrcmpTest.cpp index ba2b068f7..4ab2b7094 100644 --- a/test/fuzzer/BadStrcmpTest.cpp +++ b/test/fuzzer/BadStrcmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that we don't creash in case of bad strcmp params. #include <cstddef> diff --git a/test/fuzzer/BogusInitializeTest.cpp b/test/fuzzer/BogusInitializeTest.cpp index c7e81a547..925252168 100644 --- a/test/fuzzer/BogusInitializeTest.cpp +++ b/test/fuzzer/BogusInitializeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Make sure LLVMFuzzerInitialize does not change argv[0]. #include <stddef.h> diff --git a/test/fuzzer/BufferOverflowOnInput.cpp b/test/fuzzer/BufferOverflowOnInput.cpp index 159da92d4..6e53cd98f 100644 --- a/test/fuzzer/BufferOverflowOnInput.cpp +++ b/test/fuzzer/BufferOverflowOnInput.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <assert.h> diff --git a/test/fuzzer/CMakeLists.txt b/test/fuzzer/CMakeLists.txt index ef46ec4a9..de0268e14 100644 --- a/test/fuzzer/CMakeLists.txt +++ b/test/fuzzer/CMakeLists.txt @@ -12,8 +12,9 @@ if (NOT COMPILER_RT_STANDALONE_BUILD) endif() endif() +set(FUZZER_TEST_ARCH ${FUZZER_SUPPORTED_ARCH}) if (APPLE) - darwin_filter_host_archs(FUZZER_SUPPORTED_ARCH FUZZER_SUPPORTED_ARCH) + darwin_filter_host_archs(FUZZER_SUPPORTED_ARCH FUZZER_TEST_ARCH) endif() if(COMPILER_RT_INCLUDE_TESTS) @@ -45,10 +46,11 @@ macro(test_fuzzer stdlib) string(REGEX REPLACE "^.(.*)" "${first_letter}\\1" part "${part}") set(STDLIB_CAPITALIZED "${STDLIB_CAPITALIZED}${part}") endforeach() - foreach(arch ${FUZZER_SUPPORTED_ARCH}) + foreach(arch ${FUZZER_TEST_ARCH}) set(LIBFUZZER_TEST_COMPILER ${COMPILER_RT_TEST_COMPILER}) get_test_cc_for_arch(${arch} LIBFUZZER_TEST_COMPILER LIBFUZZER_TEST_FLAGS) + set(LIBFUZZER_TEST_TARGET_ARCH ${arch}) set(LIBFUZZER_TEST_APPLE_PLATFORM "osx") set(LIBFUZZER_TEST_STDLIB ${stdlib}) diff --git a/test/fuzzer/CallerCalleeTest.cpp b/test/fuzzer/CallerCalleeTest.cpp index ed9f37cc1..4b38983f7 100644 --- a/test/fuzzer/CallerCalleeTest.cpp +++ b/test/fuzzer/CallerCalleeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. // Try to find the target using the indirect caller-callee pairs. diff --git a/test/fuzzer/CleanseTest.cpp b/test/fuzzer/CleanseTest.cpp index d4efa12bb..2ff5ebfb3 100644 --- a/test/fuzzer/CleanseTest.cpp +++ b/test/fuzzer/CleanseTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test the fuzzer is able to 'cleanse' the reproducer // by replacing all irrelevant bytes with garbage. diff --git a/test/fuzzer/CompressedTest.cpp b/test/fuzzer/CompressedTest.cpp new file mode 100644 index 000000000..ec969cbae --- /dev/null +++ b/test/fuzzer/CompressedTest.cpp @@ -0,0 +1,61 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// A fuzz target that consumes a Zlib-compressed input. +// This test verifies that we can find this bug with a custom mutator. +#include <cstddef> +#include <cstdint> +#include <cstdio> +#include <cstdlib> +#include <zlib.h> + +// The fuzz target. +// Uncompress the data, crash on input starting with "FU". +// Good luck finding this w/o a custom mutator. :) +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + uint8_t Uncompressed[100]; + size_t UncompressedLen = sizeof(Uncompressed); + if (Z_OK != uncompress(Uncompressed, &UncompressedLen, Data, Size)) + return 0; + if (UncompressedLen < 2) return 0; + if (Uncompressed[0] == 'F' && Uncompressed[1] == 'U') + abort(); // Boom + return 0; +} + +#ifdef CUSTOM_MUTATOR + +// Forward-declare the libFuzzer's mutator callback. +extern "C" size_t +LLVMFuzzerMutate(uint8_t *Data, size_t Size, size_t MaxSize); + +// The custom mutator: +// * deserialize the data (in this case, uncompress). +// * If the data doesn't deserialize, create a properly serialized dummy. +// * Mutate the deserialized data (in this case, just call LLVMFuzzerMutate). +// * Serialize the mutated data (in this case, compress). +extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, + size_t MaxSize, unsigned int Seed) { + uint8_t Uncompressed[100]; + size_t UncompressedLen = sizeof(Uncompressed); + size_t CompressedLen = MaxSize; + if (Z_OK != uncompress(Uncompressed, &UncompressedLen, Data, Size)) { + // The data didn't uncompress. + // So, it's either a broken input and we want to ignore it, + // or we've started fuzzing from an empty corpus and we need to supply + // out first properly compressed input. + uint8_t Dummy[] = {'H', 'i'}; + if (Z_OK != compress(Data, &CompressedLen, Dummy, sizeof(Dummy))) + return 0; + // fprintf(stderr, "Dummy: max %zd res %zd\n", MaxSize, CompressedLen); + return CompressedLen; + } + UncompressedLen = + LLVMFuzzerMutate(Uncompressed, UncompressedLen, sizeof(Uncompressed)); + if (Z_OK != compress(Data, &CompressedLen, Uncompressed, UncompressedLen)) + return 0; + return CompressedLen; +} + +#endif // CUSTOM_MUTATOR diff --git a/test/fuzzer/CounterTest.cpp b/test/fuzzer/CounterTest.cpp index 4917934c6..84112f9e8 100644 --- a/test/fuzzer/CounterTest.cpp +++ b/test/fuzzer/CounterTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for a fuzzer: must find the case where a particular basic block is // executed many times. diff --git a/test/fuzzer/CrossOverTest.cpp b/test/fuzzer/CrossOverTest.cpp new file mode 100644 index 000000000..a7643570a --- /dev/null +++ b/test/fuzzer/CrossOverTest.cpp @@ -0,0 +1,54 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Test for a fuzzer. The fuzzer must find the string +// ABCDEFGHIJ +// We use it as a test for CrossOver functionality +// by passing two inputs to it: +// ABCDE00000 +// ZZZZZFGHIJ +// +#include <assert.h> +#include <cstddef> +#include <cstdint> +#include <cstdlib> +#include <iostream> +#include <ostream> + +static volatile int Sink; +static volatile int *NullPtr; + +// A modified jenkins_one_at_a_time_hash initialized by non-zero, +// so that simple_hash(0) != 0. See also +// https://en.wikipedia.org/wiki/Jenkins_hash_function +static uint32_t simple_hash(const uint8_t *Data, size_t Size) { + uint32_t Hash = 0x12039854; + for (uint32_t i = 0; i < Size; i++) { + Hash += Data[i]; + Hash += (Hash << 10); + Hash ^= (Hash >> 6); + } + Hash += (Hash << 3); + Hash ^= (Hash >> 11); + Hash += (Hash << 15); + return Hash; +} + +// Don't leave the string in the binary, so that fuzzer don't cheat; +// const char *ABC = "ABCDEFGHIJ"; +// static uint32_t ExpectedHash = simple_hash((const uint8_t *)ABC, 10); +static const uint32_t ExpectedHash = 0xe1677acb; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + // fprintf(stderr, "ExpectedHash: %x\n", ExpectedHash); + if (Size != 10) return 0; + if (*Data == 'A') + Sink++; + if (*Data == 'Z') + Sink--; + if (ExpectedHash == simple_hash(Data, Size)) + *NullPtr = 0; + return 0; +} + diff --git a/test/fuzzer/CustomCrossOverAndMutateTest.cpp b/test/fuzzer/CustomCrossOverAndMutateTest.cpp index 74fc93953..37f073b10 100644 --- a/test/fuzzer/CustomCrossOverAndMutateTest.cpp +++ b/test/fuzzer/CustomCrossOverAndMutateTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that libFuzzer does not crash when LLVMFuzzerMutate called from // LLVMFuzzerCustomCrossOver. diff --git a/test/fuzzer/CustomCrossOverTest.cpp b/test/fuzzer/CustomCrossOverTest.cpp index bd9afe774..36062edd4 100644 --- a/test/fuzzer/CustomCrossOverTest.cpp +++ b/test/fuzzer/CustomCrossOverTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a cutom crossover. #include <assert.h> diff --git a/test/fuzzer/CustomMutatorTest.cpp b/test/fuzzer/CustomMutatorTest.cpp index b2adb9408..51b6169eb 100644 --- a/test/fuzzer/CustomMutatorTest.cpp +++ b/test/fuzzer/CustomMutatorTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a cutom mutator. #include <assert.h> diff --git a/test/fuzzer/CxxStringEqTest.cpp b/test/fuzzer/CxxStringEqTest.cpp index 924851c5a..b33f474f0 100644 --- a/test/fuzzer/CxxStringEqTest.cpp +++ b/test/fuzzer/CxxStringEqTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. Must find a specific string // used in std::string operator ==. diff --git a/test/fuzzer/DSO1.cpp b/test/fuzzer/DSO1.cpp index 72a5ec4a0..c164bf629 100644 --- a/test/fuzzer/DSO1.cpp +++ b/test/fuzzer/DSO1.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Source code for a simple DSO. #ifdef _WIN32 diff --git a/test/fuzzer/DSO2.cpp b/test/fuzzer/DSO2.cpp index 2967055dc..ed0ee4386 100644 --- a/test/fuzzer/DSO2.cpp +++ b/test/fuzzer/DSO2.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Source code for a simple DSO. #ifdef _WIN32 diff --git a/test/fuzzer/DSOTestExtra.cpp b/test/fuzzer/DSOTestExtra.cpp index a2274d070..a0d156d79 100644 --- a/test/fuzzer/DSOTestExtra.cpp +++ b/test/fuzzer/DSOTestExtra.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Source code for a simple DSO. diff --git a/test/fuzzer/DSOTestMain.cpp b/test/fuzzer/DSOTestMain.cpp index e0c857d4f..b2a85a770 100644 --- a/test/fuzzer/DSOTestMain.cpp +++ b/test/fuzzer/DSOTestMain.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Source code for a simple DSO. diff --git a/test/fuzzer/DeepRecursionTest.cpp b/test/fuzzer/DeepRecursionTest.cpp index bf4621d04..aaef38960 100644 --- a/test/fuzzer/DeepRecursionTest.cpp +++ b/test/fuzzer/DeepRecursionTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the deep recursion. // To generate a crashy input: diff --git a/test/fuzzer/DivTest.cpp b/test/fuzzer/DivTest.cpp index bce13feb7..5a6ae7622 100644 --- a/test/fuzzer/DivTest.cpp +++ b/test/fuzzer/DivTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer: find the interesting argument for div. #include <assert.h> diff --git a/test/fuzzer/EmptyTest.cpp b/test/fuzzer/EmptyTest.cpp index 5e843308f..4d690e83b 100644 --- a/test/fuzzer/EmptyTest.cpp +++ b/test/fuzzer/EmptyTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // A fuzzer with empty target function. diff --git a/test/fuzzer/EquivalenceATest.cpp b/test/fuzzer/EquivalenceATest.cpp index 7d1ebb0f6..32aa4a812 100644 --- a/test/fuzzer/EquivalenceATest.cpp +++ b/test/fuzzer/EquivalenceATest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stddef.h> #include <stdint.h> #include <stdio.h> diff --git a/test/fuzzer/EquivalenceBTest.cpp b/test/fuzzer/EquivalenceBTest.cpp index b1de208b5..a4da77316 100644 --- a/test/fuzzer/EquivalenceBTest.cpp +++ b/test/fuzzer/EquivalenceBTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <stddef.h> #include <stdint.h> #include <stdio.h> diff --git a/test/fuzzer/ExplodeDFSanLabelsTest.cpp b/test/fuzzer/ExplodeDFSanLabelsTest.cpp index 0decff8ff..a823f3725 100644 --- a/test/fuzzer/ExplodeDFSanLabelsTest.cpp +++ b/test/fuzzer/ExplodeDFSanLabelsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // When tracing data flow, explode the number of DFSan labels. #include <cstddef> @@ -11,6 +12,8 @@ __attribute__((noinline)) void f(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { if (a == b + 1 && c == d + 2) sink++; + if (a == d + 1 && c == b + 2) + sink++; } extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { diff --git a/test/fuzzer/FlagsTest.cpp b/test/fuzzer/FlagsTest.cpp index 6eeac177b..8acd2f99b 100644 --- a/test/fuzzer/FlagsTest.cpp +++ b/test/fuzzer/FlagsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Parse some flags #include <string> diff --git a/test/fuzzer/FourIndependentBranchesTest.cpp b/test/fuzzer/FourIndependentBranchesTest.cpp index bbf5ea235..712f94244 100644 --- a/test/fuzzer/FourIndependentBranchesTest.cpp +++ b/test/fuzzer/FourIndependentBranchesTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "FUZZ". #include <cstddef> diff --git a/test/fuzzer/FullCoverageSetTest.cpp b/test/fuzzer/FullCoverageSetTest.cpp index 6d7e48fe5..7409022fa 100644 --- a/test/fuzzer/FullCoverageSetTest.cpp +++ b/test/fuzzer/FullCoverageSetTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "FUZZER". #include <cstddef> diff --git a/test/fuzzer/GcSectionsTest.cpp b/test/fuzzer/GcSectionsTest.cpp index fd9da7735..730167c45 100644 --- a/test/fuzzer/GcSectionsTest.cpp +++ b/test/fuzzer/GcSectionsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. // The unused function should not be present in the binary. diff --git a/test/fuzzer/ImplicitIntegerSignChangeTest.cpp b/test/fuzzer/ImplicitIntegerSignChangeTest.cpp index 0fd7df0e2..f925afd4d 100644 --- a/test/fuzzer/ImplicitIntegerSignChangeTest.cpp +++ b/test/fuzzer/ImplicitIntegerSignChangeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for implicit-integer-sign-change. #include <assert.h> diff --git a/test/fuzzer/ImplicitSignedIntegerTruncationOrSignChangeTest.cpp b/test/fuzzer/ImplicitSignedIntegerTruncationOrSignChangeTest.cpp index 6e65f5442..e365d599c 100644 --- a/test/fuzzer/ImplicitSignedIntegerTruncationOrSignChangeTest.cpp +++ b/test/fuzzer/ImplicitSignedIntegerTruncationOrSignChangeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for implicit-signed-integer-truncation-or-sign-change. #include <assert.h> diff --git a/test/fuzzer/ImplicitSignedIntegerTruncationTest.cpp b/test/fuzzer/ImplicitSignedIntegerTruncationTest.cpp index 9a17802e2..3e175a1de 100644 --- a/test/fuzzer/ImplicitSignedIntegerTruncationTest.cpp +++ b/test/fuzzer/ImplicitSignedIntegerTruncationTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for signed-integer-overflow. #include <assert.h> diff --git a/test/fuzzer/ImplicitUnsignedIntegerTruncationTest.cpp b/test/fuzzer/ImplicitUnsignedIntegerTruncationTest.cpp index c0bf40ab0..5c22a0a3a 100644 --- a/test/fuzzer/ImplicitUnsignedIntegerTruncationTest.cpp +++ b/test/fuzzer/ImplicitUnsignedIntegerTruncationTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for unsigned-integer-overflow. #include <assert.h> diff --git a/test/fuzzer/InitializeTest.cpp b/test/fuzzer/InitializeTest.cpp index 5022c9efa..f0299e1f6 100644 --- a/test/fuzzer/InitializeTest.cpp +++ b/test/fuzzer/InitializeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Make sure LLVMFuzzerInitialize is called. #include <assert.h> diff --git a/test/fuzzer/IntegerOverflowTest.cpp b/test/fuzzer/IntegerOverflowTest.cpp new file mode 100644 index 000000000..4f5a259dc --- /dev/null +++ b/test/fuzzer/IntegerOverflowTest.cpp @@ -0,0 +1,17 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Simple test for a fuzzer. The fuzzer must find the string "Hi" and cause an +// integer overflow. +#include <cstddef> +#include <cstdint> + +static int Val = 1 << 30; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + if (Size >= 2 && Data[0] == 'H' && Data[1] == 'i') + Val += Val; + return 0; +} + diff --git a/test/fuzzer/LargeTest.cpp b/test/fuzzer/LargeTest.cpp index 83ed61971..59a1619c0 100644 --- a/test/fuzzer/LargeTest.cpp +++ b/test/fuzzer/LargeTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // A fuzz target with lots of edges. #include <cstdint> diff --git a/test/fuzzer/LeakTest.cpp b/test/fuzzer/LeakTest.cpp index f259e9d35..b4f7e5dfc 100644 --- a/test/fuzzer/LeakTest.cpp +++ b/test/fuzzer/LeakTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test with a leak. #include <cstddef> diff --git a/test/fuzzer/LeakTimeoutTest.cpp b/test/fuzzer/LeakTimeoutTest.cpp index 92526194a..a4c89ce7d 100644 --- a/test/fuzzer/LeakTimeoutTest.cpp +++ b/test/fuzzer/LeakTimeoutTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test with a leak. #include <cstddef> diff --git a/test/fuzzer/LoadTest.cpp b/test/fuzzer/LoadTest.cpp index 67a28c7cb..9cf101542 100644 --- a/test/fuzzer/LoadTest.cpp +++ b/test/fuzzer/LoadTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer: find interesting value of array index. #include <assert.h> diff --git a/test/fuzzer/MagicSeparatorTest.cpp b/test/fuzzer/MagicSeparatorTest.cpp new file mode 100644 index 000000000..2c0fbc90c --- /dev/null +++ b/test/fuzzer/MagicSeparatorTest.cpp @@ -0,0 +1,49 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Simple test for a fuzzer. +// This is a sample fuzz target for a custom serialization format that uses +// a magic separator to split the input into several independent buffers. +// The fuzzer must find the input consisting of 2 subinputs: "Fuzz" and "me". +#include <cassert> +#include <cstdint> +#include <cstdio> +#include <cstdlib> +#include <cstring> + +#include <algorithm> +#include <vector> + +// Splits [data,data+size) into a vector of strings using a "magic" Separator. +std::vector<std::vector<uint8_t>> SplitInput(const uint8_t *Data, size_t Size, + const uint8_t *Separator, + size_t SeparatorSize) { + std::vector<std::vector<uint8_t>> Res; + assert(SeparatorSize > 0); + auto Beg = Data; + auto End = Data + Size; + // Using memmem here. std::search may be harder for libFuzzer today. + while (const uint8_t *Pos = (const uint8_t *)memmem(Beg, End - Beg, + Separator, SeparatorSize)) { + Res.push_back({Beg, Pos}); + Beg = Pos + SeparatorSize; + } + if (Beg < End) + Res.push_back({Beg, End}); + return Res; +} + +static volatile int *Nil = nullptr; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + if (Size > 10) return 0; // To make the test quick. + const uint8_t Separator[] = {0xDE, 0xAD, 0xBE, 0xEF}; + auto Inputs = SplitInput(Data, Size, Separator, sizeof(Separator)); + std::vector<uint8_t> Fuzz({'F', 'u', 'z', 'z'}); + std::vector<uint8_t> Me({'m', 'e'}); + if (Inputs.size() == 2 && Inputs[0] == Fuzz && Inputs[1] == Me) + *Nil = 42; // crash. + return 0; +} + diff --git a/test/fuzzer/Memcmp64BytesTest.cpp b/test/fuzzer/Memcmp64BytesTest.cpp index 5b6cb7071..e2c0db22b 100644 --- a/test/fuzzer/Memcmp64BytesTest.cpp +++ b/test/fuzzer/Memcmp64BytesTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cassert> diff --git a/test/fuzzer/MemcmpTest.cpp b/test/fuzzer/MemcmpTest.cpp index 8dbb7d84f..060c5b9b1 100644 --- a/test/fuzzer/MemcmpTest.cpp +++ b/test/fuzzer/MemcmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cstdint> diff --git a/test/fuzzer/MultipleConstraintsOnSmallInputTest.cpp b/test/fuzzer/MultipleConstraintsOnSmallInputTest.cpp index 8e24acbcf..ddc0a931c 100644 --- a/test/fuzzer/MultipleConstraintsOnSmallInputTest.cpp +++ b/test/fuzzer/MultipleConstraintsOnSmallInputTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // echo -en 'Im_so_cute&pretty_:)' > crash // diff --git a/test/fuzzer/NotinstrumentedTest.cpp b/test/fuzzer/NotinstrumentedTest.cpp index 91418990b..3d0124736 100644 --- a/test/fuzzer/NotinstrumentedTest.cpp +++ b/test/fuzzer/NotinstrumentedTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // This test should not be instrumented. #include <cstddef> diff --git a/test/fuzzer/NthRunCrashTest.cpp b/test/fuzzer/NthRunCrashTest.cpp index 26cdc8f17..869b72339 100644 --- a/test/fuzzer/NthRunCrashTest.cpp +++ b/test/fuzzer/NthRunCrashTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Crash on the N-th execution. #include <cstddef> diff --git a/test/fuzzer/NullDerefOnEmptyTest.cpp b/test/fuzzer/NullDerefOnEmptyTest.cpp index 459db51f8..d9c85348c 100644 --- a/test/fuzzer/NullDerefOnEmptyTest.cpp +++ b/test/fuzzer/NullDerefOnEmptyTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the empty string. #include <cstddef> diff --git a/test/fuzzer/NullDerefTest.cpp b/test/fuzzer/NullDerefTest.cpp index 48df0f54c..32a366141 100644 --- a/test/fuzzer/NullDerefTest.cpp +++ b/test/fuzzer/NullDerefTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <cstddef> diff --git a/test/fuzzer/OneHugeAllocTest.cpp b/test/fuzzer/OneHugeAllocTest.cpp index 32a557871..34c51f522 100644 --- a/test/fuzzer/OneHugeAllocTest.cpp +++ b/test/fuzzer/OneHugeAllocTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Tests OOM handling when there is a single large allocation. #include <assert.h> diff --git a/test/fuzzer/OnlySomeBytesTest.cpp b/test/fuzzer/OnlySomeBytesTest.cpp index 076cda063..60de710e8 100644 --- a/test/fuzzer/OnlySomeBytesTest.cpp +++ b/test/fuzzer/OnlySomeBytesTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Find ABCxxFxUxZxxx... (2048+ bytes, 'x' is any byte) #include <assert.h> diff --git a/test/fuzzer/OutOfMemorySingleLargeMallocTest.cpp b/test/fuzzer/OutOfMemorySingleLargeMallocTest.cpp index a07795a08..5a6b49ff1 100644 --- a/test/fuzzer/OutOfMemorySingleLargeMallocTest.cpp +++ b/test/fuzzer/OutOfMemorySingleLargeMallocTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Tests OOM handling. #include <assert.h> diff --git a/test/fuzzer/OutOfMemoryTest.cpp b/test/fuzzer/OutOfMemoryTest.cpp index 5e59bde09..ae8e6ee3b 100644 --- a/test/fuzzer/OutOfMemoryTest.cpp +++ b/test/fuzzer/OutOfMemoryTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Tests OOM handling. #include <assert.h> diff --git a/test/fuzzer/OverwriteInputTest.cpp b/test/fuzzer/OverwriteInputTest.cpp index e68868234..b5f40a7e8 100644 --- a/test/fuzzer/OverwriteInputTest.cpp +++ b/test/fuzzer/OverwriteInputTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. Make sure we abort if Data is overwritten. #include <cstdint> diff --git a/test/fuzzer/PrintFuncTest.cpp b/test/fuzzer/PrintFuncTest.cpp index d41b46239..1520e82b9 100644 --- a/test/fuzzer/PrintFuncTest.cpp +++ b/test/fuzzer/PrintFuncTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <cstddef> diff --git a/test/fuzzer/ReadBinaryTest.cpp b/test/fuzzer/ReadBinaryTest.cpp index de7a40036..b4c2a4b8a 100644 --- a/test/fuzzer/ReadBinaryTest.cpp +++ b/test/fuzzer/ReadBinaryTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. Tests that fuzzer can read a file containing // carriage returns. diff --git a/test/fuzzer/ReloadTest.cpp b/test/fuzzer/ReloadTest.cpp new file mode 100644 index 000000000..853f7ba99 --- /dev/null +++ b/test/fuzzer/ReloadTest.cpp @@ -0,0 +1,24 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Test that fuzzer we can reload artifacts with any bytes inside. +#include <algorithm> +#include <cstdint> +#include <cstdlib> +#include <numeric> +#include <set> + +extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, + size_t MaxSize, unsigned int Seed) { + std::srand(Seed); + std::generate(Data, Data + MaxSize, std::rand); + return MaxSize; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + if (Size > 5000 && std::set<uint8_t>(Data, Data + Size).size() > 255 && + (uint8_t)std::accumulate(Data, Data + Size, uint8_t(Size)) == 0) + abort(); + return 0; +} diff --git a/test/fuzzer/RepeatedBytesTest.cpp b/test/fuzzer/RepeatedBytesTest.cpp index 31868cf8c..1ed822a3d 100644 --- a/test/fuzzer/RepeatedBytesTest.cpp +++ b/test/fuzzer/RepeatedBytesTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find repeated bytes. #include <assert.h> diff --git a/test/fuzzer/RepeatedMemcmp.cpp b/test/fuzzer/RepeatedMemcmp.cpp index 18369deac..0363adf39 100644 --- a/test/fuzzer/RepeatedMemcmp.cpp +++ b/test/fuzzer/RepeatedMemcmp.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include <cstdint> #include <cstdio> diff --git a/test/fuzzer/ShallowOOMDeepCrash.cpp b/test/fuzzer/ShallowOOMDeepCrash.cpp new file mode 100644 index 000000000..197fffa5e --- /dev/null +++ b/test/fuzzer/ShallowOOMDeepCrash.cpp @@ -0,0 +1,22 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Simple test for a fuzzer. +// Here the target has a shallow OOM bug and a deeper crash. +// Make sure we can find the crash while ignoring OOMs. +#include <cstddef> +#include <cstdint> + +static volatile int *Sink; +static volatile int *Zero; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + if (Size >= 3 && Data[0] == 'O' && Data[1] == 'O' && Data[2] == 'M') + Sink = new int[1 << 28]; // instant OOM with -rss_limit_mb=128. + if (Size >= 4 && Data[0] == 'F' && Data[1] == 'U' && Data[2] == 'Z' && + Data[3] == 'Z') // a bit deeper crash. + *Zero = 42; + return 0; +} + diff --git a/test/fuzzer/ShrinkControlFlowSimpleTest.cpp b/test/fuzzer/ShrinkControlFlowSimpleTest.cpp index 0afd26df2..d63905ae9 100644 --- a/test/fuzzer/ShrinkControlFlowSimpleTest.cpp +++ b/test/fuzzer/ShrinkControlFlowSimpleTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that we can find the minimal item in the corpus (3 bytes: "FUZ"). #include <cstddef> diff --git a/test/fuzzer/ShrinkControlFlowTest.cpp b/test/fuzzer/ShrinkControlFlowTest.cpp index 1957c1f90..886bc066b 100644 --- a/test/fuzzer/ShrinkControlFlowTest.cpp +++ b/test/fuzzer/ShrinkControlFlowTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that we can find the minimal item in the corpus (3 bytes: "FUZ"). #include <cstddef> diff --git a/test/fuzzer/ShrinkValueProfileTest.cpp b/test/fuzzer/ShrinkValueProfileTest.cpp index dddf493da..4d4c0b599 100644 --- a/test/fuzzer/ShrinkValueProfileTest.cpp +++ b/test/fuzzer/ShrinkValueProfileTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that we can find the minimal item in the corpus (4 bytes: "FUZZ"). #include <cstddef> diff --git a/test/fuzzer/SignedIntOverflowTest.cpp b/test/fuzzer/SignedIntOverflowTest.cpp index d80060207..5283304ea 100644 --- a/test/fuzzer/SignedIntOverflowTest.cpp +++ b/test/fuzzer/SignedIntOverflowTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test for signed-integer-overflow. #include <assert.h> diff --git a/test/fuzzer/SimpleCmpTest.cpp b/test/fuzzer/SimpleCmpTest.cpp index 3bb28c173..5768493d8 100644 --- a/test/fuzzer/SimpleCmpTest.cpp +++ b/test/fuzzer/SimpleCmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find several narrow ranges. #include <cstdint> diff --git a/test/fuzzer/SimpleDictionaryTest.cpp b/test/fuzzer/SimpleDictionaryTest.cpp index ffa2e4137..72b2440d4 100644 --- a/test/fuzzer/SimpleDictionaryTest.cpp +++ b/test/fuzzer/SimpleDictionaryTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. // The fuzzer must find a string based on dictionary words: diff --git a/test/fuzzer/SimpleHashTest.cpp b/test/fuzzer/SimpleHashTest.cpp index 99e96cb25..6ca8ac699 100644 --- a/test/fuzzer/SimpleHashTest.cpp +++ b/test/fuzzer/SimpleHashTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // This test computes a checksum of the data (all but the last 4 bytes), // and then compares the last 4 bytes with the computed value. diff --git a/test/fuzzer/SimpleTest.cpp b/test/fuzzer/SimpleTest.cpp index 3882a842b..c51227ba2 100644 --- a/test/fuzzer/SimpleTest.cpp +++ b/test/fuzzer/SimpleTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <assert.h> diff --git a/test/fuzzer/SimpleTestStdio.cpp b/test/fuzzer/SimpleTestStdio.cpp index ed7fe1cb3..36387b362 100644 --- a/test/fuzzer/SimpleTestStdio.cpp +++ b/test/fuzzer/SimpleTestStdio.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <assert.h> diff --git a/test/fuzzer/SimpleThreadedTest.cpp b/test/fuzzer/SimpleThreadedTest.cpp index deeae756a..8f4cf6a9a 100644 --- a/test/fuzzer/SimpleThreadedTest.cpp +++ b/test/fuzzer/SimpleThreadedTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Threaded test for a fuzzer. The fuzzer should find "H" #include <assert.h> diff --git a/test/fuzzer/SingleByteInputTest.cpp b/test/fuzzer/SingleByteInputTest.cpp index 72b58ba91..5244653fc 100644 --- a/test/fuzzer/SingleByteInputTest.cpp +++ b/test/fuzzer/SingleByteInputTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer, need just one byte to crash. #include <cstddef> diff --git a/test/fuzzer/SingleMemcmpTest.cpp b/test/fuzzer/SingleMemcmpTest.cpp index 19781ba4c..ef0a89b80 100644 --- a/test/fuzzer/SingleMemcmpTest.cpp +++ b/test/fuzzer/SingleMemcmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cstdint> diff --git a/test/fuzzer/SingleStrcmpTest.cpp b/test/fuzzer/SingleStrcmpTest.cpp index 149073444..46521ab97 100644 --- a/test/fuzzer/SingleStrcmpTest.cpp +++ b/test/fuzzer/SingleStrcmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cstdint> diff --git a/test/fuzzer/SingleStrncmpTest.cpp b/test/fuzzer/SingleStrncmpTest.cpp index 47298763f..46f1f3e0d 100644 --- a/test/fuzzer/SingleStrncmpTest.cpp +++ b/test/fuzzer/SingleStrncmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cstdint> diff --git a/test/fuzzer/SleepOneSecondTest.cpp b/test/fuzzer/SleepOneSecondTest.cpp index 27de2f4f7..b91c4b755 100644 --- a/test/fuzzer/SleepOneSecondTest.cpp +++ b/test/fuzzer/SleepOneSecondTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer: it simply sleeps for 1 second. #include <cstddef> diff --git a/test/fuzzer/SpamyTest.cpp b/test/fuzzer/SpamyTest.cpp index 721134e18..f0f0d4c74 100644 --- a/test/fuzzer/SpamyTest.cpp +++ b/test/fuzzer/SpamyTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // The test spams to stderr and stdout. #include <assert.h> diff --git a/test/fuzzer/StrcmpTest.cpp b/test/fuzzer/StrcmpTest.cpp index 81f041d91..12cafae66 100644 --- a/test/fuzzer/StrcmpTest.cpp +++ b/test/fuzzer/StrcmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Break through a series of strcmp. #include <cassert> diff --git a/test/fuzzer/StrncmpOOBTest.cpp b/test/fuzzer/StrncmpOOBTest.cpp index 4ed71d9d0..92b4868ce 100644 --- a/test/fuzzer/StrncmpOOBTest.cpp +++ b/test/fuzzer/StrncmpOOBTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test that libFuzzer itself does not read out of bounds. #include <assert.h> diff --git a/test/fuzzer/StrncmpTest.cpp b/test/fuzzer/StrncmpTest.cpp index a40e05690..6f2f46dda 100644 --- a/test/fuzzer/StrncmpTest.cpp +++ b/test/fuzzer/StrncmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find a particular string. #include <cstdint> diff --git a/test/fuzzer/StrstrTest.cpp b/test/fuzzer/StrstrTest.cpp index a3ea4e03b..29d202758 100644 --- a/test/fuzzer/StrstrTest.cpp +++ b/test/fuzzer/StrstrTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test strstr and strcasestr hooks. #include <cstdint> diff --git a/test/fuzzer/SwapCmpTest.cpp b/test/fuzzer/SwapCmpTest.cpp index 5aa47beb2..d4c2cd239 100644 --- a/test/fuzzer/SwapCmpTest.cpp +++ b/test/fuzzer/SwapCmpTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // The fuzzer must find several constants with swapped bytes. #include <cstdint> diff --git a/test/fuzzer/Switch2Test.cpp b/test/fuzzer/Switch2Test.cpp index 5f66ac8b4..5d85bd470 100644 --- a/test/fuzzer/Switch2Test.cpp +++ b/test/fuzzer/Switch2Test.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the interesting switch value. #include <cstddef> diff --git a/test/fuzzer/Switch3Test.cpp b/test/fuzzer/Switch3Test.cpp new file mode 100644 index 000000000..c85669ee2 --- /dev/null +++ b/test/fuzzer/Switch3Test.cpp @@ -0,0 +1,25 @@ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Simple test for a fuzzer. The fuzzer must find the interesting switch value. +#include <cstddef> +#include <cstdint> +#include <cstdio> +#include <cstdlib> +#include <cstring> + +static volatile int Sink; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + uint32_t v; + if (Size < 100) return 0; + memcpy(&v, Data + Size / 2, sizeof(v)); + switch(v) { + case 0x47524159: abort(); + case 0x52474220: abort(); + default:; + } + return 0; +} + diff --git a/test/fuzzer/SwitchTest.cpp b/test/fuzzer/SwitchTest.cpp index 86944cad2..15b70ed90 100644 --- a/test/fuzzer/SwitchTest.cpp +++ b/test/fuzzer/SwitchTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the interesting switch value. #include <cstddef> diff --git a/test/fuzzer/SymbolizeDeadlock.cpp b/test/fuzzer/SymbolizeDeadlock.cpp index b9ece38b2..a6e3f1881 100644 --- a/test/fuzzer/SymbolizeDeadlock.cpp +++ b/test/fuzzer/SymbolizeDeadlock.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Tests that deadlocks do not occur when an OOM occurs during symbolization. diff --git a/test/fuzzer/TableLookupTest.cpp b/test/fuzzer/TableLookupTest.cpp index 4d8ab0611..2b4052303 100644 --- a/test/fuzzer/TableLookupTest.cpp +++ b/test/fuzzer/TableLookupTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Make sure the fuzzer eventually finds all possible values of a variable // within a range. diff --git a/test/fuzzer/ThreadedLeakTest.cpp b/test/fuzzer/ThreadedLeakTest.cpp index 59f3671fe..cbc9ad53d 100644 --- a/test/fuzzer/ThreadedLeakTest.cpp +++ b/test/fuzzer/ThreadedLeakTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // The fuzzer should find a leak in a non-main thread. #include <cstddef> diff --git a/test/fuzzer/ThreadedTest.cpp b/test/fuzzer/ThreadedTest.cpp index bb51ba764..716eace4b 100644 --- a/test/fuzzer/ThreadedTest.cpp +++ b/test/fuzzer/ThreadedTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Threaded test for a fuzzer. The fuzzer should not crash. #include <assert.h> diff --git a/test/fuzzer/ThreeBytes.cpp b/test/fuzzer/ThreeBytes.cpp index 754a5b0b5..cdedd9c18 100644 --- a/test/fuzzer/ThreeBytes.cpp +++ b/test/fuzzer/ThreeBytes.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Find FUZ #include <cstddef> diff --git a/test/fuzzer/ThreeFunctionsTest.cpp b/test/fuzzer/ThreeFunctionsTest.cpp index 1278cb056..64583e95a 100644 --- a/test/fuzzer/ThreeFunctionsTest.cpp +++ b/test/fuzzer/ThreeFunctionsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Find "FUZZME", the target has 3 different functions. #include <assert.h> diff --git a/test/fuzzer/TimeoutEmptyTest.cpp b/test/fuzzer/TimeoutEmptyTest.cpp index 1ddf1fa34..f82cfda4a 100644 --- a/test/fuzzer/TimeoutEmptyTest.cpp +++ b/test/fuzzer/TimeoutEmptyTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the empty string. #include <cstddef> diff --git a/test/fuzzer/TimeoutTest.cpp b/test/fuzzer/TimeoutTest.cpp index e3cdba3ee..e4526c092 100644 --- a/test/fuzzer/TimeoutTest.cpp +++ b/test/fuzzer/TimeoutTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. The fuzzer must find the string "Hi!". #include <cstddef> diff --git a/test/fuzzer/TraceMallocTest.cpp b/test/fuzzer/TraceMallocTest.cpp index af9975603..5a7dfe9d3 100644 --- a/test/fuzzer/TraceMallocTest.cpp +++ b/test/fuzzer/TraceMallocTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Tests -trace_malloc #include <assert.h> diff --git a/test/fuzzer/TraceMallocThreadedTest.cpp b/test/fuzzer/TraceMallocThreadedTest.cpp index 0183d939a..6b8bb7c2e 100644 --- a/test/fuzzer/TraceMallocThreadedTest.cpp +++ b/test/fuzzer/TraceMallocThreadedTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Check that allocation tracing from different threads does not cause // interleaving of stack traces. diff --git a/test/fuzzer/TwoDifferentBugsTest.cpp b/test/fuzzer/TwoDifferentBugsTest.cpp index 77d2cb1a2..18649b72e 100644 --- a/test/fuzzer/TwoDifferentBugsTest.cpp +++ b/test/fuzzer/TwoDifferentBugsTest.cpp @@ -1,5 +1,6 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Simple test for a fuzzer. This test may trigger two different bugs. #include <cstddef> diff --git a/test/fuzzer/afl-driver-close-fd-mask.test b/test/fuzzer/afl-driver-close-fd-mask.test new file mode 100644 index 000000000..71f74e27e --- /dev/null +++ b/test/fuzzer/afl-driver-close-fd-mask.test @@ -0,0 +1,31 @@ +REQUIRES: linux +RUN: %no_fuzzer_cpp_compiler %S/AFLDriverTest.cpp %libfuzzer_src/afl/afl_driver.cpp -o %t-AFLDriverTest + +; Test that not specifying AFL_DRIVER_CLOSE_FD_MASK works as intended. +RUN: echo -n "abc" > %t.file3 +RUN: unset AFL_DRIVER_CLOSE_FD_MASK +RUN: %run %t-AFLDriverTest < %t.file3 2>&1 | FileCheck %s --check-prefixes=STDERR,STDOUT +STDOUT: STDOUT MESSAGE +STDERR: STDERR MESSAGE + +; Test that stdout is closed properly. +RUN: AFL_DRIVER_CLOSE_FD_MASK=1 %run %t-AFLDriverTest < %t.file3 2>&1 | FileCheck %s --check-prefixes=NOT_STDOUT,STDERR +NOT_STDOUT-NOT: STDOUT MESSAGE + +; Test that stderr is closed properly. +RUN: AFL_DRIVER_CLOSE_FD_MASK=2 %run %t-AFLDriverTest < %t.file3 2>&1 | FileCheck %s --check-prefixes=NOT_STDERR,STDOUT +NOT_STDERR-NOT: STDERR MESSAGE + +; Test that both are closed properly. +RUN: AFL_DRIVER_CLOSE_FD_MASK=3 %run %t-AFLDriverTest < %t.file3 2>&1 | FileCheck %s --check-prefixes=NOT_STDERR,NOT_STDOUT + +; Test that a stack is printed when we close stderr +RUN: echo -n "abcd" > %t.file4 +RUN: AFL_DRIVER_CLOSE_FD_MASK=2 not %run %t-AFLDriverTest < %t.file4 2>&1 | FileCheck %s --check-prefixes=ASAN_CRASH,STDOUT,NOT_STDERR +ASAN_CRASH: ERROR: AddressSanitizer + +; Test that a stack is written to the stderr duplicate file when we close stderr +; and specify a duplicate. +RUN: rm -f %t.stderr +RUN: AFL_DRIVER_STDERR_DUPLICATE_FILENAME=%t.stderr AFL_DRIVER_CLOSE_FD_MASK=2 not %run %t-AFLDriverTest < %t.file4 +RUN: cat %t.stderr | FileCheck %s --check-prefixes=ASAN_CRASH,NOT_STDERR diff --git a/test/fuzzer/afl-driver-extra-stats.test b/test/fuzzer/afl-driver-extra-stats.test deleted file mode 100644 index 2f5641daf..000000000 --- a/test/fuzzer/afl-driver-extra-stats.test +++ /dev/null @@ -1,33 +0,0 @@ -# AFL doesn't work on Windows. No reason to test the driver. -UNSUPPORTED: windows -XFAIL: ios -RUN: %no_fuzzer_cpp_compiler %S/AFLDriverTest.cpp %libfuzzer_src/afl/afl_driver.cpp -o %t-AFLDriverTest - -; Test that not specifying an extra stats file isn't broken. -RUN: unset AFL_DRIVER_EXTRA_STATS_FILENAME -RUN: %run %t-AFLDriverTest - -; Test that specifying an invalid extra stats file causes a crash. -RUN: ASAN_OPTIONS= AFL_DRIVER_EXTRA_STATS_FILENAME=%T not --crash %t-AFLDriverTest - -; Test that specifying a corrupted stats file causes a crash. -echo "peak_rss_mb :0" > %t -ASAN_OPTIONS= AFL_DRIVER_EXTRA_STATS_FILENAME=%t not --crash %t-AFLDriverTest - -; Test that specifying a valid nonexistent stats file works. -RUN: rm -f %t -RUN: AFL_DRIVER_EXTRA_STATS_FILENAME=%t %t-AFLDriverTest -RUN: [[ $(grep "peak_rss_mb\|slowest_unit_time_sec" %t | wc -l) -eq 2 ]] - -; Test that specifying a valid preexisting stats file works. -RUN: printf "peak_rss_mb : 0\nslowest_unit_time_sec: 0\n" > %t -RUN: AFL_DRIVER_EXTRA_STATS_FILENAME=%t %t-AFLDriverTest -; Check that both lines were printed. -RUN: [[ $(grep "peak_rss_mb\|slowest_unit_time_sec" %t | wc -l) -eq 2 ]] - -; Test that peak_rss_mb and slowest_unit_time_in_secs are only updated when necessary. -; Check that both lines have 9999 since there's no way we have exceeded that -; amount of time or virtual memory. -RUN: printf "peak_rss_mb : 9999\nslowest_unit_time_sec: 9999\n" > %t -RUN: AFL_DRIVER_EXTRA_STATS_FILENAME=%t %t-AFLDriverTest -RUN: [[ $(grep "9999" %t | wc -l) -eq 2 ]] diff --git a/test/fuzzer/afl-driver.test b/test/fuzzer/afl-driver.test index 552bafb0b..58f422f1e 100644 --- a/test/fuzzer/afl-driver.test +++ b/test/fuzzer/afl-driver.test @@ -3,27 +3,23 @@ REQUIRES: linux RUN: %no_fuzzer_cpp_compiler %S/AFLDriverTest.cpp %libfuzzer_src/afl/afl_driver.cpp -o %t-AFLDriverTest RUN: echo -n "abc" > %t.file3 -RUN: echo -n "abcd" > %t.file4 - RUN: %run %t-AFLDriverTest < %t.file3 2>&1 | FileCheck %s --check-prefix=CHECK1 -CHECK1: __afl_persistent_loop calle, Count = 1000 +CHECK1: __afl_persistent_loop called, Count = 1000 CHECK1: LLVMFuzzerTestOneInput called; Size = 3 - RUN: %run %t-AFLDriverTest < %t.file3 -42 2>&1 | FileCheck %s --check-prefix=CHECK2 -CHECK2: __afl_persistent_loop calle, Count = 42 +CHECK2: __afl_persistent_loop called, Count = 42 CHECK2: LLVMFuzzerTestOneInput called; Size = 3 - RUN: %run %t-AFLDriverTest < %t.file3 666 2>&1 | FileCheck %s --check-prefix=CHECK3 CHECK3: WARNING: using the deprecated call style -CHECK3: __afl_persistent_loop calle, Count = 666 +CHECK3: __afl_persistent_loop called, Count = 666 CHECK3: LLVMFuzzerTestOneInput called; Size = 3 - RUN: %run %t-AFLDriverTest %t.file3 2>&1 | FileCheck %s --check-prefix=CHECK4 CHECK4: LLVMFuzzerTestOneInput called; Size = 3 -RUN: %run %t-AFLDriverTest %t.file3 %t.file4 2>&1 | FileCheck %s --check-prefix=CHECK5 -CHECK5: LLVMFuzzerTestOneInput called; Size = 3 -CHECK5: LLVMFuzzerTestOneInput called; Size = 4 +RUN: echo -n "ab" > %t.file2 +RUN: %run %t-AFLDriverTest %t.file2 %t.file3 2>&1 | FileCheck %s --check-prefix=CHECK5 +CHECK5: LLVMFuzzerTestOneInput called; Size = 2 +CHECK5: LLVMFuzzerTestOneInput called; Size = 3
\ No newline at end of file diff --git a/test/fuzzer/compressed.test b/test/fuzzer/compressed.test new file mode 100644 index 000000000..37ea61330 --- /dev/null +++ b/test/fuzzer/compressed.test @@ -0,0 +1,10 @@ +REQUIRES: linux +REQUIRES: zlib +# zlib is "supported" on i386 even when only for x86_64, explicitly make i386 +# unsupported by this test. +UNSUPPORTED: i386 +# Custom mutator should find this bug, w/o custom -- no chance. +RUN: %cpp_compiler %S/CompressedTest.cpp -o %t-CompressedTestCustom -DCUSTOM_MUTATOR -lz +RUN: %cpp_compiler %S/CompressedTest.cpp -o %t-CompressedTestPlain -lz +RUN: not %run %t-CompressedTestCustom -seed=1 -runs=1000000 +RUN: %run %t-CompressedTestPlain -seed=1 -runs=1000000 diff --git a/test/fuzzer/coverage.test b/test/fuzzer/coverage.test index ff7a436e3..db15c7a66 100644 --- a/test/fuzzer/coverage.test +++ b/test/fuzzer/coverage.test @@ -1,19 +1,20 @@ # FIXME: Disabled on Windows because -fPIC cannot be used to compile for Windows. UNSUPPORTED: windows RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/NullDerefTest.cpp -o %t-NullDerefTest -RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/DSO1.cpp -fPIC %ld_flags_rpath_so1 -shared -o %dynamiclib1 -RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/DSO2.cpp -fPIC %ld_flags_rpath_so2 -shared -o %dynamiclib2 +RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/DSO1.cpp -fPIC %ld_flags_rpath_so1 -O0 -shared -o %dynamiclib1 +RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/DSO2.cpp -fPIC %ld_flags_rpath_so2 -O0 -shared -o %dynamiclib2 RUN: %cpp_compiler -mllvm -use-unknown-locations=Disable %S/DSOTestMain.cpp %S/DSOTestExtra.cpp %ld_flags_rpath_exe1 %ld_flags_rpath_exe2 -o %t-DSOTest CHECK: COVERAGE: -CHECK: COVERED_FUNC: {{.*}}LLVMFuzzerTestOneInput {{.*}}NullDerefTest.cpp:13 +CHECK: COVERED_FUNC: {{.*}}LLVMFuzzerTestOneInput {{.*}}NullDerefTest.cpp:14 RUN: not %run %t-NullDerefTest -print_coverage=1 2>&1 | FileCheck %s RUN: %run %t-DSOTest -print_coverage=1 -runs=0 2>&1 | FileCheck %s --check-prefix=DSO DSO: COVERAGE: -DSO-DAG: COVERED_FUNC:{{.*}}1{{.*}} -DSO-DAG: COVERED_FUNC:{{.*}}2{{.*}} +DSO-DAG: COVERED_FUNC:{{.*}}DSO1 +DSO-DAG: COVERED_FUNC:{{.*}}DSO2 DSO-DAG: COVERED_FUNC:{{.*}}LLVMFuzzerTestOneInput{{.*}}DSOTestMain -DSO-DAG: UNCOVERED_PC:{{.*}}1 -DSO-DAG: UNCOVERED_PC:{{.*}}2 +DSO-DAG: UNCOVERED_PC:{{.*}}DSO1 +DSO-DAG: UNCOVERED_PC:{{.*}}DSO2 DSO-DAG: UNCOVERED_PC:{{.*}}DSOTestMain +DSO-DAG: UNCOVERED_FUNC:{{.*}}Uncovered1 diff --git a/test/fuzzer/cross_over.test b/test/fuzzer/cross_over.test new file mode 100644 index 000000000..058b5eb2c --- /dev/null +++ b/test/fuzzer/cross_over.test @@ -0,0 +1,18 @@ +# Tests CrossOverTest. +# We want to make sure that the test can find the input +# ABCDEFGHIJ when given two other inputs in the seed corpus: +# ABCDE00000 and +# ZZZZZFGHIJ +# +RUN: %cpp_compiler %S/CrossOverTest.cpp -o %t-CrossOverTest + +RUN: rm -rf %t-corpus +RUN: mkdir %t-corpus +RUN: echo -n ABCDE00000 > %t-corpus/A +RUN: echo -n ZZZZZFGHIJ > %t-corpus/B + + +RUN: not %run %t-CrossOverTest -max_len=10 -seed=1 -runs=10000000 %t-corpus + +# Test the same thing but using -seed_inputs instead of passing the corpus dir. +RUN: not %run %t-CrossOverTest -max_len=10 -seed=1 -runs=10000000 -seed_inputs=%t-corpus/A,%t-corpus/B diff --git a/test/fuzzer/cxxstring.test b/test/fuzzer/cxxstring.test index 65edeec19..c8969d763 100644 --- a/test/fuzzer/cxxstring.test +++ b/test/fuzzer/cxxstring.test @@ -1,4 +1,4 @@ -UNSUPPORTED: windows,freebsd +UNSUPPORTED: freebsd RUN: %cpp_compiler %S/CxxStringEqTest.cpp -o %t-CxxStringEqTest diff --git a/test/fuzzer/dataflow.test b/test/fuzzer/dataflow.test index 64f083735..3fd2a9580 100644 --- a/test/fuzzer/dataflow.test +++ b/test/fuzzer/dataflow.test @@ -1,6 +1,5 @@ # Tests the data flow tracer. -REQUIRES: linux -UNSUPPORTED: aarch64 +REQUIRES: linux, x86_64 # Build the tracer and the test. RUN: %no_fuzzer_cpp_compiler -c -fno-sanitize=all -fsanitize=dataflow %S/../../lib/fuzzer/dataflow/DataFlow.cpp -o %t-DataFlow.o @@ -82,3 +81,14 @@ USE_DATA_FLOW_TRACE: INFO: DataFlowTrace: reading from {{.*}}/OUT USE_DATA_FLOW_TRACE-DAG: a8eefe2fd5d6b32028f355fafa3e739a6bf5edc => |000001| USE_DATA_FLOW_TRACE-DGA: d28cb407e8e1a702c72d25473f0553d3ec172262 => |0000011| USE_DATA_FLOW_TRACE: INFO: DataFlowTrace: 6 trace files, 3 functions, 2 traces with focus function + +# Test that we can run collect_data_flow on a long input (>2**16 bytes) +RUN: rm -rf %t/OUT +RUN: printf "%0.sA" {1..150001} > %t/IN/very_long_input +RUN: %libfuzzer_src/scripts/collect_data_flow.py %t-ThreeFunctionsTestDF %t/IN/very_long_input %t/OUT | FileCheck %s --check-prefix=COLLECT_TRACE_FOR_LONG_INPUT +RUN: rm %t/IN/very_long_input +COLLECT_TRACE_FOR_LONG_INPUT: ******* Trying:{{[ ]+}}[0, 150001] +COLLECT_TRACE_FOR_LONG_INPUT: ******* Trying:{{[ ]+}}[75000, 150001] +COLLECT_TRACE_FOR_LONG_INPUT: ******* Trying:{{[ ]+}}[112500, 150001] +COLLECT_TRACE_FOR_LONG_INPUT: ******* Success:{{[ ]+}}[{{[0123456789]+}}, 150001] +COLLECT_TRACE_FOR_LONG_INPUT: ******* Success:{{[ ]+}}[0, {{[0123456789]+}}] diff --git a/test/fuzzer/dead-stripping.test b/test/fuzzer/dead-stripping.test index 85445ea9f..280617bc3 100644 --- a/test/fuzzer/dead-stripping.test +++ b/test/fuzzer/dead-stripping.test @@ -2,22 +2,12 @@ REQUIRES: darwin No dead_strip. Unused code is not removed. RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -RUN: nm %t | grep UnusedFunctionShouldBeRemovedByLinker | count 1 +RUN: nm %t | grep UnusedFunctionShouldBeRemovedByLinker RUN: %run %t -runs=0 2>&1 | FileCheck %s -With dead_strip. Unused code is not removed. +With dead_strip. Unused code is (currently) not removed. (It would be better if it was removed!) RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -ffunction-sections -Wl,-dead_strip -RUN: nm %t | grep UnusedFunctionShouldBeRemovedByLinker | count 1 -RUN: %run %t -runs=0 2>&1 | FileCheck %s - -With dead_strip, with trace-pc. Unused code is removed. -RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -ffunction-sections -fsanitize-coverage=0 -fsanitize-coverage=trace-pc -Wl,-dead_strip -RUN: nm %t | not grep UnusedFunctionShouldBeRemovedByLinker -RUN: %run %t -runs=0 2>&1 | FileCheck %s - -With dead_strip, with pc-table. Unused code is not removed. -RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -ffunction-sections -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard,pc-table -Wl,-dead_strip -RUN: nm %t | grep UnusedFunctionShouldBeRemovedByLinker | count 1 +RUN: nm %t | grep UnusedFunctionShouldBeRemovedByLinker RUN: %run %t -runs=0 2>&1 | FileCheck %s CHECK-NOT: ERROR: The size of coverage PC tables does not match diff --git a/test/fuzzer/deprecated-instrumentation.test b/test/fuzzer/deprecated-instrumentation.test new file mode 100644 index 000000000..d65abcd77 --- /dev/null +++ b/test/fuzzer/deprecated-instrumentation.test @@ -0,0 +1,4 @@ +CHECK: -fsanitize-coverage=trace-pc is no longer supported by libFuzzer +RUN: %cpp_compiler %S/SimpleTest.cpp -c -o %t-SimpleTest.o -fsanitize-coverage=trace-pc +RUN: %cpp_compiler %t-SimpleTest.o -o %t-SimpleTest +RUN: not %run %t-SimpleTest 2>&1 | FileCheck %s diff --git a/test/fuzzer/dump_coverage.test b/test/fuzzer/dump_coverage.test deleted file mode 100644 index 803a4fbb8..000000000 --- a/test/fuzzer/dump_coverage.test +++ /dev/null @@ -1,22 +0,0 @@ -# FIXME: Disabled on Windows because -fPIC cannot be used to compile for Windows. -UNSUPPORTED: freebsd, windows -RUN: %cpp_compiler -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard %S/DSO1.cpp -fPIC -shared -o %dynamiclib1 %ld_flags_rpath_so1 -RUN: %cpp_compiler -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard %S/DSO2.cpp -fPIC -shared -o %dynamiclib2 %ld_flags_rpath_so2 -RUN: %cpp_compiler -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard %S/DSOTestMain.cpp %S/DSOTestExtra.cpp %ld_flags_rpath_exe1 %ld_flags_rpath_exe2 -o %t-DSOTest - -RUN: %cpp_compiler -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard %S/NullDerefTest.cpp -o %t-NullDerefTest - -RUN: rm -rf %t_workdir && mkdir -p %t_workdir -RUN: env ASAN_OPTIONS=coverage_dir='"%t_workdir"' not %run %t-NullDerefTest -dump_coverage=1 2>&1 | FileCheck %s -RUN: sancov -covered-functions %t-NullDerefTest %t_workdir/*.sancov | FileCheck %s --check-prefix=SANCOV -RUN: env ASAN_OPTIONS=coverage_dir='"%t_workdir"' %run %t-DSOTest -dump_coverage=1 -runs=0 2>&1 | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=DSO -RUN: env ASAN_OPTIONS=coverage_dir='"%t_workdir"' not %run %t-NullDerefTest -dump_coverage=0 2>&1 | FileCheck %s --check-prefix=NOCOV - -CHECK: SanitizerCoverage: {{.*}}NullDerefTest.{{.*}}.sancov: {{.*}} PCs written -SANCOV: LLVMFuzzerTestOneInput - -DSO: SanitizerCoverage: {{.*}}DSOTest.{{.*}}.sancov: {{.*}} PCs written -DSO-DAG: SanitizerCoverage: {{.*}}.{{.*}}.sancov: {{.*}} PCs written -DSO-DAG: SanitizerCoverage: {{.*}}2.{{.*}}.sancov: {{.*}} PCs written - -NOCOV-NOT: SanitizerCoverage: {{.*}} PCs written diff --git a/test/fuzzer/exit_on_src_pos.test b/test/fuzzer/exit_on_src_pos.test index c08c01410..d8fb662ff 100644 --- a/test/fuzzer/exit_on_src_pos.test +++ b/test/fuzzer/exit_on_src_pos.test @@ -6,6 +6,6 @@ RUN: %cpp_compiler -O0 %S/SimpleTest.cpp -o %t-SimpleTest.exe -mllvm -use-unknown-locations=Disable RUN: %cpp_compiler -O0 %S/ShrinkControlFlowTest.cpp -o %t-ShrinkControlFlowTest.exe -RUN: %run %t-SimpleTest.exe -exit_on_src_pos=SimpleTest.cpp:18 2>&1 | FileCheck %s --check-prefix=EXIT_ON_SRC_POS +RUN: %run %t-SimpleTest.exe -exit_on_src_pos=SimpleTest.cpp:19 2>&1 | FileCheck %s --check-prefix=EXIT_ON_SRC_POS RUN: %run %t-ShrinkControlFlowTest.exe -exit_on_src_pos=Foo 2>&1 | FileCheck %s --check-prefix=EXIT_ON_SRC_POS EXIT_ON_SRC_POS: INFO: found line matching '{{.*}}', exiting. diff --git a/test/fuzzer/features_dir.test b/test/fuzzer/features_dir.test new file mode 100644 index 000000000..c6beec01b --- /dev/null +++ b/test/fuzzer/features_dir.test @@ -0,0 +1,7 @@ +# Tests -features_dir=F +# REQUIRES: linux +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest +RUN: rm -rf %t-C %t-F +RUN: mkdir %t-C %t-F +RUN: not %run %t-SimpleTest %t-C -features_dir=%t-F +RUN: for c in %t-C/*; do f=%t-F/$(basename $c); echo looking for $f; [ -a $f ]; done diff --git a/test/fuzzer/fork-sigusr.test b/test/fuzzer/fork-sigusr.test new file mode 100644 index 000000000..bceca7127 --- /dev/null +++ b/test/fuzzer/fork-sigusr.test @@ -0,0 +1,14 @@ +# Check that libFuzzer honors SIGUSR1/SIGUSR2 +# Disabled on Windows which does not have SIGUSR1/SIGUSR2. +UNSUPPORTED: darwin, windows +RUN: rm -rf %t +RUN: mkdir -p %t +RUN: %cpp_compiler %S/ShallowOOMDeepCrash.cpp -o %t/ForkSIGUSR + +RUN: %run %t/ForkSIGUSR -fork=3 -rss_limit_mb=128 -ignore_crashes=1 2> %t/log & export PID=$! +RUN: sleep 3 +RUN: pkill -SIGUSR2 -f %t/ForkSIGUSR +RUN: sleep 3 +RUN: cat %t/log | FileCheck %s --dump-input-on-failure + +CHECK: libFuzzer: {{.*}}exiting diff --git a/test/fuzzer/fork-ubsan.test b/test/fuzzer/fork-ubsan.test new file mode 100644 index 000000000..7d7ee1636 --- /dev/null +++ b/test/fuzzer/fork-ubsan.test @@ -0,0 +1,6 @@ +# UNSUPPORTED: darwin, freebsd +# Tests how the fork mode works together with ubsan. +RUN: %cpp_compiler %S/IntegerOverflowTest.cpp -o %t-IntegerOverflowTest -fsanitize=signed-integer-overflow -fno-sanitize-recover=signed-integer-overflow +RUN: not %run %t-IntegerOverflowTest -fork=1 -ignore_crashes=1 -runs=10000 2>&1 | FileCheck %s --check-prefix=UBSAN_FORK +UBSAN_FORK: runtime error: signed integer overflow: 1073741824 + 1073741824 cannot be represented in type 'int' +UBSAN_FORK: INFO: fuzzed for {{.*}} iterations, wrapping up soon diff --git a/test/fuzzer/fork.test b/test/fuzzer/fork.test new file mode 100644 index 000000000..f748ad167 --- /dev/null +++ b/test/fuzzer/fork.test @@ -0,0 +1,21 @@ +# UNSUPPORTED: darwin, freebsd +BINGO: BINGO +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest +RUN: not %run %t-SimpleTest -fork=1 2>&1 | FileCheck %s --dump-input-on-failure --check-prefix=BINGO + +TIMEOUT: ERROR: libFuzzer: timeout +RUN: %cpp_compiler %S/TimeoutTest.cpp -o %t-TimeoutTest +RUN: not %run %t-TimeoutTest -fork=1 -timeout=1 -ignore_timeouts=0 2>&1 | FileCheck %s --dump-input-on-failure --check-prefix=TIMEOUT + +OOM: ERROR: libFuzzer: out-of-memory +RUN: %cpp_compiler %S/OutOfMemoryTest.cpp -o %t-OutOfMemoryTest +RUN: not %run %t-OutOfMemoryTest -fork=1 -ignore_ooms=0 -rss_limit_mb=128 2>&1 | FileCheck %s --dump-input-on-failure --check-prefix=OOM + +# access-violation is the error thrown on Windows. Address will be smaller on i386. +CRASH: {{SEGV|access-violation}} on unknown address 0x00000000 +RUN: %cpp_compiler %S/ShallowOOMDeepCrash.cpp -o %t-ShallowOOMDeepCrash +RUN: not %run %t-ShallowOOMDeepCrash -fork=1 -rss_limit_mb=128 2>&1 | FileCheck %s --dump-input-on-failure --check-prefix=CRASH + +MAX_TOTAL_TIME: INFO: fuzzed for {{.*}} seconds, wrapping up soon +MAX_TOTAL_TIME: INFO: exiting: {{.*}} time: +RUN: not %run %t-ShallowOOMDeepCrash -fork=1 -rss_limit_mb=128 -ignore_crashes=1 -max_total_time=5 2>&1 | FileCheck %s --dump-input-on-failure --check-prefix=MAX_TOTAL_TIME diff --git a/test/fuzzer/fuzzer-alignment-assumption.test b/test/fuzzer/fuzzer-alignment-assumption.test index 6db77e19c..4d62877ab 100644 --- a/test/fuzzer/fuzzer-alignment-assumption.test +++ b/test/fuzzer/fuzzer-alignment-assumption.test @@ -1,7 +1,7 @@ RUN: rm -f %t-AlignmentAssumptionTest-Ubsan RUN: %cpp_compiler -fsanitize=alignment -fno-sanitize-recover=all %S/AlignmentAssumptionTest.cpp -o %t-AlignmentAssumptionTest-Ubsan RUN: not %run %t-AlignmentAssumptionTest-Ubsan 2>&1 | FileCheck %s -CHECK: AlignmentAssumptionTest.cpp:22:39: runtime error: assumption of 32768 byte alignment for pointer of type 'const {{.*}} *' (aka 'const unsigned char *') failed +CHECK: AlignmentAssumptionTest.cpp:23:48: runtime error: assumption of 32768 byte alignment for pointer of type 'const {{.*}} *' (aka 'const unsigned char *') failed CHECK: 0x{{.*}}: note: address is {{.*}} aligned, misalignment offset is {{.*}} byte CHECK: Test unit written to ./crash- diff --git a/test/fuzzer/fuzzer-implicit-integer-sign-change.test b/test/fuzzer/fuzzer-implicit-integer-sign-change.test index 7524f6cc4..0f638d8e7 100644 --- a/test/fuzzer/fuzzer-implicit-integer-sign-change.test +++ b/test/fuzzer/fuzzer-implicit-integer-sign-change.test @@ -1,5 +1,5 @@ RUN: rm -f %t-ImplicitIntegerSignChangeTest-Ubsan RUN: %cpp_compiler -fsanitize=implicit-integer-sign-change -fno-sanitize-recover=all %S/ImplicitIntegerSignChangeTest.cpp -o %t-ImplicitIntegerSignChangeTest-Ubsan RUN: not %run %t-ImplicitIntegerSignChangeTest-Ubsan 2>&1 | FileCheck %s -CHECK: ImplicitIntegerSignChangeTest.cpp:22:16: runtime error: implicit conversion from type 'int32_t' (aka 'int') of value -1 (32-bit, signed) to type 'uint32_t' (aka 'unsigned int') changed the value to 4294967295 (32-bit, unsigned) +CHECK: ImplicitIntegerSignChangeTest.cpp:23:16: runtime error: implicit conversion from type 'int32_t' (aka 'int') of value -1 (32-bit, signed) to type 'uint32_t' (aka 'unsigned int') changed the value to 4294967295 (32-bit, unsigned) CHECK: Test unit written to ./crash- diff --git a/test/fuzzer/fuzzer-implicit-signed-integer-truncation-or-sign-change.test b/test/fuzzer/fuzzer-implicit-signed-integer-truncation-or-sign-change.test index 532b36a03..9797fb3ab 100644 --- a/test/fuzzer/fuzzer-implicit-signed-integer-truncation-or-sign-change.test +++ b/test/fuzzer/fuzzer-implicit-signed-integer-truncation-or-sign-change.test @@ -1,5 +1,5 @@ RUN: rm -f %t-ImplicitSignedIntegerTruncationOrSignChangeTest-Ubsan RUN: %cpp_compiler -fsanitize=implicit-signed-integer-truncation,implicit-integer-sign-change -fno-sanitize-recover=all %S/ImplicitSignedIntegerTruncationOrSignChangeTest.cpp -o %t-ImplicitSignedIntegerTruncationOrSignChangeTest-Ubsan RUN: not %run %t-ImplicitSignedIntegerTruncationOrSignChangeTest-Ubsan 2>&1 | FileCheck %s -CHECK: ImplicitSignedIntegerTruncationOrSignChangeTest.cpp:22:16: runtime error: implicit conversion from type 'uint32_t' (aka 'unsigned int') of value 4294967295 (32-bit, unsigned) to type 'int8_t' (aka 'signed char') changed the value to -1 (8-bit, signed) +CHECK: ImplicitSignedIntegerTruncationOrSignChangeTest.cpp:23:16: runtime error: implicit conversion from type 'uint32_t' (aka 'unsigned int') of value 4294967295 (32-bit, unsigned) to type 'int8_t' (aka 'signed char') changed the value to -1 (8-bit, signed) CHECK: Test unit written to ./crash- diff --git a/test/fuzzer/fuzzer-implicit-signed-integer-truncation.test b/test/fuzzer/fuzzer-implicit-signed-integer-truncation.test index d41625d3a..8a3d41c2b 100644 --- a/test/fuzzer/fuzzer-implicit-signed-integer-truncation.test +++ b/test/fuzzer/fuzzer-implicit-signed-integer-truncation.test @@ -1,5 +1,5 @@ RUN: rm -f %t-ImplicitSignedIntegerTruncationTest-Ubsan RUN: %cpp_compiler -fsanitize=implicit-signed-integer-truncation -fno-sanitize-recover=all %S/ImplicitSignedIntegerTruncationTest.cpp -o %t-ImplicitSignedIntegerTruncationTest-Ubsan RUN: not %run %t-ImplicitSignedIntegerTruncationTest-Ubsan 2>&1 | FileCheck %s -CHECK: ImplicitSignedIntegerTruncationTest.cpp:22:17: runtime error: implicit conversion from type 'int' of value 256 (32-bit, signed) to type 'uint8_t' (aka 'unsigned char') changed the value to 0 (8-bit, unsigned) +CHECK: ImplicitSignedIntegerTruncationTest.cpp:23:17: runtime error: implicit conversion from type 'int' of value 256 (32-bit, signed) to type 'uint8_t' (aka 'unsigned char') changed the value to 0 (8-bit, unsigned) CHECK: Test unit written to ./crash- diff --git a/test/fuzzer/fuzzer-implicit-unsigned-integer-truncation.test b/test/fuzzer/fuzzer-implicit-unsigned-integer-truncation.test index e62a01e9e..5d37704b8 100644 --- a/test/fuzzer/fuzzer-implicit-unsigned-integer-truncation.test +++ b/test/fuzzer/fuzzer-implicit-unsigned-integer-truncation.test @@ -1,5 +1,5 @@ RUN: rm -f %t-ImplicitUnsignedIntegerTruncationTest-Ubsan RUN: %cpp_compiler -fsanitize=implicit-unsigned-integer-truncation -fno-sanitize-recover=all %S/ImplicitUnsignedIntegerTruncationTest.cpp -o %t-ImplicitUnsignedIntegerTruncationTest-Ubsan RUN: not %run %t-ImplicitUnsignedIntegerTruncationTest-Ubsan 2>&1 | FileCheck %s -CHECK: ImplicitUnsignedIntegerTruncationTest.cpp:22:17: runtime error: implicit conversion from type 'unsigned int' of value 256 (32-bit, unsigned) to type 'uint8_t' (aka 'unsigned char') changed the value to 0 (8-bit, unsigned) +CHECK: ImplicitUnsignedIntegerTruncationTest.cpp:23:17: runtime error: implicit conversion from type 'unsigned int' of value 256 (32-bit, unsigned) to type 'uint8_t' (aka 'unsigned char') changed the value to 0 (8-bit, unsigned) CHECK: Test unit written to ./crash- diff --git a/test/fuzzer/fuzzer-segv.test b/test/fuzzer/fuzzer-segv.test index 0c4fafe08..7ae9049e1 100644 --- a/test/fuzzer/fuzzer-segv.test +++ b/test/fuzzer/fuzzer-segv.test @@ -1,8 +1,8 @@ RUN: %cpp_compiler %S/NullDerefTest.cpp -o %t-NullDerefTest -RUN: env ASAN_OPTIONS=handle_segv=0 not %run %t-NullDerefTest 2>&1 | FileCheck %s --check-prefix=LIBFUZZER_OWN_SEGV_HANDLER +RUN: %env_asan_opts=handle_segv=0 not %run %t-NullDerefTest 2>&1 | FileCheck %s --check-prefix=LIBFUZZER_OWN_SEGV_HANDLER LIBFUZZER_OWN_SEGV_HANDLER: == ERROR: libFuzzer: deadly signal LIBFUZZER_OWN_SEGV_HANDLER: SUMMARY: libFuzzer: deadly signal LIBFUZZER_OWN_SEGV_HANDLER: Test unit written to ./crash- -RUN: env ASAN_OPTIONS=handle_segv=1 not %run %t-NullDerefTest 2>&1 | FileCheck %s --check-prefix=LIBFUZZER_ASAN_SEGV_HANDLER +RUN: %env_asan_opts=handle_segv=1 not %run %t-NullDerefTest 2>&1 | FileCheck %s --check-prefix=LIBFUZZER_ASAN_SEGV_HANDLER LIBFUZZER_ASAN_SEGV_HANDLER: ERROR: AddressSanitizer: {{SEGV|access-violation}} on unknown address diff --git a/test/fuzzer/gc-sections.test b/test/fuzzer/gc-sections.test index e915c4cc9..415b80c29 100644 --- a/test/fuzzer/gc-sections.test +++ b/test/fuzzer/gc-sections.test @@ -1,4 +1,6 @@ REQUIRES: linux, lld-available +# LLD isn't pruning functions as we expect it to with ASAN on i386. +UNSUPPORTED: i386 No gc-sections: RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t @@ -9,12 +11,4 @@ RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -fuse-ld=lld -ffunction-sections RUN: nm %t | not grep UnusedFunctionShouldBeRemovedByLinker RUN: %run %t -runs=0 2>&1 | FileCheck %s -With gc sections, with trace-pc. Unused code is removed. -RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -fsanitize-coverage=0 -fsanitize-coverage=trace-pc -ffunction-sections -Wl,-gc-sections -RUN: nm %t | not grep UnusedFunctionShouldBeRemovedByLinker - -RUN: %cpp_compiler %S/GcSectionsTest.cpp -o %t -fsanitize-coverage=0 -fsanitize-coverage=trace-pc-guard,pc-table -fuse-ld=lld -ffunction-sections -Wl,-gc-sections -RUN: nm %t | not grep UnusedFunctionShouldBeRemovedByLinker -RUN: %run %t -runs=0 2>&1 | FileCheck %s - CHECK-NOT: ERROR: The size of coverage PC tables does not match diff --git a/test/fuzzer/large.test b/test/fuzzer/large.test new file mode 100644 index 000000000..99ebbbe4e --- /dev/null +++ b/test/fuzzer/large.test @@ -0,0 +1,7 @@ +REQUIRES: linux +RUN: %cpp_compiler %S/LargeTest.cpp -o %t-LargeTest +RUN: %run %t-LargeTest -runs=10000 +RUN: %env_asan_opts=handle_segv=0 %run %t-LargeTest -runs=10000 -lazy_counters=1 2>&1 | FileCheck %s +RUN: %run %t-LargeTest -runs=10000 -lazy_counters=1 2>&1 | FileCheck %s + +CHECK: pages of counters where protected; libFuzzer's SEGV handler must be installed diff --git a/test/fuzzer/len_control.test b/test/fuzzer/len_control.test new file mode 100644 index 000000000..189ad3603 --- /dev/null +++ b/test/fuzzer/len_control.test @@ -0,0 +1,11 @@ +# Tests len_control +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest + +LIM4: DONE{{.*}}lim: 4 +LIM77: DONE{{.*}}lim: 77 +LIM20: DONE{{.*}}lim: 20 +RUN: %run %t-SimpleTest -runs=1 2>&1 | FileCheck %s --check-prefix=LIM4 +RUN: %run %t-SimpleTest -seed_inputs=%t-SimpleTest -max_len=77 -runs=1 2>&1 | FileCheck %s --check-prefix=LIM77 +RUN: echo -n 01234567890123456789 > %t-temp +RUN: %run %t-SimpleTest -seed_inputs=%t-temp -runs=1 2>&1 | FileCheck %s --check-prefix=LIM20 + diff --git a/test/fuzzer/libcxx.test b/test/fuzzer/libcxx.test new file mode 100644 index 000000000..00092b5e2 --- /dev/null +++ b/test/fuzzer/libcxx.test @@ -0,0 +1,16 @@ +# Ensures that the libFuzzer library does not export exceptions. +REQUIRES: linux + +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t +RUN: nm %t 2>&1 | FileCheck %s + +CHECK-NOT: t __cxa_allocate_dependent_exception +CHECK-NOT: t __cxa_allocate_exception +CHECK-NOT: t __cxa_begin_catch +CHECK-NOT: t __cxa_call_unexpected +CHECK-NOT: t __cxa_current_exception_type +CHECK-NOT: t __cxa_end_catch +CHECK-NOT: t __cxa_free_dependent_exception +CHECK-NOT: t __cxa_free_exception +CHECK-NOT: t __cxa_get_exception_ptr +CHECK-NOT: t __cxa_throw diff --git a/test/fuzzer/lit.cfg b/test/fuzzer/lit.cfg index 608991c07..a4d0bc08f 100644 --- a/test/fuzzer/lit.cfg +++ b/test/fuzzer/lit.cfg @@ -6,6 +6,7 @@ config.name = "libFuzzer" + config.name_suffix config.test_format = lit.formats.ShTest(True) config.suffixes = ['.test'] config.test_source_root = os.path.dirname(__file__) +config.available_features.add(config.target_arch) # Choose between lit's internal shell pipeline runner and a real shell. If # LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override. @@ -35,7 +36,8 @@ else: config.available_features.add('lsan') # MemorySanitizer is not supported on OSX or Windows right now -if sys.platform.startswith('darwin') or sys.platform.startswith('win'): +if (sys.platform.startswith('darwin') or sys.platform.startswith('win') or + config.target_arch == 'i386'): lit_config.note('msan feature unavailable') assert 'msan' not in config.available_features else: @@ -63,17 +65,6 @@ config.substitutions.append(('%libfuzzer_src', libfuzzer_src_root)) def generate_compiler_cmd(is_cpp=True, fuzzer_enabled=True, msan_enabled=False): compiler_cmd = config.clang extra_cmd = config.target_flags - if config.clang and config.stdlib == 'libc++': - link_cmd = '-stdlib=libc++ -Wl,-rpath=%s' % config.runtime_library_dir - elif config.clang and config.stdlib == 'static-libc++': - link_cmd = '-stdlib=libc++ -lc++abi -static-libstdc++ -Wl,-rpath=%s' % ( - config.runtime_library_dir) - elif any(x in config.target_triple for x in ('darwin', 'freebsd')): - link_cmd = '-lc++' - elif 'windows-msvc' in config.target_triple: - link_cmd = '' - else: - link_cmd = '-lstdc++' if is_cpp and 'windows-msvc' in config.target_triple: std_cmd = '--driver-mode=cl' @@ -92,7 +83,6 @@ def generate_compiler_cmd(is_cpp=True, fuzzer_enabled=True, msan_enabled=False): return " ".join([ compiler_cmd, std_cmd, - link_cmd, "-O2 -gline-tables-only", sanitizers_cmd, "-I%s" % libfuzzer_src_root, @@ -119,8 +109,12 @@ config.substitutions.append(('%msan_compiler', generate_compiler_cmd(is_cpp=True, fuzzer_enabled=True, msan_enabled=True) )) -if config.host_os == 'Darwin': - if config.target_arch in ["x86_64", "x86_64h"]: - config.parallelism_group = "darwin-64bit-sanitizer" - elif config.apple_platform != "osx" and not config.apple_platform.endswith("sim"): - config.parallelism_group = "darwin-ios-device-sanitizer" +default_asan_opts_str = ':'.join(config.default_sanitizer_opts) +if default_asan_opts_str: + config.environment['ASAN_OPTIONS'] = default_asan_opts_str + default_asan_opts_str += ':' +config.substitutions.append(('%env_asan_opts=', + 'env ASAN_OPTIONS=' + default_asan_opts_str)) + +if not config.parallelism_group: + config.parallelism_group = 'shadow-memory' diff --git a/test/fuzzer/lit.site.cfg.in b/test/fuzzer/lit.site.cfg.in index b333c78e5..e48be2f4c 100644 --- a/test/fuzzer/lit.site.cfg.in +++ b/test/fuzzer/lit.site.cfg.in @@ -11,6 +11,7 @@ config.osx_sysroot_flag = "@OSX_SYSROOT_FLAG@" config.cmake_binary_dir = "@CMAKE_BINARY_DIR@" config.llvm_library_dir = "@LLVM_LIBRARY_DIR@" config.target_triple = "@TARGET_TRIPLE@" +config.target_arch = "@LIBFUZZER_TEST_TARGET_ARCH@" # Load common config for all compiler-rt lit tests. lit_config.load_config(config, diff --git a/test/fuzzer/magic-separator.test b/test/fuzzer/magic-separator.test new file mode 100644 index 000000000..fdffc5f87 --- /dev/null +++ b/test/fuzzer/magic-separator.test @@ -0,0 +1,4 @@ +# Temporary disable this test on non-linux: looks like there is no memmem on windows. +REQUIRES: linux +RUN: %cpp_compiler -O2 %S/MagicSeparatorTest.cpp -o %t-MagicSeparatorTest +RUN: not %run %t-MagicSeparatorTest -use_value_profile=1 -seed=1 -runs=100000000 -max_len=10 diff --git a/test/fuzzer/merge-control-file.test b/test/fuzzer/merge-control-file.test index 60b2a6a62..f269bed0e 100644 --- a/test/fuzzer/merge-control-file.test +++ b/test/fuzzer/merge-control-file.test @@ -12,10 +12,11 @@ RUN: echo ..Z... > %t/T0/3 # Test what happens if the control file is junk. +RUN: rm -f %t/T1/*; cp %t/T0/* %t/T1 RUN: echo JUNK > %t/MCF -RUN: not %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=JUNK +RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=JUNK RUN: echo 3 > %t/MCF; echo 0 >> %t/MCF; echo %t/T1/1 >> %t/MCF -RUN: not %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=JUNK +RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=JUNK JUNK: MERGE-OUTER: non-empty control file provided: {{.*}}MCF JUNK: MERGE-OUTER: bad control file, will overwrite it @@ -30,20 +31,10 @@ OK_0: MERGE-OUTER: 3 new files with {{.*}} new features added RUN: rm -f %t/T1/*; cp %t/T0/* %t/T1 RUN: echo 3 > %t/MCF; echo 0 >> %t/MCF; echo %t/T1/1 >> %t/MCF; echo %t/T1/2 >> %t/MCF; echo %t/T1/3 >> %t/MCF -RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF -save_coverage_summary=%t/SUMMARY 2>&1 | FileCheck %s --check-prefix=SAVE_SUMMARY -SAVE_SUMMARY: MERGE-OUTER: writing coverage summary for 3 files to {{.*}}/SUMMARY - -RUN: rm -f %t/T1/*; cp %t/T0/* %t/T1 -RUN: echo 3 > %t/MCF; echo 0 >> %t/MCF; echo %t/T1/1 >> %t/MCF; echo %t/T1/2 >> %t/MCF; echo %t/T1/3 >> %t/MCF -RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF -load_coverage_summary=%t/SUMMARY 2>&1 | FileCheck %s --check-prefix=LOAD_SUMMARY -LOAD_SUMMARY: MERGE-OUTER: coverage summary loaded from - -RUN: rm -f %t/T1/*; cp %t/T0/* %t/T1 -RUN: echo 3 > %t/MCF; echo 0 >> %t/MCF; echo %t/T1/1 >> %t/MCF; echo %t/T1/2 >> %t/MCF; echo %t/T1/3 >> %t/MCF RUN: echo STARTED 0 1 >> %t/MCF -RUN: echo DONE 0 11 >> %t/MCF +RUN: echo FT 0 11 >> %t/MCF RUN: echo STARTED 1 2 >> %t/MCF -RUN: echo DONE 1 12 >> %t/MCF +RUN: echo FT 1 12 >> %t/MCF RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=OK_2 OK_2: MERGE-OUTER: control file ok, 3 files total, first not processed file 2 OK_2: MERGE-OUTER: 3 new files with {{.*}} new features added @@ -51,10 +42,10 @@ OK_2: MERGE-OUTER: 3 new files with {{.*}} new features added RUN: rm -f %t/T1/*; cp %t/T0/* %t/T1 RUN: echo 3 > %t/MCF; echo 0 >> %t/MCF; echo %t/T1/1 >> %t/MCF; echo %t/T1/2 >> %t/MCF; echo %t/T1/3 >> %t/MCF RUN: echo STARTED 0 1 >> %t/MCF -RUN: echo DONE 0 11 >> %t/MCF +RUN: echo FT 0 11 >> %t/MCF RUN: echo STARTED 1 2 >> %t/MCF -RUN: echo DONE 1 12 >> %t/MCF +RUN: echo FT 1 12 >> %t/MCF RUN: echo STARTED 2 2 >> %t/MCF -RUN: echo DONE 2 13 >> %t/MCF +RUN: echo FT 2 13 >> %t/MCF RUN: %run %t/T.exe -merge=1 %t/T1 %t/T2 -merge_control_file=%t/MCF 2>&1 | FileCheck %s --check-prefix=OK_3 OK_3: MERGE-OUTER: nothing to do, merge has been completed before diff --git a/test/fuzzer/merge-sigusr.test b/test/fuzzer/merge-sigusr.test index 44448ca29..1b16d3ccf 100644 --- a/test/fuzzer/merge-sigusr.test +++ b/test/fuzzer/merge-sigusr.test @@ -22,7 +22,8 @@ RUN: sleep 3 RUN: cat %t/log | FileCheck %s RUN: grep C2/g %t/MCF RUN: grep STARTED %t/MCF -RUN: tail -n 1 %t/MCF | grep DONE +RUN: tail -n 2 %t/MCF | grep FT +RUN: tail -n 1 %t/MCF | grep COV CHECK: INFO: signal received, trying to exit gracefully CHECK: INFO: libFuzzer: exiting as requested diff --git a/test/fuzzer/merge-summary.test b/test/fuzzer/merge-summary.test deleted file mode 100644 index 116cf1db8..000000000 --- a/test/fuzzer/merge-summary.test +++ /dev/null @@ -1,17 +0,0 @@ -RUN: %cpp_compiler %S/FullCoverageSetTest.cpp -o %t-FullCoverageSetTest - -RUN: rm -rf %t/T1 %t/T2 -RUN: mkdir -p %t/T0 %t/T1 %t/T2 -RUN: echo ...Z.. > %t/T2/1 -RUN: echo ....E. > %t/T2/2 -RUN: echo .....R > %t/T2/3 -RUN: echo F..... > %t/T2/a -RUN: echo .U.... > %t/T2/b -RUN: echo ..Z... > %t/T2/c - -RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 -save_coverage_summary=%t/SUMMARY 2>&1 | FileCheck %s --check-prefix=SAVE_SUMMARY -SAVE_SUMMARY: MERGE-OUTER: writing coverage summary for 6 files to {{.*}}SUMMARY -RUN: rm %t/T1/* -RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 -load_coverage_summary=%t/SUMMARY 2>&1 | FileCheck %s --check-prefix=LOAD_SUMMARY -LOAD_SUMMARY: MERGE-OUTER: coverage summary loaded from {{.*}}SUMMAR -LOAD_SUMMARY: MERGE-OUTER: 0 new files with 0 new features added diff --git a/test/fuzzer/merge.test b/test/fuzzer/merge.test index ec41c82b9..c003df282 100644 --- a/test/fuzzer/merge.test +++ b/test/fuzzer/merge.test @@ -1,4 +1,3 @@ -XFAIL: ios CHECK: BINGO RUN: %cpp_compiler %S/FullCoverageSetTest.cpp -o %t-FullCoverageSetTest @@ -45,7 +44,7 @@ RUN: cp %t/T0/* %t/T1/ RUN: rm -f %t/MCF RUN: %run %t-FullCoverageSetTest -merge=1 -merge_control_file=%t/MCF %t/T1 %t/T2 2>&1 | FileCheck %s --check-prefix=MCF RUN: grep STARTED %t/MCF -RUN: grep DONE %t/MCF +RUN: grep FT %t/MCF MCF: MERGE-INNER: using the control file {{.*}}MCF MCF: MERGE-OUTER: 3 new files @@ -66,6 +65,3 @@ RUN: not grep FUZZER %t/T1/* RUN: grep FUZZE %t/T1/* MERGE_LEN5: MERGE-OUTER: succesfull in 1 attempt(s) -RUN: rm -rf %t/T1/* %t/T2/* -RUN: not %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 2>&1 | FileCheck %s --check-prefix=EMPTY -EMPTY: MERGE-OUTER: zero succesfull attempts, exiting diff --git a/test/fuzzer/minimize_crash.test b/test/fuzzer/minimize_crash.test index dcab67bfd..de44b8747 100644 --- a/test/fuzzer/minimize_crash.test +++ b/test/fuzzer/minimize_crash.test @@ -1,4 +1,3 @@ -UNSUPPORTED: windows RUN: %cpp_compiler %S/NullDerefTest.cpp -o %t-NullDerefTest RUN: %cpp_compiler %S/SingleByteInputTest.cpp -o %t-SingleByteInputTest RUN: mkdir -p %t.dir diff --git a/test/fuzzer/minimize_two_crashes.test b/test/fuzzer/minimize_two_crashes.test index cba88eed1..952b9da70 100644 --- a/test/fuzzer/minimize_two_crashes.test +++ b/test/fuzzer/minimize_two_crashes.test @@ -1,12 +1,12 @@ # Test that the minimizer stops when it sees a different bug. -UNSUPPORTED: freebsd,windows +UNSUPPORTED: freebsd # TODO: Find out why test fails on Darwin with -O2. RUN: %cpp_compiler -O0 %S/TwoDifferentBugsTest.cpp -o %t-TwoDifferentBugsTest RUN: rm -rf %t && mkdir %t RUN: echo H12345678901234667888090 > %t/long_crash -RUN: env ASAN_OPTIONS=dedup_token_length=3 %run %t-TwoDifferentBugsTest -seed=1 -minimize_crash=1 %t/long_crash -exact_artifact_path=%t/result 2>&1 | FileCheck %s +RUN: %env_asan_opts=dedup_token_length=3 %run %t-TwoDifferentBugsTest -seed=1 -minimize_crash=1 %t/long_crash -exact_artifact_path=%t/result 2>&1 | FileCheck %s CHECK: DedupToken1: DEDUP_TOKEN: Bar CHECK: DedupToken2: DEDUP_TOKEN: Bar diff --git a/test/fuzzer/null-deref-on-empty.test b/test/fuzzer/null-deref-on-empty.test index d576cc12b..f159a79f4 100644 --- a/test/fuzzer/null-deref-on-empty.test +++ b/test/fuzzer/null-deref-on-empty.test @@ -1,4 +1,3 @@ -UNSUPPORTED: windows RUN: %cpp_compiler %S/NullDerefOnEmptyTest.cpp -o %t-NullDerefOnEmptyTest RUN: not %run %t-NullDerefOnEmptyTest -print_final_stats=1 2>&1 | FileCheck %s --check-prefix=NULL_DEREF_ON_EMPTY diff --git a/test/fuzzer/null-deref.test b/test/fuzzer/null-deref.test index e9926cab4..31eb5990d 100644 --- a/test/fuzzer/null-deref.test +++ b/test/fuzzer/null-deref.test @@ -1,4 +1,3 @@ -UNSUPPORTED: windows RUN: %cpp_compiler %S/NullDerefTest.cpp -o %t-NullDerefTest RUN: not %run %t-NullDerefTest 2>&1 | FileCheck %s --check-prefix=NullDerefTest diff --git a/test/fuzzer/only-some-bytes.test b/test/fuzzer/only-some-bytes.test index 861718384..a783548da 100644 --- a/test/fuzzer/only-some-bytes.test +++ b/test/fuzzer/only-some-bytes.test @@ -1,6 +1,5 @@ # Tests the data flow tracer. -REQUIRES: linux -UNSUPPORTED: aarch64 +REQUIRES: linux, x86_64 # Build the tracer and the test. RUN: %no_fuzzer_cpp_compiler -c -fno-sanitize=all -fsanitize=dataflow %S/../../lib/fuzzer/dataflow/DataFlow.cpp -o %t-DataFlow.o diff --git a/test/fuzzer/reload.test b/test/fuzzer/reload.test new file mode 100644 index 000000000..62321cec3 --- /dev/null +++ b/test/fuzzer/reload.test @@ -0,0 +1,13 @@ +RUN: %cpp_compiler %S/ReloadTest.cpp -o %t-ReloadTest +RUN: not %run %t-ReloadTest -max_len=10000 -seed=1 -timeout=15 -len_control=0 -exact_artifact_path=%t.crash 2>&1 | FileCheck %s + +CHECK: Test unit written to {{.*}}reload.test.tmp.crash + +RUN: not %run %t-ReloadTest %t.crash 2>&1 | FileCheck %s --check-prefix=ARTIFACT + +ARTIFACT: Running: {{.*}}reload.test.tmp.crash +ARTIFACT: ERROR: libFuzzer: deadly signal + +# Sanity check that altered artifact is not going to crash +RUN: echo z >> %t.crash +RUN: %run %t-ReloadTest %t.crash diff --git a/test/fuzzer/seed_inputs.test b/test/fuzzer/seed_inputs.test new file mode 100644 index 000000000..d61e6cf7a --- /dev/null +++ b/test/fuzzer/seed_inputs.test @@ -0,0 +1,24 @@ +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest + +USE-1: INFO: seed corpus: files: 1 +RUN: echo -n "%t-SimpleTest" > %t.seed-inputs +# Test both formats of -seed_inputs argument. +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=@%t.seed-inputs 2>&1 | FileCheck %s --check-prefix=USE-1 +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=%t-SimpleTest 2>&1 | FileCheck %s --check-prefix=USE-1 + +USE-2: INFO: seed corpus: files: 2 +RUN: echo -n "%t-SimpleTest,%t-SimpleTest" > %t.seed-inputs +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=@%t.seed-inputs 2>&1 | FileCheck %s --check-prefix=USE-2 +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=%t-SimpleTest,%t-SimpleTest 2>&1 | FileCheck %s --check-prefix=USE-2 + +# Test that missing files and trailing commas are tolerated. +RUN: echo -n "%t-SimpleTest,%t-SimpleTest,nonexistent-file," > %t.seed-inputs +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=@%t.seed-inputs 2>&1 | FileCheck %s --check-prefix=USE-2 +RUN: %run %t-SimpleTest -runs=1 -seed_inputs=%t-SimpleTest,%t-SimpleTest,nonexistent-file, 2>&1 | FileCheck %s --check-prefix=USE-2 + +# Test that using a non existent file or an empty seed list fails. +EMPTY: seed_inputs is empty or @file does not exist. +RUN: not %run %t-SimpleTest -runs=1 -seed_inputs=@nonexistent-file 2>&1 | FileCheck %s --check-prefix=EMPTY +RUN: echo -n "" > %t.seed-inputs +RUN: not %run %t-SimpleTest -runs=1 -seed_inputs=@%t.seed-inputs 2>&1 | FileCheck %s --check-prefix=EMPTY +RUN: not %run %t-SimpleTest -runs=1 -seed_inputs= 2>&1 | FileCheck %s --check-prefix=EMPTY diff --git a/test/fuzzer/sigint.test b/test/fuzzer/sigint.test new file mode 100644 index 000000000..e9834482b --- /dev/null +++ b/test/fuzzer/sigint.test @@ -0,0 +1,15 @@ +REQUIRES: msan + +# Check that libFuzzer exits gracefully under SIGINT with MSan. +RUN: rm -rf %t +RUN: mkdir -p %t +RUN: %msan_compiler %S/SleepOneSecondTest.cpp -o %t/LFSIGINT + +RUN: %run %t/LFSIGINT 2> %t/log & export PID=$! +RUN: sleep 2 +RUN: kill -SIGINT $PID +RUN: sleep 3 +RUN: cat %t/log | FileCheck %s + +CHECK: libFuzzer: run interrupted; exiting +CHECK-NOT: WARNING: MemorySanitizer diff --git a/test/fuzzer/simple.test b/test/fuzzer/simple.test index 97a09be7c..054afdb85 100644 --- a/test/fuzzer/simple.test +++ b/test/fuzzer/simple.test @@ -1,7 +1,7 @@ CHECK: BINGO RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest -RUN: not %run %t-SimpleTest 2>&1 | FileCheck %s +RUN: not %run %t-SimpleTest 2>&1 | FileCheck %s # only_ascii mode. Will perform some minimal self-validation. RUN: not %run %t-SimpleTest -only_ascii=1 2>&1 diff --git a/test/fuzzer/strncmp-oob.test b/test/fuzzer/strncmp-oob.test index a0365d961..3d1f19789 100644 --- a/test/fuzzer/strncmp-oob.test +++ b/test/fuzzer/strncmp-oob.test @@ -1,6 +1,6 @@ RUN: %cpp_compiler %S/StrncmpOOBTest.cpp -o %t-StrncmpOOBTest -RUN: env ASAN_OPTIONS=strict_string_checks=1 not %run %t-StrncmpOOBTest -seed=1 -runs=1000000 2>&1 | FileCheck %s --check-prefix=STRNCMP +RUN: %env_asan_opts=strict_string_checks=1 not %run %t-StrncmpOOBTest -seed=1 -runs=1000000 2>&1 | FileCheck %s --check-prefix=STRNCMP STRNCMP: AddressSanitizer: heap-buffer-overflow STRNCMP-NOT: __sanitizer_weak_hook_strncmp STRNCMP: in LLVMFuzzerTestOneInput diff --git a/test/fuzzer/three-bytes.test b/test/fuzzer/three-bytes.test index 0b2187552..923a51ecb 100644 --- a/test/fuzzer/three-bytes.test +++ b/test/fuzzer/three-bytes.test @@ -2,7 +2,6 @@ Tests -use_value_profile=2 (alternative VP metric). RUN: %cpp_compiler %S/ThreeBytes.cpp -o %t RUN: %run %t -seed=1 -runs=30000 -RUN: %run %t -seed=1 -runs=30000 -use_value_profile=1 RUN: not %run %t -seed=1 -runs=1000000 -use_value_profile=2 2>&1 | FileCheck %s CHECK: Test unit written diff --git a/test/fuzzer/trace-malloc-threaded.test b/test/fuzzer/trace-malloc-threaded.test index f38005c1d..a2dfb3809 100644 --- a/test/fuzzer/trace-malloc-threaded.test +++ b/test/fuzzer/trace-malloc-threaded.test @@ -7,32 +7,32 @@ RUN: %cpp_compiler %S/TraceMallocThreadedTest.cpp -o \ RUN: %t-TraceMallocThreadedTest RUN: %run %t-TraceMallocThreadedTest -trace_malloc=2 -runs=1 2>&1 | FileCheck %s -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} +CHECK: {{MALLOC\[[0-9]+] +0x[0-9a-f]+ 5639}} CHECK-NEXT: {{ +\#0 +}} CHECK-NEXT: {{ +\#1 +}} CHECK-NEXT: {{ +\#2 +}} diff --git a/test/fuzzer/trace-pc.test b/test/fuzzer/trace-pc.test deleted file mode 100644 index 30049331e..000000000 --- a/test/fuzzer/trace-pc.test +++ /dev/null @@ -1,3 +0,0 @@ -RUN: %cpp_compiler %S/SimpleTest.cpp -fsanitize-coverage=0 -fsanitize-coverage=trace-pc -o %t-SimpleTest-TracePC -CHECK: BINGO -RUN: not %run %t-SimpleTest-TracePC -runs=1000000 -seed=1 2>&1 | FileCheck %s diff --git a/test/fuzzer/value-profile-cmp.test b/test/fuzzer/value-profile-cmp.test index 8f6ffe99c..f15a5f5a1 100644 --- a/test/fuzzer/value-profile-cmp.test +++ b/test/fuzzer/value-profile-cmp.test @@ -1,5 +1,4 @@ -# FIXME: Disabled on Windows because of hangs. -UNSUPPORTED: windows, ios +UNSUPPORTED: ios CHECK: BINGO RUN: %cpp_compiler %S/SimpleCmpTest.cpp -o %t-SimpleCmpTest RUN: not %run %t-SimpleCmpTest -seed=1 -use_cmp=0 -use_value_profile=1 -runs=100000000 2>&1 | FileCheck %s diff --git a/test/fuzzer/value-profile-cmp2.test b/test/fuzzer/value-profile-cmp2.test index 5935ed6d1..3e4705b45 100644 --- a/test/fuzzer/value-profile-cmp2.test +++ b/test/fuzzer/value-profile-cmp2.test @@ -1,4 +1,6 @@ UNSUPPORTED: ios +FIXME: Make libFuzzer handle exits without ASan properly on Windows. +UNSUPPORTED: windows CHECK: BINGO RUN: %cpp_compiler -fno-sanitize=address %S/SimpleHashTest.cpp -o %t-SimpleHashTest RUN: not %run %t-SimpleHashTest -seed=1 -use_cmp=0 -use_value_profile=1 -runs=100000000 -max_len=64 2>&1 | FileCheck %s diff --git a/test/fuzzer/value-profile-cmp4.test b/test/fuzzer/value-profile-cmp4.test index e5ac29f81..05bc3f435 100644 --- a/test/fuzzer/value-profile-cmp4.test +++ b/test/fuzzer/value-profile-cmp4.test @@ -1,5 +1,3 @@ -# FIXME: Disabled on Windows because of hangs. -UNSUPPORTED: windows CHECK: BINGO RUN: %cpp_compiler %S/AbsNegAndConstant64Test.cpp -o %t-AbsNegAndConstant64Test RUN: not %run %t-AbsNegAndConstant64Test -seed=1 -use_cmp=0 -use_value_profile=1 -runs=100000000 2>&1 | FileCheck %s diff --git a/test/fuzzer/value-profile-load.test b/test/fuzzer/value-profile-load.test index b6baf1320..607b81cd5 100644 --- a/test/fuzzer/value-profile-load.test +++ b/test/fuzzer/value-profile-load.test @@ -1,5 +1,3 @@ -# FIXME: Disabled on Windows because of hangs. -UNSUPPORTED: windows CHECK: AddressSanitizer: global-buffer-overflow RUN: %cpp_compiler %S/LoadTest.cpp -fsanitize-coverage=trace-gep -o %t-LoadTest RUN: not %run %t-LoadTest -seed=2 -use_cmp=0 -use_value_profile=1 -runs=20000000 2>&1 | FileCheck %s diff --git a/test/fuzzer/value-profile-switch.test b/test/fuzzer/value-profile-switch.test index a71682d79..05a9ca7ec 100644 --- a/test/fuzzer/value-profile-switch.test +++ b/test/fuzzer/value-profile-switch.test @@ -2,5 +2,7 @@ UNSUPPORTED: ios CHECK: BINGO RUN: %cpp_compiler %S/SwitchTest.cpp -o %t-SwitchTest RUN: %cpp_compiler %S/Switch2Test.cpp -o %t-Switch2Test +RUN: %cpp_compiler %S/Switch3Test.cpp -o %t-Switch3Test RUN: not %run %t-SwitchTest -use_cmp=0 -use_value_profile=1 -runs=100000000 -seed=1 2>&1 | FileCheck %s RUN: not %run %t-Switch2Test -use_cmp=0 -use_value_profile=1 -runs=100000000 -seed=1 2>&1 | FileCheck %s +RUN: not %run %t-Switch3Test -use_cmp=0 -use_value_profile=1 -runs=100000000 -seed=1 2>&1 diff --git a/test/hwasan/TestCases/Linux/decorate-proc-maps.c b/test/hwasan/TestCases/Linux/decorate-proc-maps.c new file mode 100644 index 000000000..8d5824091 --- /dev/null +++ b/test/hwasan/TestCases/Linux/decorate-proc-maps.c @@ -0,0 +1,59 @@ +// RUN: %clang_hwasan -g %s -o %t +// RUN: %env_hwasan_opts=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=A +// RUN: %env_hwasan_opts=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=B + +// A: rw-p {{.*}}hwasan threads] +// A-NEXT: ---p {{.*}}shadow gap] +// A-NEXT: rw-p {{.*}}low shadow] +// A-NEXT: ---p {{.*}}shadow gap] +// A-NEXT: rw-p {{.*}}high shadow] + +// B-DAG: rw-p {{.*}}SizeClassAllocator: region data] +// B-DAG: rw-p {{.*}}SizeClassAllocator: region metadata] +// B-DAG: rw-p {{.*}}SizeClassAllocator: freearray] +// B-DAG: rw-p {{.*}}SizeClassAllocator: region info] +// B-DAG: rw-p {{.*}}LargeMmapAllocator] +// B-DAG: rw-p {{.*}}stack depot] + +#include <errno.h> +#include <fcntl.h> +#include <pthread.h> +#include <stdio.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <pthread.h> +#include <stdlib.h> + +void CopyFdToFd(int in_fd, int out_fd) { + const size_t kBufSize = 0x10000; + static char buf[kBufSize]; + while (1) { + ssize_t got = read(in_fd, buf, kBufSize); + if (got > 0) { + write(out_fd, buf, got); + } else if (got == 0) { + break; + } else if (errno != EAGAIN || errno != EWOULDBLOCK || errno != EINTR) { + fprintf(stderr, "error reading file, errno %d\n", errno); + abort(); + } + } +} + +void *ThreadFn(void *arg) { + (void)arg; + int fd = open("/proc/self/maps", O_RDONLY); + CopyFdToFd(fd, 2); + close(fd); + return NULL; +} + +int main(void) { + pthread_t t; + void * volatile res = malloc(100); + void * volatile res2 = malloc(100000); + pthread_create(&t, 0, ThreadFn, 0); + pthread_join(t, 0); + return (int)(size_t)res; +} diff --git a/test/hwasan/TestCases/Linux/release-shadow.c b/test/hwasan/TestCases/Linux/release-shadow.c new file mode 100644 index 000000000..9aae35063 --- /dev/null +++ b/test/hwasan/TestCases/Linux/release-shadow.c @@ -0,0 +1,70 @@ +// Test that tagging a large region to 0 reduces RSS. +// RUN: %clang_hwasan -mllvm -hwasan-instrument-stack=0 %s -o %t && %run %t 2>&1 + +#include <assert.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> + +#include <sanitizer/hwasan_interface.h> + +const unsigned char kTag = 42; +const size_t kNumShadowPages = 256; +const size_t kNumPages = 16 * kNumShadowPages; +const size_t kPageSize = 4096; +const size_t kMapSize = kNumPages * kPageSize; + +void sync_rss() { + char *page = (char *)mmap(0, kPageSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + // Linux kernel updates RSS counters after a set number of page faults. + for (int i = 0; i < 1000; ++i) { + page[0] = 42; + madvise(page, kPageSize, MADV_DONTNEED); + } + munmap(page, kPageSize); +} + +size_t current_rss() { + sync_rss(); + int statm_fd = open("/proc/self/statm", O_RDONLY); + assert(statm_fd >= 0); + + char buf[100]; + assert(read(statm_fd, &buf, sizeof(buf)) > 0); + size_t size, rss; + assert(sscanf(buf, "%zu %zu", &size, &rss) == 2); + + close(statm_fd); + return rss; +} + +void test_rss_difference(void *p) { + __hwasan_tag_memory(p, kTag, kMapSize); + size_t rss_before = current_rss(); + __hwasan_tag_memory(p, 0, kMapSize); + size_t rss_after = current_rss(); + fprintf(stderr, "%zu -> %zu\n", rss_before, rss_after); + assert(rss_before > rss_after); + size_t diff = rss_before - rss_after; + fprintf(stderr, "diff %zu\n", diff); + // Check that the difference is at least close to kNumShadowPages. + assert(diff > kNumShadowPages / 4 * 3); +} + +int main() { + fprintf(stderr, "starting rss %zu\n", current_rss()); + fprintf(stderr, "shadow pages: %zu\n", kNumShadowPages); + + void *p = mmap(0, kMapSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + fprintf(stderr, "p = %p\n", p); + + test_rss_difference(p); + test_rss_difference(p); + test_rss_difference(p); + + return 0; +} diff --git a/test/hwasan/TestCases/Linux/vfork.c b/test/hwasan/TestCases/Linux/vfork.c new file mode 100644 index 000000000..84e960279 --- /dev/null +++ b/test/hwasan/TestCases/Linux/vfork.c @@ -0,0 +1,32 @@ +// https://github.com/google/sanitizers/issues/925 +// RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1 + +// REQUIRES: aarch64-target-arch || x86_64-target-arch + +#include <assert.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> +#include <stdio.h> +#include <sanitizer/hwasan_interface.h> + +__attribute__((noinline, no_sanitize("hwaddress"))) void child() { + char x[10000]; + __hwasan_tag_memory(x, 0xAA, sizeof(x)); + _exit(0); +} + +__attribute__((noinline, no_sanitize("hwaddress"))) void parent() { + char x[10000]; + __hwasan_print_shadow(&x, sizeof(x)); + assert(__hwasan_test_shadow(x, sizeof(x)) == -1); +} + +int main(int argc, char **argv) { + if (vfork()) + parent(); + else + child(); + + return 0; +} diff --git a/test/hwasan/TestCases/malloc_bisect.c b/test/hwasan/TestCases/malloc_bisect.c new file mode 100644 index 000000000..51cbbfe2a --- /dev/null +++ b/test/hwasan/TestCases/malloc_bisect.c @@ -0,0 +1,26 @@ +// RUN: %clang_hwasan -O0 %s -o %t +// RUN: %env_hwasan_opts=malloc_bisect_left=0,malloc_bisect_right=0 not %run %t 2>&1 | \ +// RUN: FileCheck %s --check-prefix=CRASH +// RUN: %env_hwasan_opts=malloc_bisect_left=1000,malloc_bisect_right=999 %run %t 2>&1 +// RUN: %env_hwasan_opts=malloc_bisect_left=0,malloc_bisect_right=4294967295 not %run %t 2>&1 | \ +// RUN: FileCheck %s --check-prefix=CRASH +// RUN: %env_hwasan_opts=malloc_bisect_left=0,malloc_bisect_right=4294967295,malloc_bisect_dump=1 not %run %t 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CRASH,DUMP + +#include <stdlib.h> +#include <stdio.h> +#include <sanitizer/hwasan_interface.h> + +int main() { + __hwasan_enable_allocator_tagging(); + // DUMP: [alloc] {{.*}} 10{{$}} + // DUMP: in main{{.*}}malloc_bisect.c + char * volatile p = (char*)malloc(10); + // CRASH: HWAddressSanitizer: tag-mismatch on address + // CRASH: in main{{.*}}malloc_bisect.c + char volatile x = p[16]; + free(p); + __hwasan_disable_allocator_tagging(); + + return 0; +} diff --git a/test/hwasan/TestCases/mem-intrinsics.c b/test/hwasan/TestCases/mem-intrinsics.c index 164bc6d93..c35d5790e 100644 --- a/test/hwasan/TestCases/mem-intrinsics.c +++ b/test/hwasan/TestCases/mem-intrinsics.c @@ -10,8 +10,8 @@ #include <unistd.h> int main() { - char Q[16]; - char P[16]; + char Q[16] __attribute__((aligned(256))); + char P[16] __attribute__((aligned(256))); #if TEST_NO == 1 memset(Q, 0, 32); #elif TEST_NO == 2 @@ -21,15 +21,17 @@ int main() { #endif write(STDOUT_FILENO, "recovered\n", 10); // WRITE: ERROR: HWAddressSanitizer: tag-mismatch on address - // WRITE: WRITE {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem) + // WRITE: WRITE of size 32 at {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem) + // WRITE: Invalid access starting at offset [16, 32) // WRITE: Memory tags around the buggy address (one tag corresponds to 16 bytes): - // WRITE: =>{{.*}}[[MEM_TAG]] + // WRITE: =>{{.*}}[[PTR_TAG]]{{[[:space:]]\[}}[[MEM_TAG]] // WRITE-NOT: recovered // READ: ERROR: HWAddressSanitizer: tag-mismatch on address + // READ-NOT: Invalid access starting at offset // READ: READ {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem) // READ: Memory tags around the buggy address (one tag corresponds to 16 bytes): - // READ: =>{{.*}}[[MEM_TAG]] + // READ: =>{{.*}}[[PTR_TAG]]{{[[:space:]]\[}}[[MEM_TAG]] // READ-NOT: recovered // RECOVER: recovered diff --git a/test/hwasan/TestCases/print-module-map.c b/test/hwasan/TestCases/print-module-map.c new file mode 100644 index 000000000..bb94aa116 --- /dev/null +++ b/test/hwasan/TestCases/print-module-map.c @@ -0,0 +1,32 @@ +// RUN: %clang_hwasan %s -o %t && %env_hwasan_opts=print_module_map=1 %run %t 2>&1 | FileCheck %s --check-prefixes=EXIT,NOMORE +// RUN: %clang_hwasan %s -DBUG -o %t && %env_hwasan_opts=print_module_map=1 not %run %t 2>&1 | FileCheck %s --check-prefixes=EXIT,NOMORE +// RUN: %clang_hwasan %s -DBUG -fsanitize-recover=hwaddress -o %t && %env_hwasan_opts=print_module_map=1,halt_on_error=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=EXIT,NOMORE +// RUN: %clang_hwasan %s -DBUG -fsanitize-recover=hwaddress -o %t && %env_hwasan_opts=print_module_map=2,halt_on_error=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=BUG1,BUG2,EXIT,NOMORE + +#include <stdlib.h> +#include <stdio.h> +#include <sanitizer/hwasan_interface.h> + +int main() { + __hwasan_enable_allocator_tagging(); +#ifdef BUG + char * volatile x = (char*)malloc(40); + free(x); + free(x); + free(x); +#endif + __hwasan_disable_allocator_tagging(); + // BUG1: Process memory map follows: + // BUG1: print-module-map + // BUG1: End of process memory map. + + // BUG2: Process memory map follows: + // BUG2: print-module-map + // BUG2: End of process memory map. + + // EXIT: Process memory map follows: + // EXIT: print-module-map + // EXIT: End of process memory map. + + // NOMORE-NOT: Process memory map follows: +} diff --git a/test/hwasan/TestCases/realloc-test.cc b/test/hwasan/TestCases/realloc-test.cc index 838790242..136346f57 100644 --- a/test/hwasan/TestCases/realloc-test.cc +++ b/test/hwasan/TestCases/realloc-test.cc @@ -1,36 +1,43 @@ // Test basic realloc functionality. -// RUN: %clang_hwasan %s -o %t -// RUN: %run %t +// RUN: %clang_hwasan %s -o %t && %run %t +// RUN: %clang_hwasan %s -DREALLOCARRAY -o %t && %run %t -#include <stdlib.h> #include <assert.h> #include <sanitizer/hwasan_interface.h> +#ifdef REALLOCARRAY +extern "C" void *reallocarray(void *, size_t nmemb, size_t size); +#define REALLOC(p, s) reallocarray(p, 1, s) +#else +#include <stdlib.h> +#define REALLOC(p, s) realloc(p, s) +#endif + int main() { __hwasan_enable_allocator_tagging(); - char *x = (char*)realloc(nullptr, 4); + char *x = (char*)REALLOC(nullptr, 4); x[0] = 10; x[1] = 20; x[2] = 30; x[3] = 40; - char *x1 = (char*)realloc(x, 5); + char *x1 = (char*)REALLOC(x, 5); assert(x1 != x); // not necessary true for C, // but true today for hwasan. assert(x1[0] == 10 && x1[1] == 20 && x1[2] == 30 && x1[3] == 40); x1[4] = 50; - char *x2 = (char*)realloc(x1, 6); + char *x2 = (char*)REALLOC(x1, 6); x2[5] = 60; assert(x2 != x1); assert(x2[0] == 10 && x2[1] == 20 && x2[2] == 30 && x2[3] == 40 && x2[4] == 50 && x2[5] == 60); - char *x3 = (char*)realloc(x2, 6); + char *x3 = (char*)REALLOC(x2, 6); assert(x3 != x2); assert(x3[0] == 10 && x3[1] == 20 && x3[2] == 30 && x3[3] == 40 && x3[4] == 50 && x3[5] == 60); - char *x4 = (char*)realloc(x3, 5); + char *x4 = (char*)REALLOC(x3, 5); assert(x4 != x3); assert(x4[0] == 10 && x4[1] == 20 && x4[2] == 30 && x4[3] == 40 && x4[4] == 50); diff --git a/test/hwasan/TestCases/register-dump-no-fp.cc b/test/hwasan/TestCases/register-dump-no-fp.cc new file mode 100644 index 000000000..1a14cab0a --- /dev/null +++ b/test/hwasan/TestCases/register-dump-no-fp.cc @@ -0,0 +1,28 @@ +// RUN: %clangxx_hwasan -fomit-frame-pointer -momit-leaf-frame-pointer \ +// RUN: -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clangxx_hwasan -fomit-frame-pointer -momit-leaf-frame-pointer \ +// RUN: -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clangxx_hwasan -fomit-frame-pointer -momit-leaf-frame-pointer \ +// RUN: -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clangxx_hwasan -fomit-frame-pointer -momit-leaf-frame-pointer \ +// RUN: -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK + +// This test ensures that the CFA is implemented properly for slow +// (non-frame-pointer) unwinding. +#include <sanitizer/hwasan_interface.h> +#include <stdio.h> +#include <stdlib.h> + +__attribute__((noinline)) void f(int *p) { *p = 3; } + +// CHECK: ERROR: HWAddressSanitizer: +// CHECK: #0 {{.*}} in f(int*) {{.*}}register-dump-no-fp.cc:[[@LINE-3]] + +int main() { + __hwasan_enable_allocator_tagging(); + + int *volatile a = new int; + a = (int *)__hwasan_tag_pointer(a, 0); + f(a); + // CHECK: #1 {{.*}} in main {{.*}}register-dump-no-fp.cc:[[@LINE-1]] +} diff --git a/test/hwasan/TestCases/register-dump-read.c b/test/hwasan/TestCases/register-dump-read.c new file mode 100644 index 000000000..19bf03f5d --- /dev/null +++ b/test/hwasan/TestCases/register-dump-read.c @@ -0,0 +1,43 @@ +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// REQUIRES: aarch64-target-arch + +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O2 %s -o %t && not %env_hwasan_opts=fast_unwind_on_fatal=true %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_hwasan -ffixed-x10 -ffixed-x20 -ffixed-x27 -O2 %s -o %t && not %env_hwasan_opts=fast_unwind_on_fatal=false %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK + +#include <stdlib.h> +#include <stdio.h> +#include <sanitizer/hwasan_interface.h> + +int main() { + __hwasan_enable_allocator_tagging(); + char * volatile x = (char*) malloc(10); + asm volatile("mov x10, #0x2222\n" + "mov x20, #0x3333\n" + "mov x27, #0x4444\n"); + return x[16]; + + // CHECK: ERROR: HWAddressSanitizer: + // CHECK: #0 {{.*}} in main {{.*}}register-dump-read.c:[[@LINE-3]] + + // Developer note: FileCheck really doesn't like when you have a regex that + // ends with a '}' character, e.g. the regex "[0-9]{10}" will fail, because + // the closing '}' fails as an "unbalanced regex". We work around this by + // encasing the trailing space after a register, or the end-of-line specifier. + + // CHECK: Registers where the failure occurred + // CHECK-NEXT: x0{{[ ]+[0-9a-f]{16}[ ]}}x1{{[ ]+[0-9a-f]{16}[ ]}}x2{{[ ]+[0-9a-f]{16}[ ]}}x3{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x4{{[ ]+[0-9a-f]{16}[ ]}}x5{{[ ]+[0-9a-f]{16}[ ]}}x6{{[ ]+[0-9a-f]{16}[ ]}}x7{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x8{{[ ]+[0-9a-f]{16}[ ]}}x9{{[ ]+[0-9a-f]{16}[ ]}} + // CHECK-SAME: x10 0000000000002222 + // CHECK-SAME: x11{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x12{{[ ]+[0-9a-f]{16}[ ]}}x13{{[ ]+[0-9a-f]{16}[ ]}}x14{{[ ]+[0-9a-f]{16}[ ]}}x15{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x16{{[ ]+[0-9a-f]{16}[ ]}}x17{{[ ]+[0-9a-f]{16}[ ]}}x18{{[ ]+[0-9a-f]{16}[ ]}}x19{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x20 0000000000003333 + // CHECK-SAME: x21{{[ ]+[0-9a-f]{16}[ ]}}x22{{[ ]+[0-9a-f]{16}[ ]}}x23{{[ ]+[0-9a-f]{16}$}} + // CHECK-NEXT: x24{{[ ]+[0-9a-f]{16}[ ]}}x25{{[ ]+[0-9a-f]{16}[ ]}}x26{{[ ]+[0-9a-f]{16}[ ]}} + // CHECK-SAME: x27 0000000000004444 + // CHECK-NEXT: x28{{[ ]+[0-9a-f]{16}[ ]}}x29{{[ ]+[0-9a-f]{16}[ ]}}x30{{[ ]+[0-9a-f]{16}$}} +} diff --git a/test/hwasan/TestCases/sanitizer_malloc.cc b/test/hwasan/TestCases/sanitizer_malloc.cc index 66ac9641e..cf1dc0741 100644 --- a/test/hwasan/TestCases/sanitizer_malloc.cc +++ b/test/hwasan/TestCases/sanitizer_malloc.cc @@ -20,6 +20,7 @@ int main() { sink = (void *)&__sanitizer_malloc_stats; sink = (void *)&__sanitizer_calloc; sink = (void *)&__sanitizer_realloc; + sink = (void *)&__sanitizer_reallocarray; sink = (void *)&__sanitizer_malloc; // sanity check diff --git a/test/hwasan/TestCases/sizes.cpp b/test/hwasan/TestCases/sizes.cpp index 52217de74..102a85f17 100644 --- a/test/hwasan/TestCases/sizes.cpp +++ b/test/hwasan/TestCases/sizes.cpp @@ -1,10 +1,14 @@ -// RUN: %clangxx_hwasan %s -lstdc++ -o %t +// This test requires operator new to be intercepted by the hwasan runtime, +// so we need to avoid linking against libc++. +// RUN: %clangxx_hwasan %s -nostdlib++ -lstdc++ -o %t // RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-max // RUN: %env_hwasan_opts=allocator_may_return_null=1 %run %t malloc 2>&1 // RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t malloc max 2>&1 | FileCheck %s --check-prefix=CHECK-max // RUN: %env_hwasan_opts=allocator_may_return_null=1 %run %t malloc max 2>&1 // RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-calloc // RUN: %env_hwasan_opts=allocator_may_return_null=1 %run %t calloc 2>&1 +// RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t reallocarray 2>&1 | FileCheck %s --check-prefix=CHECK-reallocarray +// RUN: %env_hwasan_opts=allocator_may_return_null=1 %run %t reallocarray 2>&1 // RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t new 2>&1 | FileCheck %s --check-prefix=CHECK-max // RUN: %env_hwasan_opts=allocator_may_return_null=1 not %run %t new 2>&1 | FileCheck %s --check-prefix=CHECK-oom // RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t new max 2>&1 | FileCheck %s --check-prefix=CHECK-max @@ -28,6 +32,7 @@ #include <new> #include <sanitizer/allocator_interface.h> +#include <sanitizer/hwasan_interface.h> int main(int argc, char **argv) { assert(argc <= 3); @@ -49,6 +54,11 @@ int main(int argc, char **argv) { size_t size = std::numeric_limits<size_t>::max(); void *p = calloc((size / 0x1000) + 1, 0x1000); assert(!p); + } else if (!strcmp(argv[1], "reallocarray")) { + // Trigger an overflow in reallocarray. + size_t size = std::numeric_limits<size_t>::max(); + void *p = __sanitizer_reallocarray(nullptr, (size / 0x1000) + 1, 0x1000); + assert(!p); } else if (!strcmp(argv[1], "new")) { void *p = operator new(MallocSize); assert(!p); @@ -78,3 +88,4 @@ int main(int argc, char **argv) { // CHECK-max: {{ERROR: HWAddressSanitizer: requested allocation size .* exceeds maximum supported size}} // CHECK-oom: ERROR: HWAddressSanitizer: allocator is out of memory // CHECK-calloc: ERROR: HWAddressSanitizer: calloc parameters overflow +// CHECK-reallocarray: ERROR: HWAddressSanitizer: reallocarray parameters overflow diff --git a/test/hwasan/TestCases/stack-uar.c b/test/hwasan/TestCases/stack-uar.c index 863a84017..8b308a511 100644 --- a/test/hwasan/TestCases/stack-uar.c +++ b/test/hwasan/TestCases/stack-uar.c @@ -1,5 +1,6 @@ // Tests use-after-return detection and reporting. // RUN: %clang_hwasan -O0 -fno-discard-value-names %s -o %t && not %run %t 2>&1 | FileCheck %s +// RUN: %clang_hwasan -O0 -fno-discard-value-names %s -o %t && not %env_hwasan_opts=symbolize=0 %run %t 2>&1 | FileCheck %s --check-prefix=NOSYM // REQUIRES: stable-runtime @@ -37,5 +38,9 @@ int main() { // CHECK: buggy // CHECK: 4096 zzz + // NOSYM: Previously allocated frames: + // NOSYM-NEXT: sp: 0x{{.*}} #0 0x{{.*}} ({{.*}}/stack-uar.c.tmp+0x{{.*}}){{$}} + // NOSYM-NEXT: 16 CCC; + // CHECK: SUMMARY: HWAddressSanitizer: tag-mismatch {{.*}} in main } diff --git a/test/hwasan/TestCases/tag_in_free.c b/test/hwasan/TestCases/tag_in_free.c new file mode 100644 index 000000000..51e8d015d --- /dev/null +++ b/test/hwasan/TestCases/tag_in_free.c @@ -0,0 +1,51 @@ +// RUN: %clang_hwasan -O0 %s -DMALLOC -DFREE -o %t.mf +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=1 not %run %t.mf 2>&1 | FileCheck %s --check-prefixes=FREE +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=1 not %run %t.mf 2>&1 | FileCheck %s --check-prefixes=MALLOC +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=0 not %run %t.mf 2>&1 | FileCheck %s --check-prefixes=MALLOC +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=0 %run %t.mf 2>&1 + +// RUN: %clang_hwasan -O0 %s -DFREE -o %t.f +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=1 not %run %t.f 2>&1 | FileCheck %s --check-prefixes=FREE +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=1 not %run %t.f 2>&1 | FileCheck %s --check-prefixes=FREE +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=0 %run %t.f 2>&1 +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=0 %run %t.f 2>&1 + +// RUN: %clang_hwasan -O0 %s -DMALLOC -o %t.m +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=1 %run %t.m 2>&1 +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=1 not %run %t.m 2>&1 | FileCheck %s --check-prefixes=MALLOC +// RUN: %env_hwasan_opts=tag_in_malloc=1,tag_in_free=0 not %run %t.m 2>&1 | FileCheck %s --check-prefixes=MALLOC +// RUN: %env_hwasan_opts=tag_in_malloc=0,tag_in_free=0 %run %t.m 2>&1 + +#include <stdlib.h> +#include <stdio.h> +#include <sanitizer/hwasan_interface.h> + +int main() { + __hwasan_enable_allocator_tagging(); + // Loop for a while to make sure that the memory for the test below is reused after an earlier free(), + // and is potentially tagged (when tag_in_free == 1). + for (int i = 0; i < 100; ++i) { + char * volatile p = (char*)malloc(10); + free(p); + } + + char * volatile p = (char*)malloc(10); +#ifdef MALLOC + // MALLOC: READ of size 1 at + // MALLOC: is located 6 bytes to the right of 10-byte region + // MALLOC: allocated here: + char volatile x = p[16]; +#endif + free(p); +#ifdef FREE + // FREE: READ of size 1 at + // FREE: is located 0 bytes inside of 10-byte region + // FREE: freed by thread T0 here: + // FREE: previously allocated here: + char volatile y = p[0]; +#endif + + __hwasan_disable_allocator_tagging(); + + return 0; +} diff --git a/test/hwasan/TestCases/use-after-free.c b/test/hwasan/TestCases/use-after-free.c index 03a1771c1..269985740 100644 --- a/test/hwasan/TestCases/use-after-free.c +++ b/test/hwasan/TestCases/use-after-free.c @@ -27,11 +27,11 @@ int main() { // CHECK: is located 5 bytes inside of 10-byte region // // CHECK: freed by thread {{.*}} here: - // CHECK: #0 {{.*}} in {{.*}}free{{.*}} {{.*}}hwasan_interceptors.cc + // CHECK: #0 {{.*}} in {{.*}}free{{.*}} {{.*}}hwasan_interceptors.cpp // CHECK: #1 {{.*}} in main {{.*}}use-after-free.c:[[@LINE-14]] // CHECK: previously allocated here: - // CHECK: #0 {{.*}} in {{.*}}malloc{{.*}} {{.*}}hwasan_interceptors.cc + // CHECK: #0 {{.*}} in {{.*}}malloc{{.*}} {{.*}}hwasan_interceptors.cpp // CHECK: #1 {{.*}} in main {{.*}}use-after-free.c:[[@LINE-19]] // CHECK: Memory tags around the buggy address (one tag corresponds to 16 bytes): // CHECK: =>{{.*}}[[MEM_TAG]] diff --git a/test/lit.common.cfg b/test/lit.common.cfg index f06658ff2..0432325c6 100644 --- a/test/lit.common.cfg +++ b/test/lit.common.cfg @@ -60,7 +60,12 @@ if config.asan_shadow_scale != '': if config.android: # Prepend the flag so that it can be overridden. config.target_cflags = "-pie -fuse-ld=gold " + config.target_cflags - config.cxx_mode_flags.append('-stdlib=libstdc++') + if config.android_ndk_version < 19: + # With a new compiler and NDK < r19 this flag ends up meaning "link against + # libc++", but NDK r19 makes this mean "link against the stub libstdc++ that + # just contains a handful of ABI functions", which makes most C++ code fail + # to link. In r19 and later we just use the default which is libc++. + config.cxx_mode_flags.append('-stdlib=libstdc++') # Clear some environment variables that might affect Clang. possibly_dangerous_env_vars = ['ASAN_OPTIONS', 'DFSAN_OPTIONS', 'LSAN_OPTIONS', @@ -98,6 +103,9 @@ config.available_features.add(config.host_os.lower()) if re.match(r'^x86_64.*-linux', config.target_triple): config.available_features.add("x86_64-linux") +if config.have_zlib == "1": + config.available_features.add("zlib") + # Use ugly construction to explicitly prohibit "clang", "clang++" etc. # in RUN lines. config.substitutions.append( @@ -214,6 +222,10 @@ compiler_rt_debug = getattr(config, 'compiler_rt_debug', False) if not compiler_rt_debug: config.available_features.add('compiler-rt-optimized') +libdispatch = getattr(config, 'compiler_rt_intercept_libdispatch', False) +if libdispatch: + config.available_features.add('libdispatch') + sanitizer_can_use_cxxabi = getattr(config, 'sanitizer_can_use_cxxabi', True) if sanitizer_can_use_cxxabi: config.available_features.add('cxxabi') @@ -380,8 +392,9 @@ try: [os.path.join(config.llvm_tools_dir, 'llvm-config'), '--assertion-mode'], stdout = subprocess.PIPE, env=config.environment) -except OSError: - print("Could not find llvm-config in " + config.llvm_tools_dir) +except OSError as e: + print("Could not launch llvm-config in " + config.llvm_tools_dir) + print(" Failed with error #{0}: {1}".format(e.errno, e.strerror)) exit(42) if re.search(r'ON', llvm_config_cmd.stdout.read().decode('ascii')): @@ -393,18 +406,23 @@ llvm_config_cmd.wait() if platform.system() == 'Windows': config.test_retry_attempts = 2 -# Only run up to 3 64-bit sanitized processes simultaneously on Darwin. -# Using more scales badly and hogs the system due to inefficient handling -# of large mmap'd regions (terabytes) by the kernel. +# No throttling on non-Darwin platforms. +lit_config.parallelism_groups['shadow-memory'] = None + if platform.system() == 'Darwin': - lit_config.parallelism_groups["darwin-64bit-sanitizer"] = 3 - -# The current implementation of the tools in sanitizer_common/ios_comamnds -# do not support parallel execution so force sequential execution of the -# tests on iOS devices. -if config.host_os == 'Darwin' and config.apple_platform != "osx" and not config.apple_platform.endswith("sim"): - lit_config.warning("iOS device test cases being run sequentially") - lit_config.parallelism_groups["darwin-ios-device-sanitizer"] = 1 + ios_device = config.apple_platform != 'osx' and not config.apple_platform.endswith('sim') + # Force sequential execution when running tests on iOS devices. + if ios_device: + lit_config.warning('Forcing sequential execution for iOS device tests') + lit_config.parallelism_groups['ios-device'] = 1 + config.parallelism_group = 'ios-device' + + # Only run up to 3 processes that require shadow memory simultaneously on + # 64-bit Darwin. Using more scales badly and hogs the system due to + # inefficient handling of large mmap'd regions (terabytes) by the kernel. + elif config.target_arch in ['x86_64', 'x86_64h']: + lit_config.warning('Throttling sanitizer tests that require shadow memory on Darwin 64bit') + lit_config.parallelism_groups['shadow-memory'] = 3 # Multiple substitutions are necessary to support multiple shared objects used # at once. diff --git a/test/lit.common.configured.in b/test/lit.common.configured.in index 4994ca69b..3514760d0 100644 --- a/test/lit.common.configured.in +++ b/test/lit.common.configured.in @@ -24,6 +24,7 @@ set_default("clang", "@COMPILER_RT_RESOLVED_TEST_COMPILER@") set_default("compiler_id", "@COMPILER_RT_TEST_COMPILER_ID@") set_default("python_executable", "@PYTHON_EXECUTABLE@") set_default("compiler_rt_debug", @COMPILER_RT_DEBUG_PYBOOL@) +set_default("compiler_rt_intercept_libdispatch", @COMPILER_RT_INTERCEPT_LIBDISPATCH_PYBOOL@) set_default("compiler_rt_libdir", "@COMPILER_RT_RESOLVED_LIBRARY_OUTPUT_DIR@") set_default("emulator", "@COMPILER_RT_EMULATOR@") set_default("asan_shadow_scale", "@COMPILER_RT_ASAN_SHADOW_SCALE@") @@ -36,6 +37,7 @@ set_default("use_thinlto", False) set_default("use_lto", config.use_thinlto) set_default("use_newpm", False) set_default("android", @ANDROID_PYBOOL@) +set_default("android_ndk_version", @ANDROID_NDK_VERSION@) set_default("android_serial", "@ANDROID_SERIAL_FOR_TESTING@") set_default("android_files_to_push", []) set_default("have_rpc_xdr_h", @HAVE_RPC_XDR_H@) @@ -46,6 +48,9 @@ if config.enable_per_target_runtime_dir: else: set_default("target_suffix", "-%s" % config.target_arch) +set_default("have_zlib", "@HAVE_LIBZ@") +set_default("libcxx_used", "@LLVM_LIBCXX_USED@") + # LLVM tools dir can be passed in lit parameters, so try to # apply substitution. try: diff --git a/test/lsan/TestCases/swapcontext.cc b/test/lsan/TestCases/swapcontext.cc index 9774f6ce4..afce8d9fe 100644 --- a/test/lsan/TestCases/swapcontext.cc +++ b/test/lsan/TestCases/swapcontext.cc @@ -6,13 +6,8 @@ // RUN: %env_lsan_opts= not %run %t foo 2>&1 | FileCheck %s // UNSUPPORTED: arm,powerpc64 +#include "sanitizer_common/sanitizer_ucontext.h" #include <stdio.h> -#if defined(__APPLE__) -// Note: ucontext.h is deprecated on OSX, so this test may stop working -// someday. We define _XOPEN_SOURCE to keep using ucontext.h for now. -#define _XOPEN_SOURCE 1 -#endif -#include <ucontext.h> #include <unistd.h> const int kStackSize = 1 << 20; diff --git a/test/msan/CMakeLists.txt b/test/msan/CMakeLists.txt index 7919a6cd2..c6408c1ed 100644 --- a/test/msan/CMakeLists.txt +++ b/test/msan/CMakeLists.txt @@ -43,7 +43,9 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) list(APPEND MSAN_TEST_DEPS msan) endif() -if(COMPILER_RT_INCLUDE_TESTS AND COMPILER_RT_LIBCXX_PATH) +if(COMPILER_RT_INCLUDE_TESTS AND + COMPILER_RT_LIBCXX_PATH AND + COMPILER_RT_LIBCXXABI_PATH) configure_lit_site_cfg( ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg) diff --git a/test/msan/Linux/bzero.cc b/test/msan/Linux/bzero.cc new file mode 100644 index 000000000..cb319a6cf --- /dev/null +++ b/test/msan/Linux/bzero.cc @@ -0,0 +1,16 @@ +// RUN: %clangxx_msan -O0 %s -o %t && %run %t + +// REQUIRES: !android + +#include <assert.h> +#include <strings.h> +#include <sanitizer/msan_interface.h> + +int main(int argc, char *argv[]) { + char buf[100]; + assert(0 == __msan_test_shadow(buf, sizeof(buf))); + // *& to suppress bzero-to-memset optimization. + (*&bzero)(buf, 50); + assert(50 == __msan_test_shadow(buf, sizeof(buf))); + return 0; +} diff --git a/test/msan/Linux/forkpty.cc b/test/msan/Linux/forkpty.cc index c9f04376f..c5f09f0b8 100644 --- a/test/msan/Linux/forkpty.cc +++ b/test/msan/Linux/forkpty.cc @@ -10,16 +10,19 @@ int main (int argc, char** argv) { - int master, slave; - openpty(&master, &slave, NULL, NULL, NULL); - assert(__msan_test_shadow(&master, sizeof(master)) == -1); - assert(__msan_test_shadow(&slave, sizeof(slave)) == -1); + int parent, worker; + openpty(&parent, &worker, NULL, NULL, NULL); + assert(__msan_test_shadow(&parent, sizeof(parent)) == -1); + assert(__msan_test_shadow(&worker, sizeof(worker)) == -1); - char ttyname[255]; - ttyname_r(master, ttyname, sizeof(ttyname)); - assert(__msan_test_shadow(ttyname, strlen(ttyname) + 1) == -1); + char name[255]; + ttyname_r(parent, name, sizeof(name)); + assert(__msan_test_shadow(name, strlen(name) + 1) == -1); - int master2; - forkpty(&master2, NULL, NULL, NULL); - assert(__msan_test_shadow(&master2, sizeof(master2)) == -1); + char *name_p = ttyname(parent); + assert(__msan_test_shadow(name_p, strlen(name_p) + 1) == -1); + + int parent2; + forkpty(&parent2, NULL, NULL, NULL); + assert(__msan_test_shadow(&parent2, sizeof(parent2)) == -1); } diff --git a/test/msan/Linux/name_to_handle_at.cc b/test/msan/Linux/name_to_handle_at.cc index 0ff8d982f..a8bc75fa2 100644 --- a/test/msan/Linux/name_to_handle_at.cc +++ b/test/msan/Linux/name_to_handle_at.cc @@ -14,7 +14,7 @@ int main(void) { handle->handle_bytes = MAX_HANDLE_SZ; int mount_id; - int res = name_to_handle_at(AT_FDCWD, "/bin/cat", handle, &mount_id, 0); + int res = name_to_handle_at(AT_FDCWD, "/dev/null", handle, &mount_id, 0); assert(!res); __msan_check_mem_is_initialized(&mount_id, sizeof(mount_id)); __msan_check_mem_is_initialized(&handle->handle_bytes, diff --git a/test/msan/memcmp_test.cc b/test/msan/memcmp_test.cc index 5ade58a60..42230cc4d 100644 --- a/test/msan/memcmp_test.cc +++ b/test/msan/memcmp_test.cc @@ -13,6 +13,6 @@ int main(int argc, char **argv) { if (!res) printf("equals"); return 0; - // CHECK: Uninitialized bytes in __interceptor_memcmp at offset 3 + // CHECK: Uninitialized bytes in MemcmpInterceptorCommon at offset 3 // CHECK: MemorySanitizer: use-of-uninitialized-value } diff --git a/test/msan/scoped-interceptors.cc b/test/msan/scoped-interceptors.cc index fc7d45784..5eff33d6b 100644 --- a/test/msan/scoped-interceptors.cc +++ b/test/msan/scoped-interceptors.cc @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { case '2': { int cmp = memcmp(uninit, uninit, sizeof(uninit)); // BOOM break; - // CASE-2: Uninitialized bytes in __interceptor_memcmp + // CASE-2: Uninitialized bytes in MemcmpInterceptorCommon } case '3': { size_t len = strlen(uninit); // BOOM diff --git a/test/profile/Inputs/instrprof-gcov-__gcov_flush-multiple.c.gcov b/test/profile/Inputs/instrprof-gcov-__gcov_flush-multiple.c.gcov index f2141229b..837554516 100644 --- a/test/profile/Inputs/instrprof-gcov-__gcov_flush-multiple.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-__gcov_flush-multiple.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-__gcov_flush-multiple.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-__gcov_flush-multiple.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-__gcov_flush-multiple.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-__gcov_flush-multiple.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-__gcov_flush-terminate.c.gcov b/test/profile/Inputs/instrprof-gcov-__gcov_flush-terminate.c.gcov index 69e229a31..1e3a56bd9 100644 --- a/test/profile/Inputs/instrprof-gcov-__gcov_flush-terminate.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-__gcov_flush-terminate.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-__gcov_flush-terminate.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-__gcov_flush-terminate.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-__gcov_flush-terminate.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-__gcov_flush-terminate.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-exceptions.cpp.gcov b/test/profile/Inputs/instrprof-gcov-exceptions.cpp.gcov index f8e382974..aa202763f 100644 --- a/test/profile/Inputs/instrprof-gcov-exceptions.cpp.gcov +++ b/test/profile/Inputs/instrprof-gcov-exceptions.cpp.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-exceptions.cpp +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-exceptions.cpp // CHECK-NEXT: -: 0:Graph:instrprof-gcov-exceptions.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-exceptions.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-execlp.c.gcov b/test/profile/Inputs/instrprof-gcov-execlp.c.gcov index 7542f6ff7..810046aac 100644 --- a/test/profile/Inputs/instrprof-gcov-execlp.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-execlp.c.gcov @@ -1,4 +1,4 @@ -//CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-execlp.c +//CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-execlp.c //CHECK-NEXT: -: 0:Graph:instrprof-gcov-execlp.gcno //CHECK-NEXT: -: 0:Data:instrprof-gcov-execlp.gcda //CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-execvp.c.gcov b/test/profile/Inputs/instrprof-gcov-execvp.c.gcov index 37cd1e59a..e896cb891 100644 --- a/test/profile/Inputs/instrprof-gcov-execvp.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-execvp.c.gcov @@ -1,4 +1,4 @@ -//CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-execvp.c +//CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-execvp.c //CHECK-NEXT: -: 0:Graph:instrprof-gcov-execvp.gcno //CHECK-NEXT: -: 0:Data:instrprof-gcov-execvp.gcda //CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-fork.c.gcov b/test/profile/Inputs/instrprof-gcov-fork.c.gcov index c667c7b9e..2825bd580 100644 --- a/test/profile/Inputs/instrprof-gcov-fork.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-fork.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-fork.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-fork.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-fork.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-fork.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-multiple-bbs-single-line.c.gcov b/test/profile/Inputs/instrprof-gcov-multiple-bbs-single-line.c.gcov index 4bc1c1cd5..d1104b7f5 100644 --- a/test/profile/Inputs/instrprof-gcov-multiple-bbs-single-line.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-multiple-bbs-single-line.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-multiple-bbs-single-line.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-multiple-bbs-single-line.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-multiple-bbs-single-line.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-multiple-bbs-single-line.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-one-line-function.c.gcov b/test/profile/Inputs/instrprof-gcov-one-line-function.c.gcov index a91b20fdc..5a570a047 100644 --- a/test/profile/Inputs/instrprof-gcov-one-line-function.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-one-line-function.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-one-line-function.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-one-line-function.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-one-line-function.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-one-line-function.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-switch1.c.gcov b/test/profile/Inputs/instrprof-gcov-switch1.c.gcov index 6e9c5228b..741dff599 100644 --- a/test/profile/Inputs/instrprof-gcov-switch1.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-switch1.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-switch1.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-switch1.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-switch1.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-switch1.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-gcov-switch2.c.gcov b/test/profile/Inputs/instrprof-gcov-switch2.c.gcov index 47d7f1d7c..c931365dd 100644 --- a/test/profile/Inputs/instrprof-gcov-switch2.c.gcov +++ b/test/profile/Inputs/instrprof-gcov-switch2.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-gcov-switch2.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-gcov-switch2.c // CHECK-NEXT: -: 0:Graph:instrprof-gcov-switch2.gcno // CHECK-NEXT: -: 0:Data:instrprof-gcov-switch2.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-order-file-2.c b/test/profile/Inputs/instrprof-order-file-2.c new file mode 100644 index 000000000..ee4485756 --- /dev/null +++ b/test/profile/Inputs/instrprof-order-file-2.c @@ -0,0 +1,7 @@ +__attribute__((noinline)) int f(int a) { + return a + 1; +} + +__attribute__((noinline)) int g(int a) { + return a + 2; +} diff --git a/test/profile/Inputs/instrprof-order-file.c b/test/profile/Inputs/instrprof-order-file.c new file mode 100644 index 000000000..9251a8e25 --- /dev/null +++ b/test/profile/Inputs/instrprof-order-file.c @@ -0,0 +1,17 @@ +void __llvm_profile_initialize_file(void); +int __llvm_orderfile_dump(void); + +__attribute__((noinline)) int f(int a); + +__attribute__((noinline)) int g(int a); + +int main(int argc, const char *argv[]) { + int a = f(argc); + int t = 0; + for (int i = 0; i < argc; i++) + t += g(a); + f(t); + __llvm_profile_initialize_file(); + __llvm_orderfile_dump(); + return 0; +} diff --git a/test/profile/Inputs/instrprof-shared-lib.c.gcov b/test/profile/Inputs/instrprof-shared-lib.c.gcov index 620a85257..7e6d741d5 100644 --- a/test/profile/Inputs/instrprof-shared-lib.c.gcov +++ b/test/profile/Inputs/instrprof-shared-lib.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-lib.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-lib.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-lib.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-lib.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-lib_called-twice.c.gcov b/test/profile/Inputs/instrprof-shared-lib_called-twice.c.gcov index 39b32b8c0..993c6cc50 100644 --- a/test/profile/Inputs/instrprof-shared-lib_called-twice.c.gcov +++ b/test/profile/Inputs/instrprof-shared-lib_called-twice.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-lib.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-lib.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-lib.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-lib.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-lib_in-loop.c.gcov b/test/profile/Inputs/instrprof-shared-lib_in-loop.c.gcov index 0fc7ccbab..693504713 100644 --- a/test/profile/Inputs/instrprof-shared-lib_in-loop.c.gcov +++ b/test/profile/Inputs/instrprof-shared-lib_in-loop.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-lib.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-lib.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-lib.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-lib.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov b/test/profile/Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov index 6027c64af..82a489158 100644 --- a/test/profile/Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov +++ b/test/profile/Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-main-gcov-flush.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-main-gcov-flush.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-main-gcov-flush.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-main-gcov-flush.gcda // CHECK-NEXT: -: 0:Runs:1 @@ -38,4 +38,4 @@ // CHECK-NEXT: -: 33: bar(5); // CHECK-NEXT: -: 34: // CHECK-NEXT: -: 35: return 0; -// CHECK-NEXT: #####: 36:} +// CHECK-NEXT: -: 36:} diff --git a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov index fba3f3fe2..5cc26580b 100644 --- a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov +++ b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-main-gcov-flush.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-main-gcov-flush.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-main-gcov-flush.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-main-gcov-flush.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov index 86beda22a..7a6800c47 100644 --- a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov +++ b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-main-gcov-flush.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-main-gcov-flush.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-main-gcov-flush.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-main-gcov-flush.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov index 2e55741cc..49995fdc8 100644 --- a/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov +++ b/test/profile/Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-main-gcov-flush.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-main-gcov-flush.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-main-gcov-flush.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-main-gcov-flush.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-shared-main.c.gcov b/test/profile/Inputs/instrprof-shared-main.c.gcov index 05cd4e31d..a31a60238 100644 --- a/test/profile/Inputs/instrprof-shared-main.c.gcov +++ b/test/profile/Inputs/instrprof-shared-main.c.gcov @@ -1,4 +1,4 @@ -// CHECK: -: 0:Source:{{.*}}Inputs/instrprof-shared-main.c +// CHECK: -: 0:Source:{{.*}}Inputs{{[/\\]}}instrprof-shared-main.c // CHECK-NEXT: -: 0:Graph:instrprof-shared-main.gcno // CHECK-NEXT: -: 0:Data:instrprof-shared-main.gcda // CHECK-NEXT: -: 0:Runs:1 diff --git a/test/profile/Inputs/instrprof-value-prof-visibility.c b/test/profile/Inputs/instrprof-value-prof-visibility.c new file mode 100644 index 000000000..e691a2d95 --- /dev/null +++ b/test/profile/Inputs/instrprof-value-prof-visibility.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef DLOPEN_FUNC_DIR +#include <dlfcn.h> +#endif + +int __llvm_profile_runtime = 0; +int __llvm_profile_write_file(); +void __llvm_profile_reset_counters(void); +void __llvm_profile_initialize_file(void); +struct __llvm_profile_data; +struct ValueProfData; +void lprofMergeValueProfData(struct ValueProfData *, struct __llvm_profile_data *); +/* Force the vp merger module to be linked in. */ +void *Dummy = &lprofMergeValueProfData; + +void callee1() {} +void callee2() {} + +typedef void (*FP)(void); +FP Fps[2] = {callee1, callee2}; + +int main(int argc, char *argv[]) { + __llvm_profile_initialize_file(); + __llvm_profile_write_file(); + __llvm_profile_reset_counters(); + +#ifdef DLOPEN_FUNC_DIR + void *Handle = dlopen(DLOPEN_FUNC_DIR "/func.shared", RTLD_NOW); + if (!Handle) { + fprintf(stderr, "unable to open '" DLOPEN_FUNC_DIR "/func.shared': %s\n", + dlerror()); + return EXIT_FAILURE; + } + + // This tests that lprofMergeValueProfData is not accessed + // from outside a module + void (*SymHandle)(struct ValueProfData *, struct __llvm_profile_data *) = + (void (*)(struct ValueProfData *, struct __llvm_profile_data *))dlsym( + Handle, "lprofMergeValueProfData"); + if (SymHandle) { + fprintf(stderr, + "should not be able to lookup symbol 'lprofMergeValueProfData': %s\n", + dlerror()); + return EXIT_FAILURE; + } + + dlclose(Handle); + +#endif + + Fps[0](); + Fps[1](); + + __llvm_profile_write_file(); + __llvm_profile_reset_counters(); + + return EXIT_SUCCESS; +} diff --git a/test/profile/Linux/counter_promo_for.c b/test/profile/Linux/counter_promo_for.c index a331f00ad..0efebdc95 100644 --- a/test/profile/Linux/counter_promo_for.c +++ b/test/profile/Linux/counter_promo_for.c @@ -6,8 +6,8 @@ // RUN: %run %t.promo.gen // RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/ // RUN: llvm-profdata show --counts --all-functions %t.promo.profdata > %t.promo.dump -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s // RUN: %run %t.nopromo.gen // RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/ diff --git a/test/profile/Linux/counter_promo_while.c b/test/profile/Linux/counter_promo_while.c index b4d4e7aa2..183ef8543 100644 --- a/test/profile/Linux/counter_promo_while.c +++ b/test/profile/Linux/counter_promo_while.c @@ -6,8 +6,8 @@ // RUN: %run %t.promo.gen // RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/ // RUN: llvm-profdata show --counts --all-functions %t.promo.profdata > %t.promo.dump -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s -// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen -O2 %s +// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -mllvm -simplifycfg-sink-common=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s // RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s // RUN: %run %t.nopromo.gen // RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/ diff --git a/test/profile/Linux/instrprof-value-prof-visibility.test b/test/profile/Linux/instrprof-value-prof-visibility.test new file mode 100644 index 000000000..5b64a94a2 --- /dev/null +++ b/test/profile/Linux/instrprof-value-prof-visibility.test @@ -0,0 +1,6 @@ +# This tests that lprofMergeValueProfData is not accessed from outside a module +RUN: mkdir -p %t.d +RUN: %clang_profgen -o %t.d/func.shared -fPIC -shared -fuse-ld=gold -mllvm --enable-value-profiling=true %S/../Inputs/instrprof-value-prof-visibility.c -fdata-sections -ffunction-sections -fuse-ld=gold -Wl,--gc-sections +RUN: %clang_profgen -o %t.d/main -fuse-ld=gold -mllvm --enable-value-profiling=true -DDLOPEN_FUNC_DIR=\"%t.d\" %S/../Inputs/instrprof-value-prof-visibility.c -fdata-sections -ffunction-sections -fuse-ld=gold -Wl,--gc-sections +RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.d/main + diff --git a/test/profile/Inputs/instrprof-visibility-helper.cpp b/test/profile/Posix/Inputs/instrprof-visibility-helper.cpp index 6d3bc69b3..6d3bc69b3 100644 --- a/test/profile/Inputs/instrprof-visibility-helper.cpp +++ b/test/profile/Posix/Inputs/instrprof-visibility-helper.cpp diff --git a/test/profile/instrprof-dlopen-dlclose-gcov.test b/test/profile/Posix/instrprof-dlopen-dlclose-gcov.test index 36b5dbd26..b845303a8 100644 --- a/test/profile/instrprof-dlopen-dlclose-gcov.test +++ b/test/profile/Posix/instrprof-dlopen-dlclose-gcov.test @@ -4,30 +4,30 @@ XFAIL: netbsd RUN: mkdir -p %t.d RUN: cd %t.d -RUN: %clang --coverage -o func.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func.c -RUN: %clang --coverage -o func2.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func2.c -RUN: %clang --coverage -o func3.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func3.c -RUN: %clang --coverage -o %t -fPIC -rpath %t.d %S/Inputs/instrprof-dlopen-dlclose-main.c +RUN: %clang --coverage -o func.shared -fPIC -shared %S/../Inputs/instrprof-dlopen-func.c +RUN: %clang --coverage -o func2.shared -fPIC -shared %S/../Inputs/instrprof-dlopen-func2.c +RUN: %clang --coverage -o func3.shared -fPIC -shared %S/../Inputs/instrprof-dlopen-func3.c +RUN: %clang --coverage -o %t -fPIC -rpath %t.d %S/../Inputs/instrprof-dlopen-dlclose-main.c # Test with two dlopened libraries. RUN: rm -f instrprof-dlopen-dlclose-main.gcda instrprof-dlopen-func.gcda instrprof-dlopen-func2.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-dlopen-dlclose-main.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-dlclose-main.c.gcov %S/Inputs/instrprof-dlopen-dlclose-main.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-dlclose-main.c.gcov %S/../Inputs/instrprof-dlopen-dlclose-main.c.gcov RUN: llvm-cov gcov instrprof-dlopen-func.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func.c.gcov %S/Inputs/instrprof-dlopen-func.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func.c.gcov %S/../Inputs/instrprof-dlopen-func.c.gcov RUN: llvm-cov gcov instrprof-dlopen-func2.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/Inputs/instrprof-dlopen-func2.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/../Inputs/instrprof-dlopen-func2.c.gcov # Test with three dlopened libraries. -RUN: %clang -DUSE_LIB3 --coverage -o %t -fPIC -rpath %t.d %S/Inputs/instrprof-dlopen-dlclose-main.c +RUN: %clang -DUSE_LIB3 --coverage -o %t -fPIC -rpath %t.d %S/../Inputs/instrprof-dlopen-dlclose-main.c RUN: rm -f instrprof-dlopen-dlclose-main.gcda instrprof-dlopen-func.gcda instrprof-dlopen-func2.gcda instrprof-dlopen-func3.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-dlopen-dlclose-main.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-dlclose-main.c.gcov %S/Inputs/instrprof-dlopen-dlclose-main_three-libs.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-dlclose-main.c.gcov %S/../Inputs/instrprof-dlopen-dlclose-main_three-libs.c.gcov RUN: llvm-cov gcov instrprof-dlopen-func.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func.c.gcov %S/Inputs/instrprof-dlopen-func.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func.c.gcov %S/../Inputs/instrprof-dlopen-func.c.gcov RUN: llvm-cov gcov instrprof-dlopen-func2.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/Inputs/instrprof-dlopen-func2.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/../Inputs/instrprof-dlopen-func2.c.gcov RUN: llvm-cov gcov instrprof-dlopen-func3.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/Inputs/instrprof-dlopen-func3.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-dlopen-func2.c.gcov %S/../Inputs/instrprof-dlopen-func3.c.gcov diff --git a/test/profile/instrprof-dlopen.test b/test/profile/Posix/instrprof-dlopen.test index ba386e347..d84ed748e 100644 --- a/test/profile/instrprof-dlopen.test +++ b/test/profile/Posix/instrprof-dlopen.test @@ -1,11 +1,11 @@ RUN: mkdir -p %t.d -RUN: %clang_profgen -o %t.d/func.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func.c -RUN: %clang_profgen -o %t.d/func2.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func2.c -RUN: %clang -o %t-local -fPIC -DDLOPEN_FUNC_DIR=\"%t.d\" -DDLOPEN_FLAGS="RTLD_LAZY | RTLD_LOCAL" %S/Inputs/instrprof-dlopen-main.c -RUN: %clang -o %t-global -fPIC -DDLOPEN_FUNC_DIR=\"%t.d\" -DDLOPEN_FLAGS="RTLD_LAZY | RTLD_GLOBAL" %S/Inputs/instrprof-dlopen-main.c +RUN: %clang_profgen -o %t.d/func.shared -fPIC -shared %S/../Inputs/instrprof-dlopen-func.c +RUN: %clang_profgen -o %t.d/func2.shared -fPIC -shared %S/../Inputs/instrprof-dlopen-func2.c +RUN: %clang -o %t-local -fPIC -DDLOPEN_FUNC_DIR=\"%t.d\" -DDLOPEN_FLAGS="RTLD_LAZY | RTLD_LOCAL" %S/../Inputs/instrprof-dlopen-main.c +RUN: %clang -o %t-global -fPIC -DDLOPEN_FUNC_DIR=\"%t.d\" -DDLOPEN_FLAGS="RTLD_LAZY | RTLD_GLOBAL" %S/../Inputs/instrprof-dlopen-main.c -RUN: %clang -c -o %t.d/main.o %S/Inputs/instrprof-dlopen-main.c -RUN: %clang_profgen -o %t-static %S/Inputs/instrprof-dlopen-func.c %S/Inputs/instrprof-dlopen-func2.c %t.d/main.o +RUN: %clang -c -o %t.d/main.o %S/../Inputs/instrprof-dlopen-main.c +RUN: %clang_profgen -o %t-static %S/../Inputs/instrprof-dlopen-func.c %S/../Inputs/instrprof-dlopen-func2.c %t.d/main.o RUN: env LLVM_PROFILE_FILE=%t-static.profraw %run %t-static RUN: env LLVM_PROFILE_FILE=%t-local.profraw %run %t-local @@ -15,20 +15,20 @@ RUN: llvm-profdata merge -o %t-static.profdata %t-static.profraw RUN: llvm-profdata merge -o %t-local.profdata %t-local.profraw RUN: llvm-profdata merge -o %t-global.profdata %t-global.profraw -RUN: %clang_profuse=%t-static.profdata -o %t-func.static.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func.c -RUN: %clang_profuse=%t-local.profdata -o %t-func.local.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func.c -RUN: %clang_profuse=%t-global.profdata -o %t-func.global.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func.c +RUN: %clang_profuse=%t-static.profdata -o %t-func.static.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func.c +RUN: %clang_profuse=%t-local.profdata -o %t-func.local.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func.c +RUN: %clang_profuse=%t-global.profdata -o %t-func.global.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func.c RUN: diff %t-func.static.ll %t-func.local.ll RUN: diff %t-func.static.ll %t-func.global.ll -RUN: %clang_profuse=%t-static.profdata -o %t-func2.static.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func2.c -RUN: %clang_profuse=%t-local.profdata -o %t-func2.local.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func2.c -RUN: %clang_profuse=%t-global.profdata -o %t-func2.global.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-func2.c +RUN: %clang_profuse=%t-static.profdata -o %t-func2.static.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func2.c +RUN: %clang_profuse=%t-local.profdata -o %t-func2.local.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func2.c +RUN: %clang_profuse=%t-global.profdata -o %t-func2.global.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-func2.c RUN: diff %t-func2.static.ll %t-func2.local.ll RUN: diff %t-func2.static.ll %t-func2.global.ll -RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-main.c -RUN: %clang_profuse=%t-local.profdata -o %t-main.local.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-main.c -RUN: %clang_profuse=%t-local.profdata -o %t-main.global.ll -S -emit-llvm %S/Inputs/instrprof-dlopen-main.c +RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-main.c +RUN: %clang_profuse=%t-local.profdata -o %t-main.local.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-main.c +RUN: %clang_profuse=%t-local.profdata -o %t-main.global.ll -S -emit-llvm %S/../Inputs/instrprof-dlopen-main.c RUN: diff %t-main.static.ll %t-main.local.ll RUN: diff %t-main.static.ll %t-main.global.ll diff --git a/test/profile/instrprof-dynamic-one-shared.test b/test/profile/Posix/instrprof-dynamic-one-shared.test index 38be4fe8b..16ae64f47 100644 --- a/test/profile/instrprof-dynamic-one-shared.test +++ b/test/profile/Posix/instrprof-dynamic-one-shared.test @@ -1,8 +1,8 @@ RUN: mkdir -p %t.d -RUN: %clang_profgen -o %t.d/a.shared -fPIC -shared %S/Inputs/instrprof-dynamic-a.cpp -RUN: %clang_profgen -o %t-shared -fPIC -rpath %t.d %t.d/a.shared %S/Inputs/instrprof-dynamic-b.cpp %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profgen -o %t.d/a.shared -fPIC -shared %S/../Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profgen -o %t-shared -fPIC -rpath %t.d %t.d/a.shared %S/../Inputs/instrprof-dynamic-b.cpp %S/../Inputs/instrprof-dynamic-main.cpp -RUN: %clang_profgen -o %t-static %S/Inputs/instrprof-dynamic-a.cpp %S/Inputs/instrprof-dynamic-b.cpp %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profgen -o %t-static %S/../Inputs/instrprof-dynamic-a.cpp %S/../Inputs/instrprof-dynamic-b.cpp %S/../Inputs/instrprof-dynamic-main.cpp RUN: env LLVM_PROFILE_FILE=%t-static.profraw %run %t-static RUN: env LLVM_PROFILE_FILE=%t-shared.profraw %run %t-shared @@ -10,14 +10,14 @@ RUN: env LLVM_PROFILE_FILE=%t-shared.profraw %run %t-shared RUN: llvm-profdata merge -o %t-static.profdata %t-static.profraw RUN: llvm-profdata merge -o %t-shared.profdata %t-shared.profraw -RUN: %clang_profuse=%t-static.profdata -o %t-a.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-a.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-a.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-a.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-a.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-a.cpp RUN: diff %t-a.static.ll %t-a.shared.ll -RUN: %clang_profuse=%t-static.profdata -o %t-b.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-b.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-b.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-b.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-b.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-b.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-b.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-b.cpp RUN: diff %t-b.static.ll %t-b.shared.ll -RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-main.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-main.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-main.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-main.cpp RUN: diff %t-main.static.ll %t-main.shared.ll diff --git a/test/profile/instrprof-dynamic-two-shared.test b/test/profile/Posix/instrprof-dynamic-two-shared.test index 830359dec..dd7bacc8a 100644 --- a/test/profile/instrprof-dynamic-two-shared.test +++ b/test/profile/Posix/instrprof-dynamic-two-shared.test @@ -1,9 +1,9 @@ RUN: mkdir -p %t.d -RUN: %clang_profgen -o %t.d/a.shared -fPIC -shared %S/Inputs/instrprof-dynamic-a.cpp -RUN: %clang_profgen -o %t.d/b.shared -fPIC -shared %S/Inputs/instrprof-dynamic-b.cpp -RUN: %clang_profgen -o %t-shared -fPIC -rpath %t.d %t.d/a.shared %t.d/b.shared %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profgen -o %t.d/a.shared -fPIC -shared %S/../Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profgen -o %t.d/b.shared -fPIC -shared %S/../Inputs/instrprof-dynamic-b.cpp +RUN: %clang_profgen -o %t-shared -fPIC -rpath %t.d %t.d/a.shared %t.d/b.shared %S/../Inputs/instrprof-dynamic-main.cpp -RUN: %clang_profgen -o %t-static %S/Inputs/instrprof-dynamic-a.cpp %S/Inputs/instrprof-dynamic-b.cpp %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profgen -o %t-static %S/../Inputs/instrprof-dynamic-a.cpp %S/../Inputs/instrprof-dynamic-b.cpp %S/../Inputs/instrprof-dynamic-main.cpp RUN: env LLVM_PROFILE_FILE=%t-static.profraw %run %t-static RUN: env LLVM_PROFILE_FILE=%t-shared.profraw %run %t-shared @@ -11,14 +11,14 @@ RUN: env LLVM_PROFILE_FILE=%t-shared.profraw %run %t-shared RUN: llvm-profdata merge -o %t-static.profdata %t-static.profraw RUN: llvm-profdata merge -o %t-shared.profdata %t-shared.profraw -RUN: %clang_profuse=%t-static.profdata -o %t-a.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-a.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-a.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-a.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-a.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-a.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-a.cpp RUN: diff %t-a.static.ll %t-a.shared.ll -RUN: %clang_profuse=%t-static.profdata -o %t-b.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-b.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-b.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-b.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-b.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-b.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-b.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-b.cpp RUN: diff %t-b.static.ll %t-b.shared.ll -RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-main.cpp -RUN: %clang_profuse=%t-shared.profdata -o %t-main.shared.ll -S -emit-llvm %S/Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profuse=%t-static.profdata -o %t-main.static.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-main.cpp +RUN: %clang_profuse=%t-shared.profdata -o %t-main.shared.ll -S -emit-llvm %S/../Inputs/instrprof-dynamic-main.cpp RUN: diff %t-main.static.ll %t-main.shared.ll diff --git a/test/profile/instrprof-set-filename-shared.test b/test/profile/Posix/instrprof-set-filename-shared.test index afcb4b4fd..439c6c0dd 100644 --- a/test/profile/instrprof-set-filename-shared.test +++ b/test/profile/Posix/instrprof-set-filename-shared.test @@ -1,7 +1,7 @@ # Test that __llvm_profile_set_filename is honored by shared libary too. RUN: mkdir -p %t.d -RUN: %clang_profgen=%t.shared.profraw -fPIC -shared -o %t.d/t.shared %S/Inputs/instrprof-dlopen-func.c -RUN: %clang_profgen -DCALL_SHARED -o %t.m -O3 -rpath %t.d %t.d/t.shared %S/instrprof-set-filename.c +RUN: %clang_profgen=%t.shared.profraw -fPIC -shared -o %t.d/t.shared %S/../Inputs/instrprof-dlopen-func.c +RUN: %clang_profgen -DCALL_SHARED -o %t.m -O3 -rpath %t.d %t.d/t.shared %S/../instrprof-set-filename.c RUN: %run %t.m %t.main.profraw RUN: llvm-profdata show %t.main.profraw | FileCheck --check-prefix=SHARED %s diff --git a/test/profile/instrprof-shared-gcov-flush.test b/test/profile/Posix/instrprof-shared-gcov-flush.test index 542db0412..8d530fd45 100644 --- a/test/profile/instrprof-shared-gcov-flush.test +++ b/test/profile/Posix/instrprof-shared-gcov-flush.test @@ -4,49 +4,49 @@ XFAIL: darwin RUN: mkdir -p %t.d RUN: cd %t.d -RUN: %clang --coverage -o libfunc.so -fPIC -shared %S/Inputs/instrprof-shared-lib.c +RUN: %clang --coverage -o libfunc.so -fPIC -shared %S/../Inputs/instrprof-shared-lib.c RUN: test -f instrprof-shared-lib.gcno # Test the case where we exit abruptly after calling __gcov_flush, which means we don't write out the counters at exit. -RUN: %clang -DEXIT_ABRUPTLY -DSHARED_CALL_BEFORE_GCOV_FLUSH -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/Inputs/instrprof-shared-main-gcov-flush.c +RUN: %clang -DEXIT_ABRUPTLY -DSHARED_CALL_BEFORE_GCOV_FLUSH -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/../Inputs/instrprof-shared-main-gcov-flush.c RUN: test -f instrprof-shared-main-gcov-flush.gcno RUN: rm -f instrprof-shared-main-gcov-flush.gcda instrprof-shared-lib.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-shared-main-gcov-flush.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/../Inputs/instrprof-shared-main-gcov-flush_no-writeout.c.gcov RUN: llvm-cov gcov instrprof-shared-lib.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/Inputs/instrprof-shared-lib.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/../Inputs/instrprof-shared-lib.c.gcov # Test the case where we exit normally and we have a call to the shared library function before __gcov_flush. -RUN: %clang -DSHARED_CALL_BEFORE_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/Inputs/instrprof-shared-main-gcov-flush.c +RUN: %clang -DSHARED_CALL_BEFORE_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/../Inputs/instrprof-shared-main-gcov-flush.c RUN: test -f instrprof-shared-main-gcov-flush.gcno RUN: rm -f instrprof-shared-main-gcov-flush.gcda instrprof-shared-lib.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-shared-main-gcov-flush.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/../Inputs/instrprof-shared-main-gcov-flush_shared-call-before.c.gcov RUN: llvm-cov gcov instrprof-shared-lib.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/Inputs/instrprof-shared-lib.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/../Inputs/instrprof-shared-lib.c.gcov # Test the case where we exit normally and we have a call to the shared library function after __gcov_flush. -RUN: %clang -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/Inputs/instrprof-shared-main-gcov-flush.c +RUN: %clang -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/../Inputs/instrprof-shared-main-gcov-flush.c RUN: test -f instrprof-shared-main-gcov-flush.gcno RUN: rm -f instrprof-shared-main-gcov-flush.gcda instrprof-shared-lib.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-shared-main-gcov-flush.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/../Inputs/instrprof-shared-main-gcov-flush_shared-call-after.c.gcov RUN: llvm-cov gcov instrprof-shared-lib.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/Inputs/instrprof-shared-lib.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/../Inputs/instrprof-shared-lib.c.gcov # Test the case where we exit normally and we have calls to the shared library function before and after __gcov_flush. -RUN: %clang -DSHARED_CALL_BEFORE_GCOV_FLUSH -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/Inputs/instrprof-shared-main-gcov-flush.c +RUN: %clang -DSHARED_CALL_BEFORE_GCOV_FLUSH -DSHARED_CALL_AFTER_GCOV_FLUSH --coverage -o %t -L%t.d -rpath %t.d -lfunc %S/../Inputs/instrprof-shared-main-gcov-flush.c RUN: test -f instrprof-shared-main-gcov-flush.gcno RUN: rm -f instrprof-shared-main-gcov-flush.gcda instrprof-shared-lib.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-shared-main-gcov-flush.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-main-gcov-flush.c.gcov %S/../Inputs/instrprof-shared-main-gcov-flush_shared-call-before-after.c.gcov RUN: llvm-cov gcov instrprof-shared-lib.gcda -RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/Inputs/instrprof-shared-lib_called-twice.c.gcov +RUN: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-shared-lib.c.gcov %S/../Inputs/instrprof-shared-lib_called-twice.c.gcov diff --git a/test/profile/instrprof-shared.test b/test/profile/Posix/instrprof-shared.test index b3f0b9ab4..7087fa2fa 100644 --- a/test/profile/instrprof-shared.test +++ b/test/profile/Posix/instrprof-shared.test @@ -14,18 +14,18 @@ enabled behave as expected. """ RUN: mkdir -p %t.d -RUN: %clang_profgen -o %t.d/libt-instr.so -fPIC -shared %S/Inputs/instrprof-shared-lib.c -RUN: %clang -o %t.d/libt-no-instr1.so -fPIC -shared %S/Inputs/instrprof-shared-lib.c -RUN: %clang -c -o %t.d/instrprof-shared-lib-no-instr2.o -fPIC %S/Inputs/instrprof-shared-lib.c +RUN: %clang_profgen -o %t.d/libt-instr.so -fPIC -shared %S/../Inputs/instrprof-shared-lib.c +RUN: %clang -o %t.d/libt-no-instr1.so -fPIC -shared %S/../Inputs/instrprof-shared-lib.c +RUN: %clang -c -o %t.d/instrprof-shared-lib-no-instr2.o -fPIC %S/../Inputs/instrprof-shared-lib.c RUN: %clang_profgen -o %t.d/libt-no-instr2.so -fPIC -shared %t.d/instrprof-shared-lib-no-instr2.o -RUN: %clang_profgen -o %t-instr-instr -L%t.d -rpath %t.d -lt-instr %S/Inputs/instrprof-shared-main.c -RUN: %clang_profgen -o %t-instr-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1 %S/Inputs/instrprof-shared-main.c -RUN: %clang_profgen -o %t-instr-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2 %S/Inputs/instrprof-shared-main.c -RUN: %clang -o %t-no-instr1-instr -L%t.d -rpath %t.d -lt-instr %S/Inputs/instrprof-shared-main.c -RUN: %clang -o %t-no-instr1-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1 %S/Inputs/instrprof-shared-main.c -RUN: %clang -o %t-no-instr1-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2 %S/Inputs/instrprof-shared-main.c -RUN: %clang -c -o %t.d/instrprof-shared-main-no-instr2.o %S/Inputs/instrprof-shared-main.c +RUN: %clang_profgen -o %t-instr-instr -L%t.d -rpath %t.d -lt-instr %S/../Inputs/instrprof-shared-main.c +RUN: %clang_profgen -o %t-instr-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1 %S/../Inputs/instrprof-shared-main.c +RUN: %clang_profgen -o %t-instr-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2 %S/../Inputs/instrprof-shared-main.c +RUN: %clang -o %t-no-instr1-instr -L%t.d -rpath %t.d -lt-instr %S/../Inputs/instrprof-shared-main.c +RUN: %clang -o %t-no-instr1-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1 %S/../Inputs/instrprof-shared-main.c +RUN: %clang -o %t-no-instr1-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2 %S/../Inputs/instrprof-shared-main.c +RUN: %clang -c -o %t.d/instrprof-shared-main-no-instr2.o %S/../Inputs/instrprof-shared-main.c RUN: %clang -o %t-no-instr2-instr -L%t.d -rpath %t.d -lt-instr %t.d/instrprof-shared-main-no-instr2.o RUN: %clang -o %t-no-instr2-no-instr1 -L%t.d -rpath %t.d -lt-no-instr1 %t.d/instrprof-shared-main-no-instr2.o RUN: %clang -o %t-no-instr2-no-instr2 -L%t.d -rpath %t.d -lt-no-instr2 %t.d/instrprof-shared-main-no-instr2.o @@ -57,13 +57,13 @@ RUN: llvm-profdata show -counts --function foo %t-instr-instr.profdata | grep -v RUN: llvm-profdata show -counts --function foo %t-no-instr1-instr.profdata | grep -v 'Total\|Maximum' > %t-foo-2 RUN: llvm-profdata show -counts --function foo %t-no-instr2-instr.profdata | grep -v 'Total\|Maximum' > %t-foo-3 -RUN: %clang_profuse=%t-instr-instr.profdata -o %t-main-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c -RUN: %clang_profuse=%t-instr-no-instr1.profdata -o %t-main-instr-no-instr1.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c -RUN: %clang_profuse=%t-instr-no-instr2.profdata -o %t-main-instr-no-instr2.ll -S -emit-llvm %S/Inputs/instrprof-shared-main.c -RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c -RUN: %clang_profuse=%t-no-instr1-instr.profdata -o %t-lib-no-instr1-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c -RUN: %clang_profuse=%t-no-instr2-instr.profdata -o %t-lib-no-instr2-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c -RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/Inputs/instrprof-shared-lib.c +RUN: %clang_profuse=%t-instr-instr.profdata -o %t-main-instr-instr.ll -S -emit-llvm %S/../Inputs/instrprof-shared-main.c +RUN: %clang_profuse=%t-instr-no-instr1.profdata -o %t-main-instr-no-instr1.ll -S -emit-llvm %S/../Inputs/instrprof-shared-main.c +RUN: %clang_profuse=%t-instr-no-instr2.profdata -o %t-main-instr-no-instr2.ll -S -emit-llvm %S/../Inputs/instrprof-shared-main.c +RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/../Inputs/instrprof-shared-lib.c +RUN: %clang_profuse=%t-no-instr1-instr.profdata -o %t-lib-no-instr1-instr.ll -S -emit-llvm %S/../Inputs/instrprof-shared-lib.c +RUN: %clang_profuse=%t-no-instr2-instr.profdata -o %t-lib-no-instr2-instr.ll -S -emit-llvm %S/../Inputs/instrprof-shared-lib.c +RUN: %clang_profuse=%t-instr-instr.profdata -o %t-lib-instr-instr.ll -S -emit-llvm %S/../Inputs/instrprof-shared-lib.c RUN: diff %t-main-instr-no-instr1.ll %t-main-instr-no-instr2.ll RUN: diff %t-lib-no-instr1-instr.ll %t-lib-no-instr2-instr.ll diff --git a/test/profile/instrprof-value-prof-shared.test b/test/profile/Posix/instrprof-value-prof-shared.test index a45b0d55b..34abe8295 100644 --- a/test/profile/instrprof-value-prof-shared.test +++ b/test/profile/Posix/instrprof-value-prof-shared.test @@ -1,52 +1,52 @@ // RUN: mkdir -p %t.d -// RUN: %clang_profgen -O2 -mllvm -enable-value-profiling=true -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.shared -DSHARED_LIB %S/Inputs/instrprof-value-prof-real.c -// RUN: %clang_profgen -O2 -mllvm -enable-value-profiling=true -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -o %t -rpath %t.d %t.d/t.shared -DCALL_SHARED %S/Inputs/instrprof-value-prof-real.c +// RUN: %clang_profgen -O2 -mllvm -enable-value-profiling=true -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.shared -DSHARED_LIB %S/../Inputs/instrprof-value-prof-real.c +// RUN: %clang_profgen -O2 -mllvm -enable-value-profiling=true -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -o %t -rpath %t.d %t.d/t.shared -DCALL_SHARED %S/../Inputs/instrprof-value-prof-real.c // RUN: env LLVM_PROFILE_FILE=%t.profraw LLVM_VP_MAX_NUM_VALS_PER_SITE=255 %run %t // RUN: llvm-profdata merge -o %t.profdata %t.profraw -// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c -// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=SHARED +// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c +// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=SHARED // IR level instrumentation -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.shared -DSHARED_LIB %S/Inputs/instrprof-value-prof-real.c -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir %t.d/t.ir.shared -DCALL_SHARED %S/Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.shared -DSHARED_LIB %S/../Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir %t.d/t.ir.shared -DCALL_SHARED %S/../Inputs/instrprof-value-prof-real.c // Profile data from shared library will be concatenated to the same raw file. // RUN: env LLVM_PROFILE_FILE=%t.ir.profraw LLVM_VP_MAX_NUM_VALS_PER_SITE=255 %run %t.ir // RUN: llvm-profdata merge -o %t.ir.profdata %t.ir.profraw -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c // RUN: llvm-profdata merge -text %t.ir.profdata -o %t.ir.proftxt -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=SHARED -// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.proftxt +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=SHARED +// RUN: FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.proftxt // Same as above but with profile online merging enabled. // RUN: rm -fr %t.prof/ // RUN: mkdir -p %t.prof/ -// RUN: %clang_pgogen=%t.prof -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.m.shared -DSHARED_LIB %S/Inputs/instrprof-value-prof-real.c -// RUN: %clang_pgogen=%t.prof -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.m %t.d/t.ir.m.shared -DCALL_SHARED %S/Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen=%t.prof -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.m.shared -DSHARED_LIB %S/../Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen=%t.prof -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.m %t.d/t.ir.m.shared -DCALL_SHARED %S/../Inputs/instrprof-value-prof-real.c // RUN: env LLVM_VP_MAX_NUM_VALS_PER_SITE=255 %run %t.ir.m // RUN: llvm-profdata merge -o %t.ir.m.profdata -dump-input-file-list %t.prof/ | count 2 // RUN: llvm-profdata merge -o %t.ir.m.profdata %t.prof/ -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.m.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.m.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c // RUN: llvm-profdata merge -text %t.ir.m.profdata -o %t.ir.m.proftxt -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.m.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=SHARED -// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.m.proftxt +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.m.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=SHARED +// RUN: FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.m.proftxt // IR level instrumentation: dynamic memory allocation -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.dyn.shared -DSHARED_LIB %S/Inputs/instrprof-value-prof-real.c -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.dyn %t.d/t.ir.dyn.shared -DCALL_SHARED %S/Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.dyn.shared -DSHARED_LIB %S/../Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.dyn %t.d/t.ir.dyn.shared -DCALL_SHARED %S/../Inputs/instrprof-value-prof-real.c // RUN: env LLVM_PROFILE_FILE=%t.ir.dyn.profraw %run %t.ir.dyn // RUN: llvm-profdata merge -o %t.ir.dyn.profdata %t.ir.dyn.profraw -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.dyn.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.dyn.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c // RUN: llvm-profdata merge -text %t.ir.dyn.profdata -o %t.ir.dyn.proftxt -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.dyn.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=SHARED -// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.dyn.proftxt +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.dyn.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=SHARED +// RUN: FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.dyn.proftxt // IR level instrumentation: main program uses static counter, shared library uses dynamic memory alloc. -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.dyn.shared -DSHARED_LIB %S/Inputs/instrprof-value-prof-real.c -// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.mixed %t.d/t.ir.dyn.shared -DCALL_SHARED %S/Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -fPIC -shared -o %t.d/t.ir.dyn.shared -DSHARED_LIB %S/../Inputs/instrprof-value-prof-real.c +// RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -mllvm -vp-counters-per-site=256 -rpath %t.d -o %t.ir.mixed %t.d/t.ir.dyn.shared -DCALL_SHARED %S/../Inputs/instrprof-value-prof-real.c // RUN: env LLVM_PROFILE_FILE=%t.ir.mixed.profraw LLVM_VP_MAX_NUM_VALS_PER_SITE=255 %run %t.ir.mixed // RUN: llvm-profdata merge -o %t.ir.mixed.profdata %t.ir.mixed.profraw -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.mixed.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.mixed.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c // RUN: llvm-profdata merge -text %t.ir.mixed.profdata -o %t.ir.mixed.proftxt -// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.mixed.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=SHARED -// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.mixed.proftxt +// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.mixed.profdata | FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=SHARED +// RUN: FileCheck %S/../Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.mixed.proftxt diff --git a/test/profile/instrprof-visibility-kinds.inc b/test/profile/Posix/instrprof-visibility-kinds.inc index 23b899dd8..23b899dd8 100644 --- a/test/profile/instrprof-visibility-kinds.inc +++ b/test/profile/Posix/instrprof-visibility-kinds.inc diff --git a/test/profile/instrprof-visibility.cpp b/test/profile/Posix/instrprof-visibility.cpp index bb533050e..bb533050e 100644 --- a/test/profile/instrprof-visibility.cpp +++ b/test/profile/Posix/instrprof-visibility.cpp diff --git a/test/profile/Posix/lit.local.cfg b/test/profile/Posix/lit.local.cfg new file mode 100644 index 000000000..60a946082 --- /dev/null +++ b/test/profile/Posix/lit.local.cfg @@ -0,0 +1,9 @@ +def getRoot(config): + if not config.parent: + return config + return getRoot(config.parent) + +root = getRoot(config) + +if root.host_os in ['Windows']: + config.unsupported = True diff --git a/test/profile/coverage-inline.cpp b/test/profile/coverage-inline.cpp new file mode 100644 index 000000000..e362e566f --- /dev/null +++ b/test/profile/coverage-inline.cpp @@ -0,0 +1,47 @@ +// Test that the instrumentation puts the right linkage on the profile data for +// inline functions. +// RUN: %clang_profgen -g -fcoverage-mapping -c -o %t1.o %s -DOBJECT_1 +// RUN: %clang_profgen -g -fcoverage-mapping -c -o %t2.o %s +// RUN: %clang_profgen -g -fcoverage-mapping %t1.o %t2.o -o %t.exe +// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.exe +// RUN: llvm-profdata show %t.profraw -all-functions | FileCheck %s + +// Again, with optimizations and inlining. This tests that we use comdats +// correctly. +// RUN: %clang_profgen -O2 -g -fcoverage-mapping -c -o %t1.o %s -DOBJECT_1 +// RUN: %clang_profgen -O2 -g -fcoverage-mapping -c -o %t2.o %s +// RUN: %clang_profgen -g -fcoverage-mapping %t1.o %t2.o -o %t.exe +// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.exe +// RUN: llvm-profdata show %t.profraw -all-functions | FileCheck %s + +// CHECK: {{.*}}foo{{.*}}: +// CHECK-NEXT: Hash: +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Function count: 1 +// CHECK: {{.*}}inline_wrapper{{.*}}: +// CHECK-NEXT: Hash: +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Function count: 2 +// CHECK: main: +// CHECK-NEXT: Hash: +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Function count: 1 + +extern "C" int puts(const char *); + +inline void inline_wrapper(const char *msg) { + puts(msg); +} + +void foo(); + +#ifdef OBJECT_1 +void foo() { + inline_wrapper("foo"); +} +#else +int main() { + inline_wrapper("main"); + foo(); +} +#endif diff --git a/test/profile/instrprof-gcov-exceptions.test b/test/profile/instrprof-gcov-exceptions.test index 20ca47a95..a3dcc55aa 100644 --- a/test/profile/instrprof-gcov-exceptions.test +++ b/test/profile/instrprof-gcov-exceptions.test @@ -17,5 +17,5 @@ RUN: test -f instrprof-gcov-exceptions.gcno RUN: rm -f instrprof-gcov-exceptions.gcda RUN: %run %t RUN: llvm-cov gcov instrprof-gcov-exceptions.gcda -# The result should be the same, not using XFAIL as only this part of the test is failing. -RUN: not FileCheck --match-full-lines --strict-whitespace --input-file instrprof-gcov-exceptions.cpp.gcov %S/Inputs/instrprof-gcov-exceptions.cpp.gcov +# FIXME: The result should be the same, but they are not on some platforms. +RUNX: FileCheck --match-full-lines --strict-whitespace --input-file instrprof-gcov-exceptions.cpp.gcov %S/Inputs/instrprof-gcov-exceptions.cpp.gcov diff --git a/test/profile/instrprof-icall-promo.test b/test/profile/instrprof-icall-promo.test index d9b16f677..12e627157 100644 --- a/test/profile/instrprof-icall-promo.test +++ b/test/profile/instrprof-icall-promo.test @@ -12,6 +12,9 @@ RUN: env LLVM_PROFILE_FILE=%t-icall2.profraw %run %t.gen.2 RUN: llvm-profdata merge -o %t-icall2.profdata %t-icall2.profraw RUN: %clangxx_profuse=%t-icall2.profdata -O2 -Rpass=pgo-icall-prom -c -o %t.2.use.o %S/Inputs/instrprof-icall-promo_2.cc 2>&1 | FileCheck %s +FIXME: Relies on vtable layout +XFAIL: msvc + # CHECK: Promote indirect call to diff --git a/test/profile/instrprof-merge-match.test b/test/profile/instrprof-merge-match.test index 8345620dc..5448af158 100644 --- a/test/profile/instrprof-merge-match.test +++ b/test/profile/instrprof-merge-match.test @@ -3,3 +3,5 @@ // RUN: %clang_profgen -o %t -L %t.d -rpath %t.d %S/Inputs/instrprof-merge-match.c -lt // RUN: %run %t +rpath isn't supported on Windows. +UNSUPPORTED: windows diff --git a/test/profile/instrprof-merge.c b/test/profile/instrprof-merge.c index ef24c83a1..8f8d7f458 100644 --- a/test/profile/instrprof-merge.c +++ b/test/profile/instrprof-merge.c @@ -2,6 +2,9 @@ // RUN: %run %t %t.profraw 1 1 // RUN: llvm-profdata show --all-functions --counts %t.profraw | FileCheck %s +// FIXME: llvm-profdata exits with "Malformed instrumentation profile data" +// XFAIL: msvc + #include <stdint.h> #include <stdio.h> #include <stdlib.h> diff --git a/test/profile/instrprof-order-file.test b/test/profile/instrprof-order-file.test new file mode 100644 index 000000000..09e77d7f6 --- /dev/null +++ b/test/profile/instrprof-order-file.test @@ -0,0 +1,17 @@ +// UNSUPPORTED: windows +// REQUIRES: darwin +// RUN: rm -rf %t.dir && mkdir -p %t.dir +// RUN: cd %t.dir +// +// RUN: %clang -forder-file-instrumentation -O1 -o %t.2 %S/Inputs/instrprof-order-file-2.c %S/Inputs/instrprof-order-file.c -mllvm -orderfile-write-mapping="mapping.txt" +// RUN: %run %t.2 ANY +// RUN: od -h default.profraw.order | FileCheck %s +// RUN: cat mapping.txt | FileCheck %s --check-prefix=MAPPING + +// Make sure we have MD5 for main, then f, then g. +// CHECK: 0000000 d5fa e78d 6436 db95 a18f dd4c 4f75 cc91 +// CHECK: 0000020 f5b2 47ff 6643 b671 0000 0000 0000 0000 + +// MAPPING: MD5 cc914f75dd4ca18f f +// MAPPING: MD5 b671664347fff5b2 g +// MAPPING: MD5 db956436e78dd5fa main diff --git a/test/profile/instrprof-path.c b/test/profile/instrprof-path.c index 90cb1df19..e4dc89612 100644 --- a/test/profile/instrprof-path.c +++ b/test/profile/instrprof-path.c @@ -1,13 +1,13 @@ // RUN: %clang_pgogen -O2 -o %t.0 %s -// RUN: %clang_pgogen=%t.d1 -O2 -o %t.1 %s -// RUN: %clang_pgogen=%t.d1/%t.d2 -O2 -o %t.2 %s +// RUN: %clang_pgogen=%/t.d1 -O2 -o %t.1 %s +// RUN: %clang_pgogen=%/t.d1/%:t.d2 -O2 -o %t.2 %s // // RUN: %run %t.0 "" -// RUN: env LLVM_PROFILE_FILE=%t.d1/default.profraw %run %t.0 %t.d1/ -// RUN: env LLVM_PROFILE_FILE=%t.d1/%t.d2/default.profraw %run %t.0 %t.d1/%t.d2/ -// RUN: %run %t.1 %t.d1/ -// RUN: %run %t.2 %t.d1/%t.d2/ -// RUN: %run %t.2 %t.d1/%t.d2/ %t.d1/%t.d2/%t.d3/blah.profraw %t.d1/%t.d2/%t.d3/ +// RUN: env LLVM_PROFILE_FILE=%/t.d1/default.profraw %run %t.0 %/t.d1 +// RUN: env LLVM_PROFILE_FILE=%/t.d1/%:t.d2/default.profraw %run %t.0 %/t.d1/%:t.d2 +// RUN: %run %t.1 %/t.d1 +// RUN: %run %t.2 %/t.d1/%:t.d2 +// RUN: %run %t.2 %/t.d1/%:t.d2 %/t.d1/%:t.d2/%:t.d3/blah.profraw %/t.d1/%:t.d2/%:t.d3/ #include <string.h> @@ -15,7 +15,6 @@ const char *__llvm_profile_get_path_prefix(); void __llvm_profile_set_filename(const char*); int main(int argc, const char *argv[]) { - int i; const char *expected; const char *prefix; if (argc < 2) @@ -24,7 +23,16 @@ int main(int argc, const char *argv[]) { expected = argv[1]; prefix = __llvm_profile_get_path_prefix(); - if (strcmp(prefix, expected)) + // The last character should be a trailing slash. Ignore it in the comparison + // since it could be '/' or '\\'. + int slashpos = strlen(prefix); + if (slashpos > 0) { + --slashpos; + if (prefix[slashpos] != '/' && prefix[slashpos] != '\\') + return 1; + } + + if (strncmp(prefix, expected, slashpos)) return 1; if (argc == 4) { diff --git a/test/profile/instrprof-set-dir-mode.c b/test/profile/instrprof-set-dir-mode.c index 25eb29db5..6bb8847cc 100644 --- a/test/profile/instrprof-set-dir-mode.c +++ b/test/profile/instrprof-set-dir-mode.c @@ -25,11 +25,15 @@ static int test(unsigned Mode, const char *TestDir) { if (Mode != __llvm_profile_get_dir_mode()) Ret = -1; else { + // From 'man mkdir': + // "If the parent directory has the set-group-ID bit set, then so will the + // newly created directory." So we mask off S_ISGID below; this test cannot + // control its parent directory. const unsigned Expected = ~umask(0) & Mode; struct stat DirSt; if (stat(Dir, &DirSt) == -1) Ret = -1; - else if (DirSt.st_mode != Expected) { + else if ((DirSt.st_mode & ~S_ISGID) != Expected) { printf("Modes do not match: Expected %o but found %o (%s)\n", Expected, DirSt.st_mode, Dir); Ret = -1; diff --git a/test/profile/instrprof-version-mismatch.c b/test/profile/instrprof-version-mismatch.c index 81ae52119..c63b299c7 100644 --- a/test/profile/instrprof-version-mismatch.c +++ b/test/profile/instrprof-version-mismatch.c @@ -1,6 +1,9 @@ // RUN: %clang_profgen -o %t -O3 %s // RUN: %run %t 1 2>&1 | FileCheck %s +// FIXME: Weak symbols are once again a portability problem for Windows. +// XFAIL: windows + // override the version variable with a bogus version: unsigned long long __llvm_profile_raw_version = 10000; int main(int argc, const char *argv[]) { diff --git a/test/profile/instrprof-without-libc.c b/test/profile/instrprof-without-libc.c index 0708833e2..6e9c1dde0 100644 --- a/test/profile/instrprof-without-libc.c +++ b/test/profile/instrprof-without-libc.c @@ -5,6 +5,10 @@ // RUN: llvm-profdata merge -o %t.profdata %t.profraw // RUN: %clang_profuse=%t.profdata -o - -S -emit-llvm %s | FileCheck %s +// This usage of llvm-nm assumes executables have symbol tables. They do not in +// an MSVC environment, so we can't make this test portable. +// UNSUPPORTED: msvc + #include <stdint.h> #include <stdlib.h> diff --git a/test/profile/lit.cfg b/test/profile/lit.cfg index 7449650a6..e59407d72 100644 --- a/test/profile/lit.cfg +++ b/test/profile/lit.cfg @@ -24,6 +24,10 @@ if hasattr(config, 'profile_lit_binary_dir') and \ if config.host_os in ['Linux']: extra_link_flags = ["-ldl"] +elif config.host_os in ['Windows']: + # InstrProf is incompatible with incremental linking. Disable it as a + # workaround. + extra_link_flags = ["-Wl,-incremental:no"] else: extra_link_flags = [] @@ -67,7 +71,7 @@ config.substitutions.append( ("%clangxx_profuse=", build_invocation(clang_cxxfla config.substitutions.append( ("%clang_lto_profgen=", build_invocation(clang_cflags, True) + " -fprofile-instr-generate=") ) -if config.host_os not in ['Darwin', 'FreeBSD', 'Linux', 'NetBSD', 'SunOS']: +if config.host_os not in ['Windows', 'Darwin', 'FreeBSD', 'Linux', 'NetBSD', 'SunOS']: config.unsupported = True if config.target_arch in ['armv7l']: diff --git a/test/safestack/CMakeLists.txt b/test/safestack/CMakeLists.txt index c56e81a3c..e30a676d7 100644 --- a/test/safestack/CMakeLists.txt +++ b/test/safestack/CMakeLists.txt @@ -6,15 +6,17 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) list(APPEND SAFESTACK_TEST_DEPS safestack) # Some tests require LTO, so add a dependency on the relevant LTO plugin. - if(LLVM_ENABLE_PIC AND LLVM_BINUTILS_INCDIR) - list(APPEND SAFESTACK_TEST_DEPS - LLVMgold - ) - endif() - if(APPLE) - list(APPEND SAFESTACK_TEST_DEPS - LTO - ) + if(LLVM_ENABLE_PIC) + if(LLVM_BINUTILS_INCDIR) + list(APPEND SAFESTACK_TEST_DEPS + LLVMgold + ) + endif() + if(APPLE) + list(APPEND SAFESTACK_TEST_DEPS + LTO + ) + endif() endif() endif() diff --git a/test/sanitizer_common/CMakeLists.txt b/test/sanitizer_common/CMakeLists.txt index 23292e548..dd251c6ef 100644 --- a/test/sanitizer_common/CMakeLists.txt +++ b/test/sanitizer_common/CMakeLists.txt @@ -3,17 +3,41 @@ set(SANITIZER_COMMON_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(SANITIZER_COMMON_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) set(SANITIZER_COMMON_TESTSUITES) +# FIXME(dliew): We should switch to COMPILER_RT_SANITIZERS_TO_BUILD instead of +# the hard coded `SUPPORTED_TOOLS_INIT` list once we know that the other +# sanitizers work. +set(SUPPORTED_TOOLS_INIT asan lsan msan tsan ubsan) set(SUPPORTED_TOOLS) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD|NetBSD|SunOS") - list(APPEND SUPPORTED_TOOLS asan) -endif() -if(CMAKE_SYSTEM_NAME MATCHES "NetBSD" OR (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID)) - list(APPEND SUPPORTED_TOOLS tsan) - list(APPEND SUPPORTED_TOOLS msan) - list(APPEND SUPPORTED_TOOLS ubsan) -endif() -if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID) - list(APPEND SUPPORTED_TOOLS lsan) + foreach(SANITIZER_TOOL ${SUPPORTED_TOOLS_INIT}) + string(TOUPPER ${SANITIZER_TOOL} SANITIZER_TOOL_UPPER) + if (COMPILER_RT_HAS_${SANITIZER_TOOL_UPPER}) + list(APPEND SUPPORTED_TOOLS ${SANITIZER_TOOL}) + endif() + endforeach() + +# FIXME(dliew): Remove this. +# Temporary helper for https://reviews.llvm.org/D55740 +message( + STATUS + "Generated Sanitizer SUPPORTED_TOOLS list on \"${CMAKE_SYSTEM_NAME}\" is" + " \"${SUPPORTED_TOOLS}\"") + +# FIXME(dliew): These tests should be made to work on all platforms. +# Use the legacy list for now. +if (ANDROID OR WINDOWS) + set(OLD_SUPPORTED_TOOLS ${SUPPORTED_TOOLS}) + if (ANDROID) + set(SUPPORTED_TOOLS asan) + elseif (WINDOWS) + set(SUPPORTED_TOOLS "") + else() + message(FATAL_ERROR "Unhandled platform") + endif() + message( + AUTHOR_WARNING + "Replacing Sanitizer SUPPORTED_TOOLS list (${OLD_SUPPORTED_TOOLS}) with " + "\"${SUPPORTED_TOOLS}\"") + unset(OLD_SUPPORTED_TOOLS) endif() # FIXME(dliew): Remove this. @@ -34,6 +58,8 @@ foreach(tool ${SUPPORTED_TOOLS}) darwin_filter_host_archs(${tool_toupper}_SUPPORTED_ARCH TEST_ARCH) endif() + # TODO(dliew): We should iterate over the different + # Apple platforms, not just macOS. foreach(arch ${TEST_ARCH}) set(SANITIZER_COMMON_LIT_TEST_MODE ${tool}) set(SANITIZER_COMMON_TEST_TARGET_ARCH ${arch}) @@ -42,8 +68,14 @@ foreach(tool ${SUPPORTED_TOOLS}) configure_lit_site_cfg( ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) - list(APPEND SANITIZER_COMMON_TESTSUITES - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) + # FIXME(dliew): LSan i386 on Darwin is completly broken right now. + # so don't run the tests by default. + if (NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin" AND + ${tool} STREQUAL "lsan" AND + ${arch} STREQUAL "i386")) + list(APPEND SANITIZER_COMMON_TESTSUITES + ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) + endif() endforeach() endforeach() diff --git a/test/sanitizer_common/TestCases/Darwin/abort_on_error.cc b/test/sanitizer_common/TestCases/Darwin/abort_on_error.cc index e73f669d8..e25a676df 100644 --- a/test/sanitizer_common/TestCases/Darwin/abort_on_error.cc +++ b/test/sanitizer_common/TestCases/Darwin/abort_on_error.cc @@ -1,7 +1,7 @@ // Check that sanitizers on OS X crash the process by default (i.e. // abort_on_error=1). See also Linux/abort_on_error.cc. -// RUN: %clangxx %s -o %t +// RUN: %clangxx -DUSING_%tool_name %s -o %t // Intentionally don't inherit the default options. // RUN: env %tool_options='' not --crash %run %t 2>&1 @@ -9,11 +9,19 @@ // When we use lit's default options, we shouldn't crash. // RUN: not %run %t 2>&1 +// Leak detection isn't treated as an error so `abort_on_error=1` doesn't work. +// UNSUPPORTED: lsan + int global; int main() { +#if defined(USING_ubsan) + int value = 5; + int computation = value / 0; // Division by zero. +#else volatile int *a = new int[100]; delete[] a; - global = a[0]; // use-after-free: triggers ASan report. + global = a[0]; // use-after-free: triggers ASan/TSan report. +#endif return 0; } diff --git a/test/sanitizer_common/TestCases/Posix/getpw_getgr.cc b/test/sanitizer_common/TestCases/Posix/getpw_getgr.cc new file mode 100644 index 000000000..c373132eb --- /dev/null +++ b/test/sanitizer_common/TestCases/Posix/getpw_getgr.cc @@ -0,0 +1,116 @@ +// RUN: %clangxx %s -o %t && %run %t +// UNSUPPORTED: ios + +#include <assert.h> +#include <grp.h> +#include <memory> +#include <pwd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +std::unique_ptr<char []> any_group; +const int N = 123456; + +void Check(const char *str) { + if (!str) + return; + assert(strlen(str) != N); +} + +void Check(const passwd *result) { + Check(result->pw_name); + Check(result->pw_passwd); + assert(result->pw_uid != N); + assert(result->pw_gid != N); +#if !defined(__ANDROID__) + Check(result->pw_gecos); +#endif + Check(result->pw_dir); + +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) + assert(result->pw_change != N); + Check(result->pw_class); + assert(result->pw_expire != N); +#endif + +#if defined(__FreeBSD__) + assert(result->pw_fields != N); +#endif + + // SunOS also has pw_age and pw_comment which are documented as unused. +} + +void Check(const group *result) { + Check(result->gr_name); + Check(result->gr_passwd); + assert(result->gr_gid != N); + for (char **mem = result->gr_mem; *mem; ++mem) + Check(*mem); + if (!any_group) { + auto length = strlen(result->gr_name); + any_group.reset(new char[length + 1]); + memcpy(any_group.get(), result->gr_name, length + 1); + } +} + +template <class T, class Fn, class... Args> +void test(Fn f, Args... args) { + T *result = f(args...); + Check(result); +} + +template <class T, class Fn, class... Args> +void test_r(Fn f, Args... args) { + T gr; + T *result; + char buff[10000]; + assert(!f(args..., &gr, buff, sizeof(buff), &result)); + Check(&gr); + Check(result); +} + +int main(int argc, const char *argv[]) { + test<passwd>(&getpwuid, 0); + test<passwd>(&getpwnam, "root"); + test<group>(&getgrgid, 0); + test<group>(&getgrnam, any_group.get()); + +#if !defined(__ANDROID__) + setpwent(); + test<passwd>(&getpwent); + setgrent(); + test<group>(&getgrent); + +#if !defined(__APPLE__) + setpwent(); + test_r<passwd>(&getpwent_r); + setgrent(); + test_r<group>(&getgrent_r); +#endif + + test_r<passwd>(&getpwuid_r, 0); + test_r<passwd>(&getpwnam_r, "root"); + + test_r<group>(&getgrgid_r, 0); + test_r<group>(&getgrnam_r, any_group.get()); + +#if defined(__linux__) + auto pwd_file = [] { + return std::unique_ptr<FILE, decltype(&fclose)>(fopen("/etc/passwd", "r"), + &fclose); + }; + auto gr_file = [] { + return std::unique_ptr<FILE, decltype(&fclose)>(fopen("/etc/group", "r"), + &fclose); + }; + test<passwd>(&fgetpwent, pwd_file().get()); + test<group>(&fgetgrent, gr_file().get()); + test_r<passwd>(&fgetpwent_r, pwd_file().get()); + test_r<group>(&fgetgrent_r, gr_file().get()); +#endif + +#endif // __ANDROID__ + + return 0; +} diff --git a/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc b/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc index 54272b017..9c5ae13cf 100644 --- a/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc +++ b/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc @@ -3,6 +3,8 @@ // REQUIRES: stable-runtime // XFAIL: ubsan +// FIXME: On Darwin, LSAn detects the leak, but does not invoke the death_callback. +// XFAIL: darwin && lsan #include <sanitizer/common_interface_defs.h> #include <stdio.h> diff --git a/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc b/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc index 9176a524d..ba98f47b3 100644 --- a/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc +++ b/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc @@ -6,8 +6,11 @@ // XFAIL: lsan // XFAIL: ubsan -#include <string.h> #include <assert.h> +#include <string.h> +#if defined(_GNU_SOURCE) +#include <strings.h> // for bcmp +#endif bool seen_memcmp, seen_strncmp, seen_strncasecmp, seen_strcmp, seen_strcasecmp, seen_strstr, seen_strcasestr, seen_memmem; @@ -59,6 +62,12 @@ int main() { int_sink = memcmp(s1, s2, sizeof(s2)); assert(seen_memcmp); +#if (defined(__linux__) && !defined(__ANDROID__) && defined(_GNU_SOURCE)) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) + seen_memcmp = false; + int_sink = bcmp(s1, s2, sizeof(s2)); + assert(seen_memcmp); +#endif + int_sink = strncmp(s1, s2, sizeof(s2)); assert(seen_strncmp); diff --git a/test/sanitizer_common/TestCases/print-stack-trace.cc b/test/sanitizer_common/TestCases/print-stack-trace.cc index fce850366..e4b8ad2bb 100644 --- a/test/sanitizer_common/TestCases/print-stack-trace.cc +++ b/test/sanitizer_common/TestCases/print-stack-trace.cc @@ -5,6 +5,9 @@ // UNSUPPORTED: darwin +// TODO(yln): temporary failing due to refactoring +// UNSUPPORTED: ubsan + #include <sanitizer/common_interface_defs.h> static inline void FooBarBaz() { diff --git a/test/sanitizer_common/TestCases/reallocarray-overflow.cc b/test/sanitizer_common/TestCases/reallocarray-overflow.cc new file mode 100644 index 000000000..245a5b47a --- /dev/null +++ b/test/sanitizer_common/TestCases/reallocarray-overflow.cc @@ -0,0 +1,19 @@ +// RUN: %clangxx -O0 %s -o %t +// RUN: %env_tool_opts=allocator_may_return_null=0 not %run %t 2>&1 | FileCheck %s +// RUN: %env_tool_opts=allocator_may_return_null=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NULL + +// REQUIRES: stable-runtime && !ubsan && !darwin + +#include <stdio.h> + +extern "C" void *reallocarray(void *, size_t, size_t); + +int main() { + void *p = reallocarray(nullptr, -1, 1000); + // CHECK: {{ERROR: .*Sanitizer: reallocarray parameters overflow: count \* size \(.* \* 1000\) cannot be represented in type size_t}} + + printf("reallocarray returned: %zu\n", (size_t)p); + // CHECK-NULL: reallocarray returned: 0 + + return 0; +} diff --git a/test/sanitizer_common/TestCases/symbolize_stack.cc b/test/sanitizer_common/TestCases/symbolize_stack.cc index e50cdb063..d6ec49b40 100644 --- a/test/sanitizer_common/TestCases/symbolize_stack.cc +++ b/test/sanitizer_common/TestCases/symbolize_stack.cc @@ -2,6 +2,9 @@ // Test that symbolizer does not crash on frame with large function name. +// On Darwin LSan reports a false positive +// XFAIL: darwin && lsan + #include <sanitizer/common_interface_defs.h> #include <vector> diff --git a/test/sanitizer_common/TestCases/wcrtomb.c b/test/sanitizer_common/TestCases/wcrtomb.c new file mode 100644 index 000000000..64cbd99b9 --- /dev/null +++ b/test/sanitizer_common/TestCases/wcrtomb.c @@ -0,0 +1,36 @@ +// RUN: %clang %s -o %t && %run %t 2>&1 + +#include <assert.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +int main(int argc, char **argv) { + mbstate_t state; + memset(&state, 0, sizeof(state)); + + char buff[10]; + size_t res = wcrtomb(buff, L'a', &state); + assert(res == 1); + assert(buff[0] == 'a'); + + res = wcrtomb(buff, L'\0', &state); + assert(res == 1); + assert(buff[0] == '\0'); + + res = wcrtomb(NULL, L'\0', &state); + assert(res == 1); + + res = wcrtomb(buff, L'a', NULL); + assert(res == 1); + assert(buff[0] == 'a'); + + res = wcrtomb(buff, L'\0', NULL); + assert(res == 1); + assert(buff[0] == '\0'); + + res = wcrtomb(NULL, L'\0', NULL); + assert(res == 1); + + return 0; +} diff --git a/test/sanitizer_common/TestCases/wctomb.c b/test/sanitizer_common/TestCases/wctomb.c new file mode 100644 index 000000000..87089d2ce --- /dev/null +++ b/test/sanitizer_common/TestCases/wctomb.c @@ -0,0 +1,14 @@ +// RUN: %clang %s -o %t && %run %t 2>&1 + +#include <assert.h> +#include <stdlib.h> + +int main(int argc, char **argv) { + char buff[10]; + wchar_t x = L'a'; + wctomb(NULL, x); + int res = wctomb(buff, x); + assert(res == 1); + assert(buff[0] == 'a'); + return 0; +} diff --git a/test/sanitizer_common/Unit/lit.site.cfg.in b/test/sanitizer_common/Unit/lit.site.cfg.in index c62e23c28..46855d9e8 100644 --- a/test/sanitizer_common/Unit/lit.site.cfg.in +++ b/test/sanitizer_common/Unit/lit.site.cfg.in @@ -12,3 +12,6 @@ config.name = 'SanitizerCommon-Unit' config.test_exec_root = os.path.join("@COMPILER_RT_BINARY_DIR@", "lib", "sanitizer_common", "tests") config.test_source_root = config.test_exec_root + +if config.host_os == 'Darwin': + config.parallelism_group = config.darwin_sanitizer_parallelism_group_func diff --git a/test/sanitizer_common/ios_commands/iossim_run.py b/test/sanitizer_common/ios_commands/iossim_run.py index e1f633e87..7ce973956 100755 --- a/test/sanitizer_common/ios_commands/iossim_run.py +++ b/test/sanitizer_common/ios_commands/iossim_run.py @@ -8,7 +8,7 @@ if not "SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER" in os.environ: device_id = os.environ["SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER"] -for e in ["ASAN_OPTIONS", "TSAN_OPTIONS", "UBSAN_OPTIONS", "APPLE_ASAN_INIT_FOR_DLOPEN"]: +for e in ["ASAN_OPTIONS", "TSAN_OPTIONS", "UBSAN_OPTIONS", "APPLE_ASAN_INIT_FOR_DLOPEN", "ASAN_ACTIVATION_OPTIONS"]: if e in os.environ: os.environ["SIMCTL_CHILD_" + e] = os.environ[e] diff --git a/test/sanitizer_common/lit.common.cfg b/test/sanitizer_common/lit.common.cfg index 75cc7b77e..a9965f070 100644 --- a/test/sanitizer_common/lit.common.cfg +++ b/test/sanitizer_common/lit.common.cfg @@ -70,3 +70,6 @@ config.suffixes = ['.c', '.cc', '.cpp'] if config.host_os not in ['Linux', 'Darwin', 'NetBSD', 'FreeBSD']: config.unsupported = True + +if not config.parallelism_group: + config.parallelism_group = 'shadow-memory' diff --git a/test/sanitizer_common/sanitizer_ucontext.h b/test/sanitizer_common/sanitizer_ucontext.h new file mode 100644 index 000000000..d7882fd7f --- /dev/null +++ b/test/sanitizer_common/sanitizer_ucontext.h @@ -0,0 +1,11 @@ +#ifdef __APPLE__ +// ucontext.h is deprecated on macOS, so tests that include it may stop working +// someday. We define _XOPEN_SOURCE to keep using ucontext.h for now. +#ifdef _STRUCT_UCONTEXT +#error incomplete ucontext_t already defined, change #include order +#endif +#define _XOPEN_SOURCE 700 +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include <ucontext.h> diff --git a/test/scudo/CMakeLists.txt b/test/scudo/CMakeLists.txt index 513168b18..7e0702e9b 100644 --- a/test/scudo/CMakeLists.txt +++ b/test/scudo/CMakeLists.txt @@ -15,15 +15,7 @@ configure_lit_site_cfg( set(SCUDO_TEST_ARCH ${SCUDO_SUPPORTED_ARCH}) foreach(arch ${SCUDO_TEST_ARCH}) - if(ANDROID) - if (${arch} STREQUAL "i386") - set(SCUDO_TEST_TARGET_ARCH i686-android) - else() - set(SCUDO_TEST_TARGET_ARCH ${arch}-android) - endif() - else() - set(SCUDO_TEST_TARGET_ARCH ${arch}) - endif() + set(SCUDO_TEST_TARGET_ARCH ${arch}) string(TOLOWER "-${arch}" SCUDO_TEST_CONFIG_SUFFIX) get_test_cc_for_arch(${arch} SCUDO_TEST_TARGET_CC SCUDO_TEST_TARGET_CFLAGS) string(TOUPPER ${arch} ARCH_UPPER_CASE) @@ -35,6 +27,8 @@ foreach(arch ${SCUDO_TEST_ARCH}) list(APPEND SCUDO_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) endforeach() +add_subdirectory(standalone) + add_lit_testsuite(check-scudo "Running the Scudo Hardened Allocator tests" ${SCUDO_TESTSUITES} DEPENDS ${SCUDO_TEST_DEPS}) diff --git a/test/scudo/rss.c b/test/scudo/rss.c index 4376290ad..0b76857b9 100644 --- a/test/scudo/rss.c +++ b/test/scudo/rss.c @@ -1,15 +1,15 @@ // RUN: %clang_scudo %s -o %t // RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nolimit -// RUN: %env_scudo_opts="soft_rss_limit_mb=256" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nolimit -// RUN: %env_scudo_opts="hard_rss_limit_mb=256" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nolimit -// RUN: %env_scudo_opts="soft_rss_limit_mb=64:allocator_may_return_null=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit -// RUN: %env_scudo_opts="soft_rss_limit_mb=64:allocator_may_return_null=1" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit-returnnull -// RUN: %env_scudo_opts="soft_rss_limit_mb=64:allocator_may_return_null=0:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit -// RUN: %env_scudo_opts="soft_rss_limit_mb=64:allocator_may_return_null=1:can_use_proc_maps_statm=0" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit-returnnull -// RUN: %env_scudo_opts="hard_rss_limit_mb=64:allocator_may_return_null=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit -// RUN: %env_scudo_opts="hard_rss_limit_mb=64:allocator_may_return_null=1" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit -// RUN: %env_scudo_opts="hard_rss_limit_mb=64:allocator_may_return_null=0:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit -// RUN: %env_scudo_opts="hard_rss_limit_mb=64:allocator_may_return_null=1:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit +// RUN: %env_scudo_opts="soft_rss_limit_mb=128" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nolimit +// RUN: %env_scudo_opts="hard_rss_limit_mb=128" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-nolimit +// RUN: %env_scudo_opts="soft_rss_limit_mb=32:allocator_may_return_null=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit +// RUN: %env_scudo_opts="soft_rss_limit_mb=32:allocator_may_return_null=1" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit-returnnull +// RUN: %env_scudo_opts="soft_rss_limit_mb=32:allocator_may_return_null=0:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit +// RUN: %env_scudo_opts="soft_rss_limit_mb=32:allocator_may_return_null=1:can_use_proc_maps_statm=0" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-softlimit-returnnull +// RUN: %env_scudo_opts="hard_rss_limit_mb=32:allocator_may_return_null=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit +// RUN: %env_scudo_opts="hard_rss_limit_mb=32:allocator_may_return_null=1" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit +// RUN: %env_scudo_opts="hard_rss_limit_mb=32:allocator_may_return_null=0:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit +// RUN: %env_scudo_opts="hard_rss_limit_mb=32:allocator_may_return_null=1:can_use_proc_maps_statm=0" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-hardlimit // Tests that the soft and hard RSS limits work as intended. Without limit or // with a high limit, the test should pass without any malloc returning NULL or @@ -22,7 +22,7 @@ #include <string.h> #include <unistd.h> -static const size_t kNumAllocs = 128; +static const size_t kNumAllocs = 64; static const size_t kAllocSize = 1 << 20; // 1MB. static void *allocs[kNumAllocs]; @@ -30,8 +30,9 @@ static void *allocs[kNumAllocs]; int main(int argc, char *argv[]) { int returned_null = 0; for (int i = 0; i < kNumAllocs; i++) { - if ((i & 0xf) == 0) - usleep(50000); + // sleep for 100ms every 8 allocations, to allow the RSS check to catch up. + if (i != 0 && (i & 0x7) == 0) + usleep(100000); allocs[i] = malloc(kAllocSize); if (allocs[i]) memset(allocs[i], 0xff, kAllocSize); // Dirty the pages. diff --git a/test/scudo/standalone/CMakeLists.txt b/test/scudo/standalone/CMakeLists.txt new file mode 100644 index 000000000..9d28d655a --- /dev/null +++ b/test/scudo/standalone/CMakeLists.txt @@ -0,0 +1,15 @@ +if(COMPILER_RT_INCLUDE_TESTS AND COMPILER_RT_HAS_SCUDO_STANDALONE) + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg) + list(APPEND SCUDO_STANDALONE_TEST_DEPS ScudoUnitTests) + list(APPEND SCUDO_STANDALONE_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/unit) +endif() + +add_lit_testsuite(check-scudo_standalone + "Running Scudo Standalone tests" + ${SCUDO_STANDALONE_TESTSUITES} + DEPENDS ${SCUDO_STANDALONE_TEST_DEPS}) + +set_target_properties(check-scudo_standalone + PROPERTIES FOLDER "Compiler-RT Tests") diff --git a/test/scudo/standalone/unit/lit.site.cfg.in b/test/scudo/standalone/unit/lit.site.cfg.in new file mode 100644 index 000000000..ef34739b8 --- /dev/null +++ b/test/scudo/standalone/unit/lit.site.cfg.in @@ -0,0 +1,12 @@ +@LIT_SITE_CFG_IN_HEADER@ + +# Load common config for all compiler-rt unit tests. +lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/unittests/lit.common.unit.configured") + +# Setup config name. +config.name = 'ScudoStandalone-Unit' + +# Setup test source and exec root. +# For unit tests, we define it as build directory with unit tests. +config.test_exec_root = "@COMPILER_RT_BINARY_DIR@/lib/scudo/standalone/tests" +config.test_source_root = config.test_exec_root diff --git a/test/shadowcallstack/libc_support.h b/test/shadowcallstack/libc_support.h index 5d89aab64..9c8e05663 100644 --- a/test/shadowcallstack/libc_support.h +++ b/test/shadowcallstack/libc_support.h @@ -33,9 +33,5 @@ __attribute__((noinline)) void scs_fputs_stdout(const char *p) { } #else - -__attribute__((noinline)) void scs_fputs_stdout(const char *p) { - fputs(p, stdout); -} - +#error Unsupported platform #endif diff --git a/test/shadowcallstack/lit.cfg b/test/shadowcallstack/lit.cfg index 313cd2b8e..d04d37831 100644 --- a/test/shadowcallstack/lit.cfg +++ b/test/shadowcallstack/lit.cfg @@ -19,5 +19,5 @@ if config.target_arch == 'aarch64': scs_arch_cflags += ' -ffixed-x18 ' config.substitutions.append( ("%clang_scs ", config.clang + ' -O0 -fsanitize=shadow-call-stack ' + scs_arch_cflags + ' ') ) -if config.host_os not in ['Linux'] or config.target_arch not in ['x86_64', 'aarch64']: +if config.host_os not in ['Linux'] or config.target_arch not in ['aarch64']: config.unsupported = True diff --git a/test/shadowcallstack/minimal_runtime.h b/test/shadowcallstack/minimal_runtime.h index f36fa5a7d..fab4fdf80 100644 --- a/test/shadowcallstack/minimal_runtime.h +++ b/test/shadowcallstack/minimal_runtime.h @@ -4,10 +4,6 @@ #pragma once -#ifdef __x86_64__ -#include <asm/prctl.h> -int arch_prctl(int code, void *addr); -#endif #include <stdlib.h> #include <sys/mman.h> #include <sys/prctl.h> @@ -21,10 +17,7 @@ static void __shadowcallstack_init() { if (stack == MAP_FAILED) abort(); -#if defined(__x86_64__) - if (arch_prctl(ARCH_SET_GS, stack)) - abort(); -#elif defined(__aarch64__) +#if defined(__aarch64__) __asm__ __volatile__("mov x18, %0" ::"r"(stack)); #else #error Unsupported platform diff --git a/test/shadowcallstack/overflow-aarch64.c b/test/shadowcallstack/overflow-aarch64.c deleted file mode 100644 index 8da798164..000000000 --- a/test/shadowcallstack/overflow-aarch64.c +++ /dev/null @@ -1,5 +0,0 @@ -// See overflow.c for a description. - -// REQUIRES: aarch64-target-arch -// RUN: %clang_scs %S/overflow.c -o %t -DITERATIONS=12 -// RUN: %run %t | FileCheck %S/overflow.c diff --git a/test/shadowcallstack/overflow-x86_64.c b/test/shadowcallstack/overflow-x86_64.c deleted file mode 100644 index 38bb13a96..000000000 --- a/test/shadowcallstack/overflow-x86_64.c +++ /dev/null @@ -1,5 +0,0 @@ -// See overflow.c for a description. - -// REQUIRES: x86_64-target-arch -// RUN: %clang_scs %S/overflow.c -o %t -DITERATIONS=12 -// RUN: not --crash %run %t diff --git a/test/shadowcallstack/overflow.c b/test/shadowcallstack/overflow.c index 8c3d50c59..f9f64096f 100644 --- a/test/shadowcallstack/overflow.c +++ b/test/shadowcallstack/overflow.c @@ -8,12 +8,10 @@ // RUN: %clang_scs %s -o %t -DITERATIONS=3 // RUN: %run %t | FileCheck %s -// The behavioral check for SCS + overflow lives in the tests overflow-x86_64.c -// and overflow-aarch64.c. This is because the expected behavior is different -// between the two platforms. On x86_64 we crash because the comparison between -// the shadow call stack and the regular stack fails. On aarch64 there is no -// comparison, we just load the return address from the shadow call stack. So we -// just expect not to see the output from print_and_exit. +// On aarch64 we just load the return address from the shadow call stack so we +// do not expect to see the output from print_and_exit. +// RUN: %clang_scs %s -o %t -DITERATIONS=12 +// RUN: %run %t | FileCheck %S/overflow.c #include <stdio.h> #include <stdlib.h> diff --git a/test/tsan/CMakeLists.txt b/test/tsan/CMakeLists.txt index ba0fd9f23..c62eb1d6b 100644 --- a/test/tsan/CMakeLists.txt +++ b/test/tsan/CMakeLists.txt @@ -8,6 +8,7 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) list(APPEND TSAN_TEST_DEPS tsan) endif() if(COMPILER_RT_LIBCXX_PATH AND + COMPILER_RT_LIBCXXABI_PATH AND COMPILER_RT_TEST_COMPILER_ID STREQUAL "Clang" AND NOT APPLE AND NOT ANDROID) list(APPEND TSAN_TEST_DEPS libcxx_tsan) @@ -30,6 +31,9 @@ foreach(arch ${TSAN_TEST_ARCH}) string(TOLOWER "-${arch}" TSAN_TEST_CONFIG_SUFFIX) get_test_cc_for_arch(${arch} TSAN_TEST_TARGET_CC TSAN_TEST_TARGET_CFLAGS) + string(REPLACE ";" " " LIBDISPATCH_CFLAGS_STRING " ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS}") + string(APPEND TSAN_TEST_TARGET_CFLAGS ${LIBDISPATCH_CFLAGS_STRING}) + string(TOUPPER ${arch} ARCH_UPPER_CASE) set(CONFIG_NAME ${ARCH_UPPER_CASE}Config) diff --git a/test/tsan/Darwin/gcd-apply.mm b/test/tsan/Darwin/gcd-apply.mm deleted file mode 100644 index d9d256203..000000000 --- a/test/tsan/Darwin/gcd-apply.mm +++ /dev/null @@ -1,48 +0,0 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s - -#import <Foundation/Foundation.h> - -#import "../test.h" - -long global; -long array[2]; - -void callback(void *context, size_t i) { - long n = global; - array[i] = n + i; - barrier_wait(&barrier); -} - -int main(int argc, const char *argv[]) { - barrier_init(&barrier, 2); - fprintf(stderr, "start\n"); - - // Warm up GCD (workaround for macOS Sierra where dispatch_apply might run single-threaded). - dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ }); - - dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); - - global = 42; - - dispatch_apply(100, q, ^(size_t i) { - long n = global; - array[i] = n + i; - barrier_wait(&barrier); - }); - - for (int i = 0; i < 100; i++) { - fprintf(stderr, "array[%d] = %ld\n", i, array[i]); - } - - global = 43; - - dispatch_apply_f(100, q, NULL, &callback); - - fprintf(stderr, "done\n"); - return 0; -} - -// CHECK: start -// CHECK: done -// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-async-norace.mm b/test/tsan/Darwin/gcd-async-norace.mm deleted file mode 100644 index 83f8c0d6f..000000000 --- a/test/tsan/Darwin/gcd-async-norace.mm +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s - -#import <Foundation/Foundation.h> - -long global; - -int main() { - NSLog(@"Hello world."); - - global = 42; - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - global = 43; - - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); - }); - - CFRunLoopRun(); - NSLog(@"Done."); -} - -// CHECK: Hello world. -// CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-sync-block-copy.mm b/test/tsan/Darwin/gcd-sync-block-copy.mm index 87658d7f3..a5bdc72fb 100644 --- a/test/tsan/Darwin/gcd-sync-block-copy.mm +++ b/test/tsan/Darwin/gcd-sync-block-copy.mm @@ -1,9 +1,9 @@ // This test verifies that dispatch_sync() doesn't actually copy the block under TSan (without TSan, it doesn't). -// RUN: %clang_tsan -fno-sanitize=thread %s -o %t_no_tsan -framework Foundation -// RUN: %run %t_no_tsan 2>&1 | FileCheck %s - +// RUN: %clang_tsan %s -o %t_no_tsan -framework Foundation -fno-sanitize=thread // RUN: %clang_tsan %s -o %t_with_tsan -framework Foundation + +// RUN: %run %t_no_tsan 2>&1 | FileCheck %s // RUN: %run %t_with_tsan 2>&1 | FileCheck %s #import <Foundation/Foundation.h> @@ -22,9 +22,13 @@ int main(int argc, const char* argv[]) { dispatch_queue_t q = dispatch_queue_create("my.queue", NULL); id object = [[MyClass alloc] init]; + void (^block)(void) = ^ { + NSLog(@"%@", object); + }; dispatch_sync(q, ^{ NSLog(@"%@", object); }); + dispatch_sync(q, block); [object release]; NSLog(@"Done."); return 0; diff --git a/test/tsan/Darwin/gcd-sync-norace.mm b/test/tsan/Darwin/gcd-sync-norace.mm deleted file mode 100644 index 18bf97320..000000000 --- a/test/tsan/Darwin/gcd-sync-norace.mm +++ /dev/null @@ -1,32 +0,0 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s - -#import <Foundation/Foundation.h> - -long global; - -static const long nIter = 1000; - -int main() { - NSLog(@"Hello world."); - - global = 42; - for (int i = 0; i < nIter; i++) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - dispatch_sync(dispatch_get_main_queue(), ^{ - global = i; - - if (i == nIter - 1) { - CFRunLoopStop(CFRunLoopGetCurrent()); - } - }); - }); - } - - CFRunLoopRun(); - NSLog(@"Done."); -} - -// CHECK: Hello world. -// CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Linux/check_memcpy.cc b/test/tsan/Linux/check_memcpy.c index b81efa42a..75dd7da83 100644 --- a/test/tsan/Linux/check_memcpy.cc +++ b/test/tsan/Linux/check_memcpy.c @@ -1,8 +1,8 @@ // Test that verifies TSan runtime doesn't contain compiler-emitted -// memcpy/memmove calls. It builds the binary with TSan and passes it to -// check_memcpy.sh script. +// memcpy/memmove calls. It builds the binary with TSan and check's +// its objdump. -// RUN: %clangxx_tsan -O1 %s -o %t +// RUN: %clang_tsan -O1 %s -o %t // RUN: llvm-objdump -d %t | FileCheck %s // REQUIRES: compiler-rt-optimized diff --git a/test/tsan/Linux/user_malloc.cc b/test/tsan/Linux/user_malloc.cc index b470e6c54..fbe023dda 100644 --- a/test/tsan/Linux/user_malloc.cc +++ b/test/tsan/Linux/user_malloc.cc @@ -1,18 +1,14 @@ -// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s - -// UNSUPPORTED: powerpc64le - -// FIXME: Remove the test or find how to fix this. -// On some distributions, probably with newer glibc, tsan initialization calls -// dlsym which then calls malloc and crashes because of tsan is not initialized. -// UNSUPPORTED: linux +// RUN: %clangxx_tsan -c -O1 -fno-sanitize=thread %s -o %t.o +// RUN: %clangxx_tsan -O1 %s %t.o -o %t && %run %t 2>&1 | FileCheck %s #include <stdio.h> +#include <stdlib.h> + +#if !__has_feature(thread_sanitizer) // Defined by tsan. extern "C" void *__interceptor_malloc(unsigned long size); extern "C" void __interceptor_free(void *p); - extern "C" void *malloc(unsigned long size) { static int first = 0; if (__sync_lock_test_and_set(&first, 1) == 0) @@ -24,12 +20,16 @@ extern "C" void free(void *p) { __interceptor_free(p); } +#else + int main() { volatile char *p = (char*)malloc(10); p[0] = 0; free((void*)p); } +#endif + // CHECK: user malloc // CHECK-NOT: ThreadSanitizer diff --git a/test/tsan/dl_iterate_phdr.cc b/test/tsan/dl_iterate_phdr.cc index 3c9821bf4..4a1fcc21c 100644 --- a/test/tsan/dl_iterate_phdr.cc +++ b/test/tsan/dl_iterate_phdr.cc @@ -1,5 +1,5 @@ // RUN: %clangxx_tsan -O1 %s -DBUILD_SO -fPIC -shared -o %t-so.so -// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s // dl_iterate_phdr doesn't exist on OS X. // UNSUPPORTED: darwin diff --git a/test/tsan/dlclose.cc b/test/tsan/dlclose.cc index d497fd704..6f0716d80 100644 --- a/test/tsan/dlclose.cc +++ b/test/tsan/dlclose.cc @@ -1,5 +1,5 @@ // RUN: %clangxx_tsan -O1 %s -DBUILD_SO -fPIC -shared -o %t-so.so -// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s // Test case for // https://github.com/google/sanitizers/issues/487 diff --git a/test/tsan/fiber_asm.cc b/test/tsan/fiber_asm.cc new file mode 100644 index 000000000..63b63d382 --- /dev/null +++ b/test/tsan/fiber_asm.cc @@ -0,0 +1,86 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// REQUIRES: x86_64-target-arch +// UNSUPPORTED: tvos, watchos +#include "test.h" + +struct ucontext { + void *sp; + void *fiber; +}; + +extern "C" { + void ucontext_do_switch(void **save, void **load); + void ucontext_trampoline(); +} + +__asm__(".global " ASM_SYMBOL(ucontext_do_switch) "\n" + ASM_SYMBOL(ucontext_do_switch) ":\n\t" + "pushq %rbp\n\t" + "pushq %r15\n\t" + "pushq %r14\n\t" + "pushq %r13\n\t" + "pushq %r12\n\t" + "pushq %rbx\n\t" + "movq %rsp, (%rdi)\n\t" + "movq (%rsi), %rsp\n\t" + "popq %rbx\n\t" + "popq %r12\n\t" + "popq %r13\n\t" + "popq %r14\n\t" + "popq %r15\n\t" + "popq %rbp\n\t" + "retq"); + +__asm__(".global " ASM_SYMBOL(ucontext_trampoline) "\n" + ASM_SYMBOL(ucontext_trampoline) ":\n\t" + ".cfi_startproc\n\t" + ".cfi_undefined rip\n\t" + "movq %r12, %rdi\n\t" + "jmpq *%rbx\n\t" + ".cfi_endproc"); + +void ucontext_init(ucontext *context, void *stack, unsigned stack_sz, + void (*func)(void*), void *arg) { + void **sp = reinterpret_cast<void **>(static_cast<char *>(stack) + stack_sz); + *(--sp) = 0; + *(--sp) = reinterpret_cast<void *>(ucontext_trampoline); + *(--sp) = 0; // rbp + *(--sp) = 0; // r15 + *(--sp) = 0; // r14 + *(--sp) = 0; // r13 + *(--sp) = arg; // r12 + *(--sp) = reinterpret_cast<void *>(func); // rbx + context->sp = sp; + context->fiber = __tsan_create_fiber(0); +} + +void ucontext_free(ucontext *context) { + __tsan_destroy_fiber(context->fiber); +} + +__attribute__((no_sanitize_thread)) +void ucontext_switch(ucontext *save, ucontext *load) { + save->fiber = __tsan_get_current_fiber(); + __tsan_switch_to_fiber(load->fiber, 0); + ucontext_do_switch(&save->sp, &load->sp); +} + +char stack[64 * 1024] __attribute__((aligned(16))); + +ucontext uc, orig_uc; + +void func(void *arg) { + __asm__ __volatile__(".cfi_undefined rip"); + ucontext_switch(&uc, &orig_uc); +} + +int main() { + ucontext_init(&uc, stack, sizeof(stack), func, 0); + ucontext_switch(&orig_uc, &uc); + ucontext_free(&uc); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/tsan/fiber_from_thread.cc b/test/tsan/fiber_from_thread.cc new file mode 100644 index 000000000..a432eb039 --- /dev/null +++ b/test/tsan/fiber_from_thread.cc @@ -0,0 +1,48 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// UNSUPPORTED: tvos, watchos +#include "sanitizer_common/sanitizer_ucontext.h" +#include "test.h" + +char stack[64 * 1024] __attribute__((aligned(16))); + +ucontext_t uc, orig_uc1, orig_uc2; +void *fiber, *orig_fiber1, *orig_fiber2; + +int var; + +void *Thread(void *x) { + orig_fiber2 = __tsan_get_current_fiber(); + swapcontext(&orig_uc2, &orig_uc1); + return 0; +} + +void func() { + pthread_t t; + pthread_create(&t, 0, Thread, 0); + pthread_join(t, 0); + __tsan_switch_to_fiber(orig_fiber1, 0); + swapcontext(&uc, &orig_uc1); +} + +int main() { + orig_fiber1 = __tsan_get_current_fiber(); + fiber = __tsan_create_fiber(0); + getcontext(&uc); + uc.uc_stack.ss_sp = stack; + uc.uc_stack.ss_size = sizeof(stack); + uc.uc_link = 0; + makecontext(&uc, func, 0); + var = 1; + __tsan_switch_to_fiber(fiber, 0); + swapcontext(&orig_uc1, &uc); + var = 2; + __tsan_switch_to_fiber(orig_fiber2, 0); + swapcontext(&orig_uc1, &orig_uc2); + var = 3; + __tsan_destroy_fiber(fiber); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/tsan/fiber_longjmp.cc b/test/tsan/fiber_longjmp.cc new file mode 100644 index 000000000..bcf7dbdbf --- /dev/null +++ b/test/tsan/fiber_longjmp.cc @@ -0,0 +1,80 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// UNSUPPORTED: tvos, watchos +#include "sanitizer_common/sanitizer_ucontext.h" +#include "test.h" +#include <setjmp.h> + +char stack[64 * 1024] __attribute__((aligned(16))); + +sigjmp_buf jmpbuf, orig_jmpbuf[2]; +void *fiber, *orig_fiber[2]; + +const unsigned N = 1000; + +__attribute__((noinline)) +void switch0() { + if (!sigsetjmp(jmpbuf, 0)) { + __tsan_switch_to_fiber(orig_fiber[0], 0); + siglongjmp(orig_jmpbuf[0], 1); + } +} + +void func() { + if (!sigsetjmp(jmpbuf, 0)) { + __tsan_switch_to_fiber(orig_fiber[0], 0); + siglongjmp(orig_jmpbuf[0], 1); + } + for (;;) { + switch0(); + if (!sigsetjmp(jmpbuf, 0)) { + __tsan_switch_to_fiber(orig_fiber[1], 0); + siglongjmp(orig_jmpbuf[1], 1); + } + } +} + +void *Thread(void *x) { + orig_fiber[1] = __tsan_get_current_fiber(); + for (unsigned i = 0; i < N; i++) { + barrier_wait(&barrier); + if (!sigsetjmp(orig_jmpbuf[1], 0)) { + __tsan_switch_to_fiber(fiber, 0); + siglongjmp(jmpbuf, 1); + } + barrier_wait(&barrier); + } + return 0; +} + +int main() { + fiber = __tsan_create_fiber(0); + barrier_init(&barrier, 2); + pthread_t t; + pthread_create(&t, 0, Thread, 0); + orig_fiber[0] = __tsan_get_current_fiber(); + ucontext_t uc, orig_uc; + getcontext(&uc); + uc.uc_stack.ss_sp = stack; + uc.uc_stack.ss_size = sizeof(stack); + uc.uc_link = 0; + makecontext(&uc, func, 0); + if (!sigsetjmp(orig_jmpbuf[0], 0)) { + __tsan_switch_to_fiber(fiber, 0); + swapcontext(&orig_uc, &uc); + } + for (unsigned i = 0; i < N; i++) { + if (!sigsetjmp(orig_jmpbuf[0], 0)) { + __tsan_switch_to_fiber(fiber, 0); + siglongjmp(jmpbuf, 1); + } + barrier_wait(&barrier); + barrier_wait(&barrier); + } + pthread_join(t, 0); + __tsan_destroy_fiber(fiber); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/tsan/fiber_race.cc b/test/tsan/fiber_race.cc new file mode 100644 index 000000000..4724c72fc --- /dev/null +++ b/test/tsan/fiber_race.cc @@ -0,0 +1,36 @@ +// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s +// UNSUPPORTED: tvos, watchos +#include "sanitizer_common/sanitizer_ucontext.h" +#include "test.h" + +char stack[64 * 1024] __attribute__((aligned(16))); + +ucontext_t uc, orig_uc; +void *fiber, *orig_fiber; + +int var; + +void func() { + var = 1; + __tsan_switch_to_fiber(orig_fiber, __tsan_switch_to_fiber_no_sync); + swapcontext(&uc, &orig_uc); +} + +int main() { + orig_fiber = __tsan_get_current_fiber(); + fiber = __tsan_create_fiber(0); + getcontext(&uc); + uc.uc_stack.ss_sp = stack; + uc.uc_stack.ss_size = sizeof(stack); + uc.uc_link = 0; + makecontext(&uc, func, 0); + var = 2; + __tsan_switch_to_fiber(fiber, __tsan_switch_to_fiber_no_sync); + swapcontext(&orig_uc, &uc); + __tsan_destroy_fiber(fiber); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK: WARNING: ThreadSanitizer: data race +// CHECK: PASS diff --git a/test/tsan/fiber_simple.cc b/test/tsan/fiber_simple.cc new file mode 100644 index 000000000..550e5be82 --- /dev/null +++ b/test/tsan/fiber_simple.cc @@ -0,0 +1,36 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// UNSUPPORTED: tvos, watchos +#include "sanitizer_common/sanitizer_ucontext.h" +#include "test.h" + +char stack[64 * 1024] __attribute__((aligned(16))); + +ucontext_t uc, orig_uc; +void *fiber, *orig_fiber; + +int var; + +void func() { + var = 1; + __tsan_switch_to_fiber(orig_fiber, 0); + swapcontext(&uc, &orig_uc); +} + +int main() { + orig_fiber = __tsan_get_current_fiber(); + fiber = __tsan_create_fiber(0); + getcontext(&uc); + uc.uc_stack.ss_sp = stack; + uc.uc_stack.ss_size = sizeof(stack); + uc.uc_link = 0; + makecontext(&uc, func, 0); + var = 2; + __tsan_switch_to_fiber(fiber, 0); + swapcontext(&orig_uc, &uc); + __tsan_destroy_fiber(fiber); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/tsan/fiber_two_threads.cc b/test/tsan/fiber_two_threads.cc new file mode 100644 index 000000000..58865860d --- /dev/null +++ b/test/tsan/fiber_two_threads.cc @@ -0,0 +1,62 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// UNSUPPORTED: tvos, watchos +#include "sanitizer_common/sanitizer_ucontext.h" +#include "test.h" + +char stack[64 * 1024] __attribute__((aligned(16))); + +ucontext_t uc, orig_uc[2]; +void *fiber, *orig_fiber[2]; + +const unsigned N = 1000; + +__attribute__((noinline)) +void switch0() { + __tsan_switch_to_fiber(orig_fiber[0], 0); + swapcontext(&uc, &orig_uc[0]); +} + +void func() { + for (;;) { + switch0(); + __tsan_switch_to_fiber(orig_fiber[1], 0); + swapcontext(&uc, &orig_uc[1]); + } +} + +void *Thread(void *x) { + orig_fiber[1] = __tsan_get_current_fiber(); + for (unsigned i = 0; i < N; i++) { + barrier_wait(&barrier); + __tsan_switch_to_fiber(fiber, 0); + swapcontext(&orig_uc[1], &uc); + barrier_wait(&barrier); + } + return 0; +} + +int main() { + fiber = __tsan_create_fiber(0); + barrier_init(&barrier, 2); + pthread_t t; + pthread_create(&t, 0, Thread, 0); + orig_fiber[0] = __tsan_get_current_fiber(); + getcontext(&uc); + uc.uc_stack.ss_sp = stack; + uc.uc_stack.ss_size = sizeof(stack); + uc.uc_link = 0; + makecontext(&uc, func, 0); + for (unsigned i = 0; i < N; i++) { + __tsan_switch_to_fiber(fiber, 0); + swapcontext(&orig_uc[0], &uc); + barrier_wait(&barrier); + barrier_wait(&barrier); + } + pthread_join(t, 0); + __tsan_destroy_fiber(fiber); + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/tsan/ignore_lib0.cc b/test/tsan/ignore_lib0.cc index 2b217f21f..1d375336b 100644 --- a/test/tsan/ignore_lib0.cc +++ b/test/tsan/ignore_lib0.cc @@ -2,7 +2,7 @@ // RUN: mkdir %t-dir // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib0.so -// RUN: %clangxx_tsan -O1 %s -L%t-dir -lignore_lib0 -o %t +// RUN: %clangxx_tsan -O1 %s -L%t-dir -lignore_lib0 %link_libcxx_tsan -o %t // RUN: echo running w/o suppressions: // RUN: env LD_LIBRARY_PATH=%t-dir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} %deflake %run %t | FileCheck %s --check-prefix=CHECK-NOSUPP // RUN: echo running with suppressions: diff --git a/test/tsan/ignore_lib1.cc b/test/tsan/ignore_lib1.cc index 1660cf3e4..2a708eaab 100644 --- a/test/tsan/ignore_lib1.cc +++ b/test/tsan/ignore_lib1.cc @@ -2,7 +2,7 @@ // RUN: mkdir %t-dir // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib1.so -// RUN: %clangxx_tsan -O1 %s -o %t-dir/executable +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t-dir/executable // RUN: echo running w/o suppressions: // RUN: %deflake %run %t-dir/executable | FileCheck %s --check-prefix=CHECK-NOSUPP // RUN: echo running with suppressions: diff --git a/test/tsan/ignore_lib2.cc b/test/tsan/ignore_lib2.cc index e0dac5670..05b7c2ed9 100644 --- a/test/tsan/ignore_lib2.cc +++ b/test/tsan/ignore_lib2.cc @@ -3,7 +3,7 @@ // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib2_0.so // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib2_1.so -// RUN: %clangxx_tsan -O1 %s -o %t-dir/executable +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t-dir/executable // RUN: %env_tsan_opts=suppressions='%s.supp' %deflake %run %t-dir/executable | FileCheck %s // Tests that called_from_lib suppression matched against 2 libraries diff --git a/test/tsan/ignore_lib3.cc b/test/tsan/ignore_lib3.cc index a5af07fdd..b1a3940d0 100644 --- a/test/tsan/ignore_lib3.cc +++ b/test/tsan/ignore_lib3.cc @@ -2,7 +2,7 @@ // RUN: mkdir %t-dir // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib3.so -// RUN: %clangxx_tsan -O1 %s -o %t-dir/executable +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t-dir/executable // RUN: %env_tsan_opts=suppressions='%s.supp' %deflake %run %t-dir/executable | FileCheck %s // Tests that unloading of a library matched against called_from_lib suppression diff --git a/test/tsan/ignore_lib4.cc b/test/tsan/ignore_lib4.cc index da636ae3b..06241c7b8 100644 --- a/test/tsan/ignore_lib4.cc +++ b/test/tsan/ignore_lib4.cc @@ -2,7 +2,7 @@ // RUN: mkdir %t-dir // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -shared -o %t-dir/libignore_lib4.so -// RUN: %clangxx_tsan -O1 %s -o %t-dir/executable +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t-dir/executable // RUN: echo "called_from_lib:libignore_lib4.so" > %t-dir/executable.supp // RUN: %env_tsan_opts=suppressions='%t-dir/executable.supp' %run %t-dir/executable 2>&1 | FileCheck %s diff --git a/test/tsan/ignore_lib5.cc b/test/tsan/ignore_lib5.cc index 43780daf7..81a1840c9 100644 --- a/test/tsan/ignore_lib5.cc +++ b/test/tsan/ignore_lib5.cc @@ -2,7 +2,7 @@ // RUN: mkdir %t-dir // RUN: %clangxx_tsan -O1 %s -DLIB -fPIC -fno-sanitize=thread -shared -o %t-dir/libignore_lib1.so -// RUN: %clangxx_tsan -O1 %s -o %t-dir/executable +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t-dir/executable // RUN: echo running w/o suppressions: // RUN: %deflake %run %t-dir/executable | FileCheck %s --check-prefix=CHECK-NOSUPP // RUN: echo running with suppressions: diff --git a/test/tsan/libcxx/std_shared_ptr.cc b/test/tsan/libcxx/std_shared_ptr.cc index 191a17cc7..e8e168a68 100644 --- a/test/tsan/libcxx/std_shared_ptr.cc +++ b/test/tsan/libcxx/std_shared_ptr.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s #include <stdio.h> #include <memory> #include <thread> diff --git a/test/tsan/Darwin/gcd-after.mm b/test/tsan/libdispatch/after.c index 4d66c5085..59281e76d 100644 --- a/test/tsan/Darwin/gcd-after.mm +++ b/test/tsan/libdispatch/after.c @@ -1,37 +1,38 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long my_global; long my_global2; +dispatch_semaphore_t done; void callback(void *context) { my_global2 = 42; - dispatch_async(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetMain()); - }); + dispatch_semaphore_signal(done); } int main(int argc, const char *argv[]) { fprintf(stderr, "start\n"); + done = dispatch_semaphore_create(0); - my_global = 10; dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + my_global = 10; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_MSEC)), q, ^{ my_global = 42; - dispatch_async(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetMain()); - }); + dispatch_semaphore_signal(done); }); - CFRunLoopRun(); my_global2 = 10; dispatch_after_f(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_MSEC)), q, NULL, &callback); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); fprintf(stderr, "done\n"); return 0; } diff --git a/test/tsan/Darwin/gcd-apply-race.mm b/test/tsan/libdispatch/apply-race.c index a7bf663a9..10e954c23 100644 --- a/test/tsan/Darwin/gcd-apply-race.mm +++ b/test/tsan/libdispatch/apply-race.c @@ -1,9 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -#import "../test.h" +#include "../test.h" long global; diff --git a/test/tsan/libdispatch/apply.c b/test/tsan/libdispatch/apply.c new file mode 100644 index 000000000..08735b38e --- /dev/null +++ b/test/tsan/libdispatch/apply.c @@ -0,0 +1,57 @@ +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' + +#include <dispatch/dispatch.h> + +#include "../test.h" + +const size_t size = 2; +long global; +long array[size]; + +void callback(void *context, size_t i) { + long n = global; + array[i] = n + i; + barrier_wait(&barrier); +} + +int main(int argc, const char *argv[]) { + fprintf(stderr, "start\n"); + + // Warm up GCD (workaround for macOS Sierra where dispatch_apply might run single-threaded). + dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ }); + + dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); + + global = 42; + + barrier_init(&barrier, size); + dispatch_apply(size, q, ^(size_t i) { + long n = global; + array[i] = n + i; + barrier_wait(&barrier); + }); + + for (size_t i = 0; i < size; i++) { + fprintf(stderr, "array[%ld] = %ld\n", i, array[i]); + } + + global = 142; + + barrier_init(&barrier, size); + dispatch_apply_f(size, q, NULL, &callback); + + for (size_t i = 0; i < size; i++) { + fprintf(stderr, "array[%ld] = %ld\n", i, array[i]); + } + + fprintf(stderr, "done\n"); + return 0; +} + +// CHECK: start +// CHECK: array[0] = 42 +// CHECK: array[1] = 43 +// CHECK: array[0] = 142 +// CHECK: array[1] = 143 +// CHECK: done diff --git a/test/tsan/libdispatch/async-norace.c b/test/tsan/libdispatch/async-norace.c new file mode 100644 index 000000000..c3b603579 --- /dev/null +++ b/test/tsan/libdispatch/async-norace.c @@ -0,0 +1,27 @@ +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s + +#include "dispatch/dispatch.h" + +#include <stdio.h> + +long global; + +int main() { + fprintf(stderr, "Hello world.\n"); + dispatch_semaphore_t done = dispatch_semaphore_create(0); + + global = 42; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + global = 43; + + dispatch_semaphore_signal(done); + }); + + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); +} + +// CHECK: Hello world. +// CHECK: Done. +// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-async-race.mm b/test/tsan/libdispatch/async-race.c index cb8fb4bf5..6701f101c 100644 --- a/test/tsan/Darwin/gcd-async-race.mm +++ b/test/tsan/libdispatch/async-race.c @@ -1,15 +1,16 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" -#import "../test.h" +#include "../test.h" long global; int main() { - NSLog(@"Hello world."); + fprintf(stderr, "Hello world.\n"); print_address("addr=", 1, &global); + dispatch_semaphore_t done = dispatch_semaphore_create(0); barrier_init(&barrier, 2); global = 42; @@ -22,17 +23,15 @@ int main() { barrier_wait(&barrier); global = 44; - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); - CFRunLoopRun(); - NSLog(@"Done."); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); } // CHECK: Hello world. // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] // CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (gcd-async-race.mm.tmp+0x{{[0-9,a-f]+}}) +// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (async-race.c.tmp+0x{{[0-9,a-f]+}}) // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-barrier-race.mm b/test/tsan/libdispatch/barrier-race.c index c11e147ff..278824424 100644 --- a/test/tsan/Darwin/gcd-barrier-race.mm +++ b/test/tsan/libdispatch/barrier-race.c @@ -1,15 +1,16 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" -#import "../test.h" +#include "../test.h" long global; int main() { fprintf(stderr, "Hello world.\n"); print_address("addr=", 1, &global); + dispatch_semaphore_t done = dispatch_semaphore_create(0); barrier_init(&barrier, 2); dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -31,18 +32,16 @@ int main() { barrier_wait(&barrier); global = 44; - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); }); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); fprintf(stderr, "Done.\n"); } // CHECK: Hello world. // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] // CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (gcd-barrier-race.mm.tmp+0x{{[0-9,a-f]+}}) +// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (barrier-race.c.tmp+0x{{[0-9,a-f]+}}) // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-barrier.mm b/test/tsan/libdispatch/barrier.c index 9d4dcb215..52b115ed3 100644 --- a/test/tsan/Darwin/gcd-barrier.mm +++ b/test/tsan/libdispatch/barrier.c @@ -1,15 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" -#import "../test.h" +#include "../test.h" long global; int main() { fprintf(stderr, "Hello world.\n"); - print_address("addr=", 1, &global); + dispatch_semaphore_t done = dispatch_semaphore_create(0); barrier_init(&barrier, 2); dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -34,13 +34,11 @@ int main() { }); barrier_wait(&barrier); - - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + + dispatch_semaphore_signal(done); }); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); fprintf(stderr, "Done.\n"); } diff --git a/test/tsan/Darwin/gcd-blocks.mm b/test/tsan/libdispatch/blocks.c index 1aac7e1f2..413b22085 100644 --- a/test/tsan/Darwin/gcd-blocks.mm +++ b/test/tsan/libdispatch/blocks.c @@ -1,29 +1,32 @@ -// RUN: %clangxx_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> +#include <assert.h> int main() { fprintf(stderr, "start\n"); + dispatch_semaphore_t done = dispatch_semaphore_create(0); dispatch_queue_t background_q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_queue_t main_q = dispatch_get_main_queue(); + dispatch_queue_t serial_q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); + assert(background_q != serial_q); dispatch_async(background_q, ^{ __block long block_var = 0; - dispatch_sync(main_q, ^{ + dispatch_sync(serial_q, ^{ block_var = 42; }); fprintf(stderr, "block_var = %ld\n", block_var); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); - - CFRunLoopRun(); + + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); fprintf(stderr, "done\n"); } diff --git a/test/tsan/Darwin/gcd-data.mm b/test/tsan/libdispatch/data.c index d451cf5e8..70c503bda 100644 --- a/test/tsan/Darwin/gcd-data.mm +++ b/test/tsan/libdispatch/data.c @@ -1,9 +1,12 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -long global; +#include <stdio.h> +#include <string.h> + +long global = 42; int main(int argc, const char *argv[]) { fprintf(stderr, "Hello world.\n"); @@ -11,26 +14,25 @@ int main(int argc, const char *argv[]) { dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); dispatch_semaphore_t sem = dispatch_semaphore_create(0); - global = 44; - dispatch_data_t data = dispatch_data_create("buffer", 6, q, ^{ + const char *buffer = "buffer"; + size_t size = strlen(buffer); + + dispatch_data_t data = dispatch_data_create(buffer, size, q, ^{ fprintf(stderr, "Data destructor.\n"); global++; dispatch_semaphore_signal(sem); }); dispatch_release(data); - data = nil; dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); - data = dispatch_data_create("buffer", 6, q, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + data = dispatch_data_create(buffer, size, q, DISPATCH_DATA_DESTRUCTOR_DEFAULT); dispatch_release(data); - data = nil; fprintf(stderr, "Done.\n"); } // CHECK: Hello world. // CHECK: Data destructor. -// CHECK-NOT: WARNING: ThreadSanitizer // CHECK: Done. diff --git a/test/tsan/Darwin/dispatch_main.mm b/test/tsan/libdispatch/dispatch_main.c index f4c1e44bc..9e4a3ea42 100644 --- a/test/tsan/Darwin/dispatch_main.mm +++ b/test/tsan/libdispatch/dispatch_main.c @@ -1,10 +1,13 @@ // Check that we don't crash when dispatch_main calls pthread_exit which // quits the main thread. -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> +#include <stdlib.h> int main() { fprintf(stderr,"Hello world"); @@ -33,6 +36,5 @@ int main() { } // CHECK: Hello world +// CHECK: 123 // CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer -// CHECK-NOT: CHECK failed diff --git a/test/tsan/Darwin/dispatch_once_deadlock.mm b/test/tsan/libdispatch/dispatch_once_deadlock.c index e109f64a8..8379f81a9 100644 --- a/test/tsan/Darwin/dispatch_once_deadlock.mm +++ b/test/tsan/libdispatch/dispatch_once_deadlock.c @@ -1,10 +1,12 @@ // Check that calling dispatch_once from a report callback works. -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: not %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> -#import <pthread.h> +#include <dispatch/dispatch.h> + +#include <pthread.h> +#include <stdio.h> long g = 0; long h = 0; @@ -16,7 +18,7 @@ void f() { h++; } -extern "C" void __tsan_on_report() { +void __tsan_on_report() { fprintf(stderr, "Report.\n"); f(); } @@ -26,8 +28,8 @@ int main() { f(); - pthread_mutex_t mutex = {0}; - pthread_mutex_lock(&mutex); + pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_unlock(&mutex); // Unlock of an unlocked mutex fprintf(stderr, "g = %ld.\n", g); fprintf(stderr, "h = %ld.\n", h); diff --git a/test/tsan/Darwin/gcd-fd.mm b/test/tsan/libdispatch/fd.c index 838cf20ca..9a77a3f3c 100644 --- a/test/tsan/Darwin/gcd-fd.mm +++ b/test/tsan/libdispatch/fd.c @@ -1,7 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> long my_global = 0; @@ -11,14 +13,14 @@ int main(int argc, const char *argv[]) { dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); dispatch_semaphore_t sem = dispatch_semaphore_create(0); - NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; + const char *path = tempnam(NULL, "libdispatch-fd-"); - dispatch_io_t channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path.fileSystemRepresentation, O_CREAT | O_WRONLY, + dispatch_io_t channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path, O_CREAT | O_WRONLY, 0666, queue, ^(int error) { }); dispatch_io_set_high_water(channel, 1); - NSData *ns_data = [NSMutableData dataWithLength:1000]; - dispatch_data_t data = dispatch_data_create(ns_data.bytes, ns_data.length, NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + char buf[1000]; + dispatch_data_t data = dispatch_data_create(buf, sizeof(buf), NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); my_global++; dispatch_io_write(channel, 0, data, queue, ^(bool done, dispatch_data_t remainingData, int error) { @@ -34,7 +36,7 @@ int main(int argc, const char *argv[]) { dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); my_global++; dispatch_io_close(channel, 0); - channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path.fileSystemRepresentation, O_RDONLY, + channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path, O_RDONLY, 0, queue, ^(int error) { }); dispatch_io_set_high_water(channel, 1); diff --git a/test/tsan/Darwin/gcd-groups-destructor.mm b/test/tsan/libdispatch/groups-destructor.cc index 05c65c04b..72338ce6c 100644 --- a/test/tsan/Darwin/gcd-groups-destructor.mm +++ b/test/tsan/libdispatch/groups-destructor.cc @@ -1,10 +1,11 @@ -// RUN: %clangxx_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_tsan %s %link_libcxx_tsan -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -#import <memory> -#import <stdatomic.h> +#include <memory> +#include <stdatomic.h> +#include <cstdio> _Atomic(long) destructor_counter = 0; @@ -39,5 +40,4 @@ int main(int argc, const char *argv[]) { } // CHECK: Hello world. -// CHECK-NOT: WARNING: ThreadSanitizer // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-groups-leave.mm b/test/tsan/libdispatch/groups-leave.c index 49fd8e210..f63d6e5f5 100644 --- a/test/tsan/Darwin/gcd-groups-leave.mm +++ b/test/tsan/libdispatch/groups-leave.c @@ -1,9 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -#import "../test.h" +#include "../test.h" dispatch_semaphore_t sem; @@ -52,5 +52,4 @@ int main() { } // CHECK: Hello world. -// CHECK-NOT: WARNING: ThreadSanitizer // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-groups-norace.mm b/test/tsan/libdispatch/groups-norace.c index e8501692f..0a8447e3a 100644 --- a/test/tsan/Darwin/gcd-groups-norace.mm +++ b/test/tsan/libdispatch/groups-norace.c @@ -1,15 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" -#import "../test.h" +#include <stdio.h> long global; int main() { - NSLog(@"Hello world."); - NSLog(@"addr=%p\n", &global); + fprintf(stderr, "Hello world.\n"); + dispatch_semaphore_t done = dispatch_semaphore_create(0); dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); global = 42; @@ -39,13 +39,11 @@ int main() { dispatch_group_notify(g, q, ^{ global = 48; - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); - CFRunLoopRun(); - NSLog(@"Done."); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); } // CHECK: Hello world. diff --git a/test/tsan/Darwin/gcd-groups-stress.mm b/test/tsan/libdispatch/groups-stress.c index cfe4deb0a..0f24ff7c9 100644 --- a/test/tsan/Darwin/gcd-groups-stress.mm +++ b/test/tsan/libdispatch/groups-stress.c @@ -1,17 +1,19 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> void notify_callback(void *context) { // Do nothing. } int main() { - NSLog(@"Hello world."); + fprintf(stderr, "Hello world."); dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - + for (int i = 0; i < 300000; i++) { dispatch_group_t g = dispatch_group_create(); dispatch_group_enter(g); @@ -34,10 +36,8 @@ int main() { dispatch_release(g); } - NSLog(@"Done."); + fprintf(stderr, "Done."); } // CHECK: Hello world. // CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer -// CHECK-NOT: CHECK failed diff --git a/test/tsan/Darwin/gcd-io-barrier-race.mm b/test/tsan/libdispatch/io-barrier-race.c index 137c3b267..5e7fe80f0 100644 --- a/test/tsan/Darwin/gcd-io-barrier-race.mm +++ b/test/tsan/libdispatch/io-barrier-race.c @@ -1,7 +1,7 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> #import "../test.h" @@ -19,10 +19,9 @@ int main(int argc, const char *argv[]) { queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); sem = dispatch_semaphore_create(0); - NSString *ns_path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; - path = ns_path.fileSystemRepresentation; - NSData *ns_data = [NSMutableData dataWithLength:1000]; - data = dispatch_data_create(ns_data.bytes, ns_data.length, NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + path = tempnam(NULL, "libdispatch-io-barrier-race-"); + char buf[1000]; + data = dispatch_data_create(buf, sizeof(buf), NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); dispatch_io_t channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path, O_CREAT | O_WRONLY, 0666, queue, ^(int error) { }); if (! channel) abort(); @@ -51,5 +50,5 @@ int main(int argc, const char *argv[]) { // CHECK: Hello world. // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] // CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Location is global 'my_global' {{(of size 8 )?}}at [[ADDR]] (gcd-io-barrier-race.mm.tmp+0x{{[0-9,a-f]+}}) +// CHECK: Location is global 'my_global' {{(of size 8 )?}}at [[ADDR]] (io-barrier-race.c.tmp+0x{{[0-9,a-f]+}}) // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-io-barrier.mm b/test/tsan/libdispatch/io-barrier.c index af92b03c1..849644e44 100644 --- a/test/tsan/Darwin/gcd-io-barrier.mm +++ b/test/tsan/libdispatch/io-barrier.c @@ -1,7 +1,10 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> +#include <stdlib.h> dispatch_queue_t queue; dispatch_data_t data; @@ -15,10 +18,9 @@ int main(int argc, const char *argv[]) { queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); sem = dispatch_semaphore_create(0); - NSString *ns_path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; - path = ns_path.fileSystemRepresentation; - NSData *ns_data = [NSMutableData dataWithLength:1000]; - data = dispatch_data_create(ns_data.bytes, ns_data.length, NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + path = tempnam(NULL, "libdispatch-io-barrier"); + char buf[1000]; + data = dispatch_data_create(buf, sizeof(buf), NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); dispatch_io_t channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path, O_CREAT | O_WRONLY, 0666, queue, ^(int error) { }); if (! channel) abort(); diff --git a/test/tsan/Darwin/gcd-io-cleanup.mm b/test/tsan/libdispatch/io-cleanup.c index 570e37dd0..3e1c9d78e 100644 --- a/test/tsan/Darwin/gcd-io-cleanup.mm +++ b/test/tsan/libdispatch/io-cleanup.c @@ -1,7 +1,10 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> +#include <stdlib.h> long my_global = 0; @@ -10,8 +13,7 @@ int main(int argc, const char *argv[]) { dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); dispatch_semaphore_t sem = dispatch_semaphore_create(0); - NSString *ns_path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; - const char *path = ns_path.fileSystemRepresentation; + const char *path = tempnam(NULL, "libdispatch-io-cleanup-"); dispatch_io_t channel; dispatch_fd_t fd = open(path, O_CREAT | O_WRONLY, 0666); diff --git a/test/tsan/Darwin/gcd-io-race.mm b/test/tsan/libdispatch/io-race.c index 99000fca1..27d315c4b 100644 --- a/test/tsan/Darwin/gcd-io-race.mm +++ b/test/tsan/libdispatch/io-race.c @@ -1,11 +1,11 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s // REQUIRES: disabled -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -#import "../test.h" +#include "../test.h" dispatch_queue_t queue; dispatch_data_t data; @@ -21,10 +21,9 @@ int main(int argc, const char *argv[]) { queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); sem = dispatch_semaphore_create(0); - NSString *ns_path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; - path = ns_path.fileSystemRepresentation; - NSData *ns_data = [NSMutableData dataWithLength:1000]; - data = dispatch_data_create(ns_data.bytes, ns_data.length, NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + path = tempnam(NULL, "libdispatch-io-race"); + char buf[1000]; + data = dispatch_data_create(buf, sizeof(buf), NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); dispatch_io_t channel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, path, O_CREAT | O_WRONLY, 0666, queue, ^(int error) { }); if (! channel) abort(); @@ -52,5 +51,5 @@ int main(int argc, const char *argv[]) { // CHECK: Hello world. // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] // CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Location is global 'my_global' {{(of size 8 )?}}at [[ADDR]] (gcd-io-race.mm.tmp+0x{{[0-9,a-f]+}}) +// CHECK: Location is global 'my_global' {{(of size 8 )?}}at [[ADDR]] (io-race.c.tmp+0x{{[0-9,a-f]+}}) // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-io.mm b/test/tsan/libdispatch/io.c index 70ded4041..6302e743d 100644 --- a/test/tsan/Darwin/gcd-io.mm +++ b/test/tsan/libdispatch/io.c @@ -1,7 +1,10 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> +#include <stdlib.h> dispatch_queue_t queue; dispatch_data_t data; @@ -98,10 +101,9 @@ int main(int argc, const char *argv[]) { queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); sem = dispatch_semaphore_create(0); - NSString *ns_path = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"temp-gcd-io.%d", getpid()]]; - path = ns_path.fileSystemRepresentation; - NSData *ns_data = [NSMutableData dataWithLength:1000]; - data = dispatch_data_create(ns_data.bytes, ns_data.length, NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + path = tempnam(NULL, "libdispatch-io-"); + char buf[1000]; + data = dispatch_data_create(buf, sizeof(buf), NULL, DISPATCH_DATA_DESTRUCTOR_DEFAULT); test_dispatch_io_write(); test_dispatch_write(); diff --git a/test/tsan/libdispatch/lit.local.cfg b/test/tsan/libdispatch/lit.local.cfg new file mode 100644 index 000000000..9d3cf7548 --- /dev/null +++ b/test/tsan/libdispatch/lit.local.cfg @@ -0,0 +1,17 @@ +def getRoot(config): + if not config.parent: + return config + return getRoot(config.parent) + +root = getRoot(config) + +if 'libdispatch' in root.available_features: + additional_cflags = ' -fblocks ' + for index, (template, replacement) in enumerate(config.substitutions): + if template in ['%clang_tsan ', '%clangxx_tsan ']: + config.substitutions[index] = (template, replacement + additional_cflags) +else: + config.unsupported = True + +if config.host_os == 'Darwin': + config.environment['TSAN_OPTIONS'] += ':ignore_noninstrumented_modules=1' diff --git a/test/tsan/Darwin/gcd-once.mm b/test/tsan/libdispatch/once.c index 70e588aaf..d473b3426 100644 --- a/test/tsan/Darwin/gcd-once.mm +++ b/test/tsan/libdispatch/once.c @@ -1,9 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> -#import "../test.h" +#include "../test.h" static const long kNumThreads = 4; @@ -13,7 +13,7 @@ long global2; static dispatch_once_t once_token; static dispatch_once_t once_token2; -void f(void *) { +void f(void *a) { global2 = 42; usleep(100000); } @@ -52,4 +52,3 @@ int main() { // CHECK: Hello world. // CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-semaphore-norace.mm b/test/tsan/libdispatch/semaphore-norace.c index fd5d14655..36e03dce8 100644 --- a/test/tsan/Darwin/gcd-semaphore-norace.mm +++ b/test/tsan/libdispatch/semaphore-norace.c @@ -1,29 +1,30 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> long global; int main() { - NSLog(@"Hello world."); + fprintf(stderr, "Hello world."); global = 42; - + dispatch_semaphore_t sem = dispatch_semaphore_create(0); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - + global = 43; dispatch_semaphore_signal(sem); }); - + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); global = 44; - NSLog(@"Done."); + fprintf(stderr, "Done."); return 0; } // CHECK: Hello world. // CHECK: Done. -// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-serial-queue-norace.mm b/test/tsan/libdispatch/serial-queue-norace.c index 8754b618d..17fb5f1c7 100644 --- a/test/tsan/Darwin/gcd-serial-queue-norace.mm +++ b/test/tsan/libdispatch/serial-queue-norace.c @@ -1,15 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" -#import "../test.h" +#include <stdio.h> long global; int main() { - NSLog(@"Hello world."); - NSLog(@"addr=%p\n", &global); + fprintf(stderr, "Hello world.\n"); + dispatch_semaphore_t done = dispatch_semaphore_create(0); dispatch_queue_t q1 = dispatch_queue_create("my.queue1", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t q2 = dispatch_queue_create("my.queue2", DISPATCH_QUEUE_SERIAL); @@ -26,13 +26,11 @@ int main() { } dispatch_barrier_async(q1, ^{ - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); - CFRunLoopRun(); - NSLog(@"Done."); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); } // CHECK: Hello world. diff --git a/test/tsan/Darwin/gcd-source-cancel.mm b/test/tsan/libdispatch/source-cancel.c index 8aa6f1069..bc7282d31 100644 --- a/test/tsan/Darwin/gcd-source-cancel.mm +++ b/test/tsan/libdispatch/source-cancel.c @@ -1,11 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; int main(int argc, const char *argv[]) { + dispatch_semaphore_t done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -19,15 +23,13 @@ int main(int argc, const char *argv[]) { dispatch_source_set_cancel_handler(source, ^{ fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); dispatch_resume(source); dispatch_cancel(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-cancel2.mm b/test/tsan/libdispatch/source-cancel2.c index 92b31d7d0..8ec2732dc 100644 --- a/test/tsan/Darwin/gcd-source-cancel2.mm +++ b/test/tsan/libdispatch/source-cancel2.c @@ -1,19 +1,22 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; +dispatch_semaphore_t done; void handler(void *arg) { fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); } int main(int argc, const char *argv[]) { + done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -29,7 +32,7 @@ int main(int argc, const char *argv[]) { dispatch_resume(source); dispatch_cancel(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-event.mm b/test/tsan/libdispatch/source-event.c index e707b6551..f07dd1ea7 100644 --- a/test/tsan/Darwin/gcd-source-event.mm +++ b/test/tsan/libdispatch/source-event.c @@ -1,11 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; int main(int argc, const char *argv[]) { + dispatch_semaphore_t done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -19,14 +23,12 @@ int main(int argc, const char *argv[]) { dispatch_source_set_event_handler(source, ^{ fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); dispatch_resume(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-event2.mm b/test/tsan/libdispatch/source-event2.c index b10e4741a..5c2b6b72c 100644 --- a/test/tsan/Darwin/gcd-source-event2.mm +++ b/test/tsan/libdispatch/source-event2.c @@ -1,19 +1,22 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; +dispatch_semaphore_t done; void handler(void *arg) { fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); } int main(int argc, const char *argv[]) { + done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -28,7 +31,7 @@ int main(int argc, const char *argv[]) { dispatch_resume(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-registration.mm b/test/tsan/libdispatch/source-registration.c index d6d339f94..296c0055b 100644 --- a/test/tsan/Darwin/gcd-source-registration.mm +++ b/test/tsan/libdispatch/source-registration.c @@ -1,11 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; int main(int argc, const char *argv[]) { + dispatch_semaphore_t done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -17,14 +21,12 @@ int main(int argc, const char *argv[]) { dispatch_source_set_registration_handler(source, ^{ fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); dispatch_resume(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-registration2.mm b/test/tsan/libdispatch/source-registration2.c index 63657873c..1e51f6f36 100644 --- a/test/tsan/Darwin/gcd-source-registration2.mm +++ b/test/tsan/libdispatch/source-registration2.c @@ -1,19 +1,22 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; +dispatch_semaphore_t done; void handler(void *arg) { fprintf(stderr, "global = %ld\n", global); - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); } int main(int argc, const char *argv[]) { + done = dispatch_semaphore_create(0); + dispatch_queue_t queue = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT); @@ -26,7 +29,7 @@ int main(int argc, const char *argv[]) { dispatch_resume(source); - CFRunLoopRun(); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); return 0; } diff --git a/test/tsan/Darwin/gcd-source-serial.mm b/test/tsan/libdispatch/source-serial.c index 992203074..3f22c4404 100644 --- a/test/tsan/Darwin/gcd-source-serial.mm +++ b/test/tsan/libdispatch/source-serial.c @@ -1,7 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> long global; @@ -9,16 +11,18 @@ int main(int argc, const char *argv[]) { fprintf(stderr, "Hello world.\n"); dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); - dispatch_semaphore_t sem = dispatch_semaphore_create(0); dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, q); long long interval_ms = 10; dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, 0), interval_ms * NSEC_PER_MSEC, 0); + + dispatch_semaphore_t sem = dispatch_semaphore_create(0); dispatch_source_set_event_handler(timer, ^{ fprintf(stderr, "timer\n"); global++; if (global > 50) { dispatch_semaphore_signal(sem); + dispatch_suspend(timer); } }); dispatch_resume(timer); @@ -29,5 +33,6 @@ int main(int argc, const char *argv[]) { } // CHECK: Hello world. -// CHECK-NOT: WARNING: ThreadSanitizer +// CHECK: timer // CHECK: Done. +// CHECK-NOT: timer diff --git a/test/tsan/Darwin/gcd-suspend.mm b/test/tsan/libdispatch/suspend.c index 561e7c0b7..617ad917e 100644 --- a/test/tsan/Darwin/gcd-suspend.mm +++ b/test/tsan/libdispatch/suspend.c @@ -1,7 +1,9 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation -// RUN: %run %t 2>&1 | FileCheck %s +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' -#import <Foundation/Foundation.h> +#include <dispatch/dispatch.h> + +#include <stdio.h> long my_global = 0; @@ -41,5 +43,4 @@ int main(int argc, const char *argv[]) { } // CHECK: Hello world. -// CHECK-NOT: WARNING: ThreadSanitizer // CHECK: Done. diff --git a/test/tsan/libdispatch/sync-block-copy.cc b/test/tsan/libdispatch/sync-block-copy.cc new file mode 100644 index 000000000..1f10d958b --- /dev/null +++ b/test/tsan/libdispatch/sync-block-copy.cc @@ -0,0 +1,45 @@ +// This test verifies that dispatch_sync() doesn't actually copy the block under TSan (without TSan, it doesn't). + +// RUN: %clangxx_tsan %s -o %t_no_tsan -fno-sanitize=thread +// RUN: %clangxx_tsan %s -o %t_with_tsan + +// RUN: %run %t_no_tsan 2>&1 | FileCheck %s +// RUN: %run %t_with_tsan 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer' + +#include <dispatch/dispatch.h> + +#include <stdio.h> + +struct MyClass { + static int copyCount; + static void printCopyCount() { + fprintf(stderr, "copyCount = %d\n", copyCount); + } + MyClass(){}; + MyClass(const MyClass &obj) { copyCount++; }; + void foo() const { + fprintf(stderr, "MyClass::foo\n"); + } +}; +int MyClass::copyCount = 0; + +int main(int argc, const char* argv[]) { + dispatch_queue_t q = dispatch_queue_create("my.queue", NULL); + MyClass obj; + MyClass::printCopyCount(); + void (^block)(void) = ^{ + obj.foo(); + }; + MyClass::printCopyCount(); + dispatch_sync(q, block); + MyClass::printCopyCount(); + + fprintf(stderr, "Done.\n"); + return 0; +} + +// CHECK: copyCount = 0 +// CHECK: copyCount = 1 +// CHECK: MyClass::foo +// CHECK: copyCount = 1 +// CHECK: Done. diff --git a/test/tsan/libdispatch/sync-norace.c b/test/tsan/libdispatch/sync-norace.c new file mode 100644 index 000000000..38d9be384 --- /dev/null +++ b/test/tsan/libdispatch/sync-norace.c @@ -0,0 +1,37 @@ +// RUN: %clang_tsan %s -o %t +// RUN: %run %t 2>&1 | FileCheck %s + +#include "dispatch/dispatch.h" + +#include <stdio.h> + +long global; + +static const long nIter = 1000; + +int main() { + fprintf(stderr, "Hello world.\n"); + dispatch_semaphore_t done = dispatch_semaphore_create(0); + + dispatch_queue_t serial_q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL); + + global = 42; + for (int i = 0; i < nIter; i++) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + dispatch_sync(serial_q, ^{ + global = i; + + if (i == nIter - 1) { + dispatch_semaphore_signal(done); + } + }); + }); + } + + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); +} + +// CHECK: Hello world. +// CHECK: Done. +// CHECK-NOT: WARNING: ThreadSanitizer diff --git a/test/tsan/Darwin/gcd-sync-race.mm b/test/tsan/libdispatch/sync-race.c index b7f3266dc..ec0d43c0b 100644 --- a/test/tsan/Darwin/gcd-sync-race.mm +++ b/test/tsan/libdispatch/sync-race.c @@ -1,15 +1,15 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %deflake %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> - -#import "../test.h" +#include "dispatch/dispatch.h" +#include "../test.h" long global; int main() { - NSLog(@"Hello world."); + fprintf(stderr, "Hello world.\n"); print_address("addr=", 1, &global); + dispatch_semaphore_t done = dispatch_semaphore_create(0); barrier_init(&barrier, 2); dispatch_queue_t q1 = dispatch_queue_create("my.queue1", DISPATCH_QUEUE_CONCURRENT); @@ -27,18 +27,16 @@ int main() { barrier_wait(&barrier); global = 44; - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); }); }); - CFRunLoopRun(); - NSLog(@"Done."); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); } // CHECK: Hello world. // CHECK: addr=[[ADDR:0x[0-9,a-f]+]] // CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (gcd-sync-race.mm.tmp+0x{{[0-9,a-f]+}}) +// CHECK: Location is global 'global' {{(of size 8 )?}}at [[ADDR]] (sync-race.c.tmp+0x{{[0-9,a-f]+}}) // CHECK: Done. diff --git a/test/tsan/Darwin/gcd-target-queue-norace.mm b/test/tsan/libdispatch/target-queue-norace.c index fbfa65806..b5361c81f 100644 --- a/test/tsan/Darwin/gcd-target-queue-norace.mm +++ b/test/tsan/libdispatch/target-queue-norace.c @@ -1,11 +1,14 @@ -// RUN: %clang_tsan %s -o %t -framework Foundation +// RUN: %clang_tsan %s -o %t // RUN: %run %t 2>&1 | FileCheck %s -#import <Foundation/Foundation.h> +#include "dispatch/dispatch.h" + +#include <stdio.h> long global; int main(int argc, const char *argv[]) { + dispatch_semaphore_t done = dispatch_semaphore_create(0); dispatch_queue_t target_queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL); dispatch_queue_t q1 = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t q2 = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT); @@ -17,25 +20,22 @@ int main(int argc, const char *argv[]) { global++; if (global == 200000) { - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); } }); dispatch_async(q2, ^{ global++; if (global == 200000) { - dispatch_sync(dispatch_get_main_queue(), ^{ - CFRunLoopStop(CFRunLoopGetCurrent()); - }); + dispatch_semaphore_signal(done); } }); } - CFRunLoopRun(); - NSLog(@"Done."); + dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER); + fprintf(stderr, "Done.\n"); return 0; } // CHECK-NOT: WARNING: ThreadSanitizer +// CHECK: Done. diff --git a/test/tsan/lit.cfg b/test/tsan/lit.cfg index 233d273f3..50c8a5eea 100644 --- a/test/tsan/lit.cfg +++ b/test/tsan/lit.cfg @@ -38,7 +38,7 @@ config.substitutions.append(('%env_tsan_opts=', # GCC driver doesn't add necessary compile/link flags with -fsanitize=thread. if config.compiler_id == 'GNU': - extra_cflags = ["-fPIE", "-pthread", "-ldl", "-lstdc++", "-lrt", "-pie"] + extra_cflags = ["-fPIE", "-pthread", "-ldl", "-lrt", "-pie"] else: extra_cflags = [] @@ -59,11 +59,12 @@ if config.has_libcxx and config.host_os != 'Darwin': "tsan", "libcxx_tsan_%s" % config.target_arch) libcxx_incdir = os.path.join(libcxx_path, "include", "c++", "v1") libcxx_libdir = os.path.join(libcxx_path, "lib") - libcxx_so = os.path.join(libcxx_libdir, "libc++.so") + libcxx_a = os.path.join(libcxx_libdir, "libc++.a") clang_tsan_cxxflags += ["-nostdinc++", - "-I%s" % libcxx_incdir, - libcxx_so, - "-Wl,-rpath=%s" % libcxx_libdir] + "-I%s" % libcxx_incdir] + config.substitutions.append( ("%link_libcxx_tsan", libcxx_a) ) +else: + config.substitutions.append( ("%link_libcxx_tsan", "") ) def build_invocation(compile_flags): return " " + " ".join([config.clang] + compile_flags) + " " @@ -85,8 +86,5 @@ if config.host_os not in ['FreeBSD', 'Linux', 'Darwin', 'NetBSD']: if config.android: config.unsupported = True -if config.host_os == 'Darwin': - if config.target_arch in ["x86_64", "x86_64h"]: - config.parallelism_group = "darwin-64bit-sanitizer" - elif config.apple_platform != "osx" and not config.apple_platform.endswith("sim"): - config.parallelism_group = "darwin-ios-device-sanitizer" +if not config.parallelism_group: + config.parallelism_group = 'shadow-memory' diff --git a/test/tsan/load_shared_lib.cc b/test/tsan/load_shared_lib.cc index f02280895..a8939be4c 100644 --- a/test/tsan/load_shared_lib.cc +++ b/test/tsan/load_shared_lib.cc @@ -3,7 +3,7 @@ // symbolized correctly. // RUN: %clangxx_tsan -O1 %s -DBUILD_SO -fPIC -shared -o %t-so.so -// RUN: %clangxx_tsan -O1 %s -o %t -rdynamic && %deflake %run %t | FileCheck %s +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t -rdynamic && %deflake %run %t | FileCheck %s #ifdef BUILD_SO diff --git a/test/tsan/race_on_heap.cc b/test/tsan/race_on_heap.cc index 6c2defc83..83bf36fad 100644 --- a/test/tsan/race_on_heap.cc +++ b/test/tsan/race_on_heap.cc @@ -39,7 +39,7 @@ int main() { // CHECK: WARNING: ThreadSanitizer: data race // ... // CHECK: Location is heap block of size 99 at [[ADDR]] allocated by thread T1: -// CHCEK: #0 malloc +// CHECK: #0 malloc // CHECK: #{{1|2}} alloc // CHECK: #{{2|3}} AllocThread // ... diff --git a/test/tsan/real_deadlock_detector_stress_test.cc b/test/tsan/real_deadlock_detector_stress_test.cc index feb1117e8..8106ab872 100644 --- a/test/tsan/real_deadlock_detector_stress_test.cc +++ b/test/tsan/real_deadlock_detector_stress_test.cc @@ -1,4 +1,4 @@ -// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s #include <pthread.h> #include <stdlib.h> diff --git a/test/tsan/static_init6.cc b/test/tsan/static_init6.cc index 06215ced3..b334981e8 100644 --- a/test/tsan/static_init6.cc +++ b/test/tsan/static_init6.cc @@ -1,5 +1,4 @@ -// RUN: %clangxx_tsan %linux_static_libstdcplusplus -O1 %s -o %t && %run %t 2>&1 \ -// RUN: | FileCheck %s +// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s #include <pthread.h> #include <stdlib.h> #include <stdio.h> diff --git a/test/tsan/test.h b/test/tsan/test.h index 595590b58..af2e6f074 100644 --- a/test/tsan/test.h +++ b/test/tsan/test.h @@ -89,3 +89,9 @@ void AnnotateRWLockReleased(const char *f, int l, void *m, long is_w); AnnotateRWLockAcquired(__FILE__, __LINE__, m, is_w) #define ANNOTATE_RWLOCK_RELEASED(m, is_w) \ AnnotateRWLockReleased(__FILE__, __LINE__, m, is_w) + +#ifdef __APPLE__ +#define ASM_SYMBOL(symbol) "_" #symbol +#else +#define ASM_SYMBOL(symbol) #symbol +#endif diff --git a/test/tsan/thread_exit.c b/test/tsan/thread_exit.c new file mode 100644 index 000000000..7038baa43 --- /dev/null +++ b/test/tsan/thread_exit.c @@ -0,0 +1,29 @@ +// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s + +// Crashes on powerpc64be +// UNSUPPORTED: powerpc64 + +#include "test.h" + +int var; + +void *Thread(void *x) { + pthread_exit(&var); + return 0; +} + +int main() { + pthread_t t; + pthread_create(&t, 0, Thread, 0); + void *retval = 0; + pthread_join(t, &retval); + if (retval != &var) { + fprintf(stderr, "Unexpected return value\n"); + exit(1); + } + fprintf(stderr, "PASS\n"); + return 0; +} + +// CHECK-NOT: WARNING: ThreadSanitizer: +// CHECK: PASS diff --git a/test/ubsan/TestCases/Integer/suppressions.cpp b/test/ubsan/TestCases/Integer/suppressions.cpp index 65d8bba13..c6f8f4158 100644 --- a/test/ubsan/TestCases/Integer/suppressions.cpp +++ b/test/ubsan/TestCases/Integer/suppressions.cpp @@ -15,7 +15,10 @@ // RUN: echo "unsigned-integer-overflow:do_overflow" > %t.func-supp // RUN: %env_ubsan_opts=halt_on_error=1:suppressions='"%t.func-supp"' %run %t -// RUN: echo "unsigned-integer-overflow:%t" > %t.module-supp +// FIXME: The '%t' substitution can't be used for the module name because it +// contains a colon, so we have to use the basename, which is +// suppressions.cpp.tmp. +// RUN: echo "unsigned-integer-overflow:suppressions.cpp.tmp" > %t.module-supp // RUN: %env_ubsan_opts=halt_on_error=1:suppressions='"%t.module-supp"' %run %t // Note: file-level suppressions should work even without debug info. diff --git a/test/ubsan/lit.common.cfg b/test/ubsan/lit.common.cfg index 9a7a8900e..e20832bd6 100644 --- a/test/ubsan/lit.common.cfg +++ b/test/ubsan/lit.common.cfg @@ -74,8 +74,3 @@ if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'Windows', 'NetBSD', 'Su config.available_features.add('arch=' + config.target_arch) config.excludes = ['Inputs'] - -# Limit parallelism if necessary -if config.host_os == 'Darwin': - if config.apple_platform != "osx" and not config.apple_platform.endswith("sim"): - config.parallelism_group = "darwin-ios-device-sanitizer" diff --git a/test/xray/lit.cfg b/test/xray/lit.cfg index 0dc2108ba..cc4cc2124 100644 --- a/test/xray/lit.cfg +++ b/test/xray/lit.cfg @@ -10,8 +10,16 @@ config.test_source_root = os.path.dirname(__file__) # Setup default compiler flags use with -fxray-instrument option. clang_xray_cflags = (['-fxray-instrument', config.target_cflags]) -clang_xray_cxxflags = config.cxx_mode_flags + clang_xray_cflags +# If libc++ was used to build XRAY libraries, libc++ is needed. Fix applied +# to Linux only since -rpath may not be portable. This can be extended to +# other platforms. +if config.libcxx_used == "1" and config.host_os == "Linux": + clang_xray_cflags = clang_xray_cflags + (['-L%s -lc++ -Wl,-rpath=%s' + % (config.llvm_shlib_dir, + config.llvm_shlib_dir)]) + +clang_xray_cxxflags = config.cxx_mode_flags + clang_xray_cflags def build_invocation(compile_flags): return ' ' + ' '.join([config.clang] + compile_flags) + ' ' |