Dmitry Vyukov [Fri, 25 May 2012 09:46:33 +0000 (09:46 +0000)]
asan: fix tests
depending on -m32/-m64 addr2line says either e.g. __xsan_strnlen or just strnlen
llvm-svn: 157464
Manuel Klimek [Fri, 25 May 2012 08:39:21 +0000 (08:39 +0000)]
Links the entry point to the tooling documentation into clang's menu bar.
llvm-svn: 157462
Richard Smith [Fri, 25 May 2012 02:35:34 +0000 (02:35 +0000)]
Release notes update for -Wsometimes-uninitialized.
llvm-svn: 157459
Richard Smith [Fri, 25 May 2012 02:17:09 +0000 (02:17 +0000)]
Split a chunk of -Wconditional-uninitialized warnings out into a separate flag,
-Wsometimes-uninitialized. This detects cases where an explicitly-written branch
inevitably leads to an uninitialized variable use (so either the branch is dead
code or there is an uninitialized use bug).
This chunk of warnings tentatively lives within -Wuninitialized, in order to
give it more visibility to existing Clang users.
llvm-svn: 157458
Jason Molenda [Fri, 25 May 2012 02:05:58 +0000 (02:05 +0000)]
Bump to lldb 152.
llvm-svn: 157456
Andrew Trick [Fri, 25 May 2012 02:02:39 +0000 (02:02 +0000)]
misched: trace formatting
llvm-svn: 157455
Jason Molenda [Fri, 25 May 2012 01:54:06 +0000 (01:54 +0000)]
Add support for function with stack frame checks added by the compiler;
these functions will end in the sequence
mov %rbp, %rsp
ret
call __stack_chk_fail
instead of the usual mov, ret. The x86 assembly profiler only looked
for functions ending in 'ret' and added the Unwind row describing how to
set the CFA based on that -- the addition of the call insn (which is jumped
to earlier in the function body) threw off that inspection.
Resolves the need to "step" twice to get out of these functions when doing
source-level stepping.
<rdar://problem/
11469705>
llvm-svn: 157454
Anna Zaks [Fri, 25 May 2012 01:13:50 +0000 (01:13 +0000)]
[analyzer] Loading external plugins with scan-build
Load custom plugins when running scan-build. This is useful when
additional static analysis Checkers must be provided via clang's plugin
interface.
Loading additional plugins can now be done via the scan-build call:
scan-build -load-plugin <plugin.so>
A patch by Thomas Hauth.
llvm-svn: 157452
Bill Wendling [Fri, 25 May 2012 00:57:21 +0000 (00:57 +0000)]
Early-continue.Reducing indentation.
llvm-svn: 157451
Bill Wendling [Fri, 25 May 2012 00:55:38 +0000 (00:55 +0000)]
Don't call exit from a runtime.
llvm-svn: 157450
Jakob Stoklund Olesen [Fri, 25 May 2012 00:21:41 +0000 (00:21 +0000)]
Compress MCRegisterInfo register name tables.
Store (debugging) register names as offsets into a string table instead
of as char pointers.
llvm-svn: 157449
Eli Friedman [Fri, 25 May 2012 00:09:29 +0000 (00:09 +0000)]
Simplify code for calling a function where CanLowerReturn fails, fixing a small bug in the process.
llvm-svn: 157446
Seth Cantrell [Fri, 25 May 2012 00:03:29 +0000 (00:03 +0000)]
ensure value passed to is space is representable as unsigned char
if the value isn't an unsigned char or EOF behavior is undefined
(and on Windows there's an assertion)
llvm-svn: 157445
Richard Smith [Thu, 24 May 2012 23:45:35 +0000 (23:45 +0000)]
Some cleanups around the uninitialized variables warning, and a FIXME. No functional change.
llvm-svn: 157440
Greg Clayton [Thu, 24 May 2012 23:42:14 +0000 (23:42 +0000)]
<rdar://problem/
11529853>
Sending async packets can deadlock a program on darwin. We currently allow breakpoint packets and memory read/write packets (for software breakpoints) to be sent while a program is running. In the GDB remote plug-in, we will interrupt the run, send the async packet and resume (currently with the continue packet that caused the program to resume). If the GDB server supports the "vCont" packet, we might have initially continued with each thread stating it should continue. If new threads show up while we are stopped, which happend when running GCD, we can end up with new threads that we aren't mentioning in the continue list. So we start with a thread list of 1,2,3 and continue:
continue thread 1, continue thread 2, continue thread 3
Now we interrupt and set a breakpoint and we actually have threads 1,2,3,4 now when we are about to resume, yet we send:
continue thread 1, continue thread 2, continue thread 3
Any thread that isn't mentioned is currently going to stay suspended. This causes the deadlock.
llvm-svn: 157439
Kaelyn Uhrain [Thu, 24 May 2012 23:37:49 +0000 (23:37 +0000)]
Silence unused variable warnings from when assertions are disabled.
llvm-svn: 157438
Andrew Trick [Thu, 24 May 2012 23:11:17 +0000 (23:11 +0000)]
misched: Use the same scheduling heuristics with -misched-topdown/bottomup.
(except the part about choosing direction)
llvm-svn: 157437
Fariborz Jahanian [Thu, 24 May 2012 22:59:56 +0000 (22:59 +0000)]
cleanup some code.
llvm-svn: 157436
Fariborz Jahanian [Thu, 24 May 2012 22:48:38 +0000 (22:48 +0000)]
objective-c: warn on use of property setters
backing two propeties because proprty names
match except for first letter being of different
case. // rdar://
11528439, [PR12936].
llvm-svn: 157435
Eli Friedman [Thu, 24 May 2012 22:36:31 +0000 (22:36 +0000)]
Get rid of some non-ASCII en-dashes that crept in.
llvm-svn: 157434
Jakob Stoklund Olesen [Thu, 24 May 2012 22:17:44 +0000 (22:17 +0000)]
Shrink.
llvm-svn: 157433
Jakob Stoklund Olesen [Thu, 24 May 2012 22:17:39 +0000 (22:17 +0000)]
Add support for range expressions in TableGen foreach loops.
Like this:
foreach i = 0-127 in ...
Use braces for composite ranges:
foreach i = {0-3,9-7} in ...
llvm-svn: 157432
Jakob Stoklund Olesen [Thu, 24 May 2012 22:17:36 +0000 (22:17 +0000)]
Don't put TGParser scratch results in the output.
Only fully expanded Records should go into RecordKeeper.
llvm-svn: 157431
Jakob Stoklund Olesen [Thu, 24 May 2012 22:17:33 +0000 (22:17 +0000)]
Simplify TGParser::ProcessForEachDefs.
Use static type checking.
llvm-svn: 157430
Andrew Trick [Thu, 24 May 2012 22:11:14 +0000 (22:11 +0000)]
misched: Trace regpressure.
llvm-svn: 157429
Andrew Trick [Thu, 24 May 2012 22:11:12 +0000 (22:11 +0000)]
misched: Give each ReadyQ a unique ID
llvm-svn: 157428
Andrew Trick [Thu, 24 May 2012 22:11:09 +0000 (22:11 +0000)]
misched: Added ScoreboardHazardRecognizer.
The Hazard checker implements in-order contraints, or interlocked
resources. Ready instructions with hazards do not enter the available
queue and are not visible to other heuristics.
The major code change is the addition of SchedBoundary to encapsulate
the state at the top or bottom of the schedule, including both a
pending and available queue.
The scheduler now counts cycles in sync with the hazard checker. These
are minimum cycle counts based on known hazards.
Targets with no itinerary (x86_64) currently remain at cycle 0. To fix
this, we need to provide some maximum issue width for all targets. We
also need to add the concept of expected latency vs. minimum latency.
llvm-svn: 157427
Andrew Trick [Thu, 24 May 2012 22:11:05 +0000 (22:11 +0000)]
misched: Release bottom roots in reverse order.
llvm-svn: 157426
Andrew Trick [Thu, 24 May 2012 22:11:03 +0000 (22:11 +0000)]
misched: rename ReadyQ class
llvm-svn: 157425
Andrew Trick [Thu, 24 May 2012 22:11:01 +0000 (22:11 +0000)]
misched: copy comments so compareRPDelta is readable by itself.
llvm-svn: 157424
Andrew Trick [Thu, 24 May 2012 22:10:59 +0000 (22:10 +0000)]
regpressure: Added RegisterPressure::dump
llvm-svn: 157423
Andrew Trick [Thu, 24 May 2012 22:10:57 +0000 (22:10 +0000)]
regpressure: physreg livein/out fix
llvm-svn: 157422
David Blaikie [Thu, 24 May 2012 22:08:29 +0000 (22:08 +0000)]
Fix for CHECK-NOT misspelling.
Patch by Nicklas Bo Jensen.
llvm-svn: 157421
Eli Friedman [Thu, 24 May 2012 22:04:19 +0000 (22:04 +0000)]
Implement the C++11 discarded value expression rules for volatile lvalues. <rdar://problem/
10790820>.
llvm-svn: 157420
Justin Holewinski [Thu, 24 May 2012 21:39:33 +0000 (21:39 +0000)]
Un-XFAIL CodeGen/builtins-nvptx.c now that the proper changes have
landed in LLVM core
llvm-svn: 157418
Justin Holewinski [Thu, 24 May 2012 21:38:21 +0000 (21:38 +0000)]
Remove the PTX back-end and all of its artifacts (triple, etc.)
This back-end was deprecated in favor of the NVPTX back-end.
NV_CONTRIB
llvm-svn: 157417
Owen Anderson [Thu, 24 May 2012 21:37:08 +0000 (21:37 +0000)]
Teach tblgen's set theory "sequence" operator to support an optional stride operand.
llvm-svn: 157416
Chad Rosier [Thu, 24 May 2012 21:17:47 +0000 (21:17 +0000)]
Typo. Patch by Nicklas Bo Jensen <nbjensen@gmail.com>.
llvm-svn: 157415
Eli Friedman [Thu, 24 May 2012 21:05:41 +0000 (21:05 +0000)]
A minor tweak to the new volatile lvalue warning: don't warn on "(void)x", where "x" refers to a local variable. This should silence a useless warning in compiler-rt and other places.
llvm-svn: 157414
John McCall [Thu, 24 May 2012 20:58:21 +0000 (20:58 +0000)]
XFAIL this test, which does not pass on trunk since the grand
renaming in r157403.
llvm-svn: 157413
Ted Kremenek [Thu, 24 May 2012 20:16:00 +0000 (20:16 +0000)]
Set svn:keywords property to Id
llvm-svn: 157412
Ted Kremenek [Thu, 24 May 2012 20:13:47 +0000 (20:13 +0000)]
New & improved man page attached, now with standard license added.
Plus, a patch for scan-build.
* mdoc corrections
* slightly more compact output
* same license as scan-build
* DESCRIPTION describes
* Default checkers corrected & explained
* Authors credited
The patch adds support for --help-checkers. It just lists the default
checkers by recursively invoking "scan-build -h" and looking for the
magic '+' signs.
Patch by James Lowden!
llvm-svn: 157411
Akira Hatanaka [Thu, 24 May 2012 18:37:43 +0000 (18:37 +0000)]
Turn on mips16 pseudo op when compiling for mips16.
Expand test case for this.
Patch by Reed Kotler.
llvm-svn: 157410
Akira Hatanaka [Thu, 24 May 2012 18:32:33 +0000 (18:32 +0000)]
Enable Mips16 compiler to compile a null program.
First code from the Mips16 compiler. Includes trivial test program.
Patch by Reed Kotler.
llvm-svn: 157408
Fariborz Jahanian [Thu, 24 May 2012 18:29:41 +0000 (18:29 +0000)]
objective-c: Fixes a corner case and interesting bug.
Where diagnostic about unfound property is not
issued in the context where a setter is looked up
in situation in which name and property name differ
in their first letter case. // rdar://
11363363
llvm-svn: 157407
Meador Inge [Thu, 24 May 2012 18:16:39 +0000 (18:16 +0000)]
Adding back a right parenthesis that was dropped in r157388.
llvm-svn: 157406
Johnny Chen [Thu, 24 May 2012 18:14:18 +0000 (18:14 +0000)]
Fix missing Resources/Python directory for macosx build.
llvm-svn: 157405
Argyrios Kyrtzidis [Thu, 24 May 2012 17:49:22 +0000 (17:49 +0000)]
[objcmt] Add test case for r157395.
llvm-svn: 157404
Justin Holewinski [Thu, 24 May 2012 17:43:12 +0000 (17:43 +0000)]
Replace PTX back-end with NVPTX back-end in all places where Clang cares
NV_CONTRIB
llvm-svn: 157403
Anna Zaks [Thu, 24 May 2012 17:31:59 +0000 (17:31 +0000)]
[analyzer] Minor cleanup to checkers' help text.
llvm-svn: 157402
Anna Zaks [Thu, 24 May 2012 17:31:57 +0000 (17:31 +0000)]
[analyzer] Treat cast of array to reference in the same way as array to
pointer.
Fixes one of the crashes reported in PR12874.
llvm-svn: 157401
Anna Zaks [Thu, 24 May 2012 17:31:54 +0000 (17:31 +0000)]
[analyzer] Fix typo. Thanks Jordy.
llvm-svn: 157400
Manuel Klimek [Thu, 24 May 2012 17:16:23 +0000 (17:16 +0000)]
Adds menu sidebar to the docs.
llvm-svn: 157399
David Blaikie [Thu, 24 May 2012 17:11:00 +0000 (17:11 +0000)]
Silence Clang's -Wlogical-op-parentheses warning.
I'm not sure it's really worth expressing this as a range rather than 3 specific equalities, but it doesn't seem fundamentally wrong either.
llvm-svn: 157398
Manuel Klimek [Thu, 24 May 2012 17:09:10 +0000 (17:09 +0000)]
Updates the tooling docs with the links to the tutorials and
adds the menu include.
llvm-svn: 157397
Manuel Klimek [Thu, 24 May 2012 17:07:18 +0000 (17:07 +0000)]
Adds a tutorial for how to write clang plugins.
llvm-svn: 157396
Argyrios Kyrtzidis [Thu, 24 May 2012 16:48:23 +0000 (16:48 +0000)]
[objcmt] Warn when modern objc migrator does not convert a NSNumber message because it requires a cast.
rdar://
11525138
llvm-svn: 157395
Fariborz Jahanian [Thu, 24 May 2012 16:19:51 +0000 (16:19 +0000)]
objc: change option to be -Wobjc-interface-ivars
llvm-svn: 157394
Tobias Grosser [Thu, 24 May 2012 15:59:06 +0000 (15:59 +0000)]
Add half support to LLVM (for OpenCL)
Submitted by: Anton Lokhmotov <Anton.Lokhmotov@arm.com>
Approved by: o Anton Korobeynikov
o Micah Villmow
o David Neto
llvm-svn: 157393
Dmitry Vyukov [Thu, 24 May 2012 14:55:12 +0000 (14:55 +0000)]
tsan: compilation of tests with newest clang
llvm-svn: 157392
Dmitry Vyukov [Thu, 24 May 2012 14:50:33 +0000 (14:50 +0000)]
tsan: fix compilation with newest clang
llvm-svn: 157391
Meador Inge [Thu, 24 May 2012 14:20:13 +0000 (14:20 +0000)]
Testing commit access
llvm-svn: 157389
Dmitry Vyukov [Thu, 24 May 2012 13:54:31 +0000 (13:54 +0000)]
asan/tsan: weak interceptors
The idea isthat asan/tsan can survive if user intercepts the same functions. At the same time user has an ability to call back into asan/tsan runtime. See the following tests for examples:
asan/output_tests/interception_failure_test-linux.cc
asan/output_tests/interception_test-linux.cc
asan/output_tests/interception_malloc_test-linux.cc
llvm-svn: 157388
Manuel Klimek [Thu, 24 May 2012 12:46:43 +0000 (12:46 +0000)]
Apply review comment from Jordan Rose.
llvm-svn: 157387
Stepan Dyatkovskiy [Thu, 24 May 2012 09:33:20 +0000 (09:33 +0000)]
PR1255 related changes (case ranges):
LowerSwitch::Clusterify : main functinality was replaced with CRSBuilder::optimize, so big part of Clusterify's code was reduced.
test/Transform/LowerSwitch/feature.ll - this test was refactored: grep + count was replaced with FileCheck usage.
llvm-svn: 157384
Dmitry Vyukov [Thu, 24 May 2012 09:24:45 +0000 (09:24 +0000)]
tsan: add a flag to control RunningOnValgrind() return value
llvm-svn: 157383
Patrik Hägglund [Thu, 24 May 2012 07:51:46 +0000 (07:51 +0000)]
Fix -Wcovered-switch-default warning.
llvm-svn: 157381
Craig Topper [Thu, 24 May 2012 07:02:50 +0000 (07:02 +0000)]
Convert assert(0) to llvm_unreachable.
llvm-svn: 157380
Bill Wendling [Thu, 24 May 2012 06:42:56 +0000 (06:42 +0000)]
Remove 3.1 release notes to get ready for current development cycle.
llvm-svn: 157379
Bill Wendling [Thu, 24 May 2012 06:38:09 +0000 (06:38 +0000)]
Remove old release notes. Ready them for additions from current development
cycle.
llvm-svn: 157378
Craig Topper [Thu, 24 May 2012 06:35:32 +0000 (06:35 +0000)]
Mark some static arrays as const.
llvm-svn: 157377
Craig Topper [Thu, 24 May 2012 06:09:56 +0000 (06:09 +0000)]
Use uint16_t to store registers in static tables. Matches other tables.
llvm-svn: 157375
Craig Topper [Thu, 24 May 2012 05:55:47 +0000 (05:55 +0000)]
Use uint16_t to store register number in static tables to match other tables.
llvm-svn: 157374
Craig Topper [Thu, 24 May 2012 05:17:00 +0000 (05:17 +0000)]
Make some opcode tables static and const. Allows code to avoid making copies to pass the tables around.
llvm-svn: 157373
Seth Cantrell [Thu, 24 May 2012 05:14:44 +0000 (05:14 +0000)]
fix Bug 12924
http://llvm.org/bugs/show_bug.cgi?id=12924
This issue was that the source location was pointing to a
non-printable character and so CaretEnd was pointing one
_column_ past the caret but not one _character_ past the
caret. So the conversion between column and byte locations
wasn't working (because the conversion is only valid from
the first column or byte of a character).
llvm-svn: 157372
Joel Jones [Thu, 24 May 2012 04:38:50 +0000 (04:38 +0000)]
Reflect that tblgen is now llvm-tblgen
llvm-svn: 157371
Richard Smith [Thu, 24 May 2012 04:29:20 +0000 (04:29 +0000)]
DR1152 / PR12931 / PR6177: A candidate function which requires binding a const
volatile reference to a temporary is not viable. My interpretation is that
DR1152 was a bugfix, not a rule change for C++11, so this is not conditional on
the language mode. This matches g++'s behavior.
llvm-svn: 157370
Craig Topper [Thu, 24 May 2012 04:22:05 +0000 (04:22 +0000)]
Mark a couple arrays as static and const. Use array_lengthof instead of sizeof/sizeof.
llvm-svn: 157369
Craig Topper [Thu, 24 May 2012 04:11:15 +0000 (04:11 +0000)]
Mark a static array as const.
llvm-svn: 157368
Craig Topper [Thu, 24 May 2012 03:59:11 +0000 (03:59 +0000)]
Mark a static table as const. Shrink opcode size in static tables to uint16_t. Simplify loop iterating over one of those tables. No functional change intended.
llvm-svn: 157367
Jim Ingham [Thu, 24 May 2012 01:16:09 +0000 (01:16 +0000)]
Change the "Debug" build to use the current MacOSX SDK. Fix the swig builder to have an explicit
short-circuit of the Python SWIG building, rather than relying on the SDKROOT being set.
llvm-svn: 157363
Eli Friedman [Thu, 24 May 2012 00:47:05 +0000 (00:47 +0000)]
Add a warning to diagnose statements in C++ like "*(volatile int*)x;". Conceptually, this is part of -Wunused-value, but I added a separate flag -Wunused-volatile-lvalue so it doesn't get turned off by accident with -Wno-unused-value. I also made a few minor improvements to existing unused value warnings in the process. <rdar://problem/
11516811>.
llvm-svn: 157362
Johnny Chen [Thu, 24 May 2012 00:43:00 +0000 (00:43 +0000)]
rdar://problem/
11457634
Supports the use-case scenario of immediately continuing the process once attached.
Add a simple completion test case from "process attach --con" to "process attach --continue ".
llvm-svn: 157361
Nuno Lopes [Thu, 24 May 2012 00:22:00 +0000 (00:22 +0000)]
implement Sema support for the alloc_size attribute
Portions of this patch by Xi Wang. Reviewed by Jordy Rose. Thank you both.
Codegen support will follow soon.
llvm-svn: 157360
Fariborz Jahanian [Wed, 23 May 2012 23:47:20 +0000 (23:47 +0000)]
modern objc translation: Add translation of @autoreleasepool
statement. // rdar://
11474836.
llvm-svn: 157359
Chad Rosier [Wed, 23 May 2012 23:45:10 +0000 (23:45 +0000)]
Tidy up naming for consistency and other cleanup. No functional change intended.
llvm-svn: 157358
Jakob Stoklund Olesen [Wed, 23 May 2012 23:42:23 +0000 (23:42 +0000)]
Add a test case for global live range splitting.
llvm-svn: 157357
Argyrios Kyrtzidis [Wed, 23 May 2012 23:30:16 +0000 (23:30 +0000)]
[libclang] Report CXType_ObjCId for 'const id', not CXType_Typedef.
rdar://
11357807
llvm-svn: 157356
Jakob Stoklund Olesen [Wed, 23 May 2012 22:37:27 +0000 (22:37 +0000)]
Add a last resort tryInstructionSplit() to RAGreedy.
Live ranges with a constrained register class may benefit from splitting
around individual uses. It allows the remaining live range to use a
larger register class where it may allocate. This is like spilling to a
different register class.
This is only attempted on constrained register classes.
<rdar://problem/
11438902>
llvm-svn: 157354
Johnny Chen [Wed, 23 May 2012 22:34:34 +0000 (22:34 +0000)]
Add SBProcess::GetNumSupportedHardwareWatchpoints() API and export it through the Python scripting bridge.
Add/modify some test cases.
llvm-svn: 157353
NAKAMURA Takumi [Wed, 23 May 2012 22:24:33 +0000 (22:24 +0000)]
clang/test/Tooling: Update comments in left 2 tests on XFAIL. They are incompatible to -fms-compatibility.
llvm-svn: 157352
NAKAMURA Takumi [Wed, 23 May 2012 22:24:27 +0000 (22:24 +0000)]
clang/test/Tooling: Tweak 4 tests to escape the path separator s/\\/\\\\/g in JSON.
llvm-svn: 157351
NAKAMURA Takumi [Wed, 23 May 2012 22:24:20 +0000 (22:24 +0000)]
Tooling: Canonicalize Key in IndexByFile[]. llvm::sys::path::native() may be used here.
It fixes test/Tooling on Win32 hosts.
llvm-svn: 157350
Bill Wendling [Wed, 23 May 2012 22:12:50 +0000 (22:12 +0000)]
Forgot to reverse conditional.
llvm-svn: 157349
Bill Wendling [Wed, 23 May 2012 22:09:50 +0000 (22:09 +0000)]
Reduce indentation by early detection of 'continue'. No functionality change.
llvm-svn: 157348
Argyrios Kyrtzidis [Wed, 23 May 2012 21:50:04 +0000 (21:50 +0000)]
[arcmt] Remove an unused -autorelease, without failing with error, for this
idiom that is used commonly in setters:
[backingValue autorelease];
backingValue = [newValue retain]; // in general a +1 assign
rdar://9914061
llvm-svn: 157347
Chad Rosier [Wed, 23 May 2012 21:38:47 +0000 (21:38 +0000)]
[driver] Have the crash diagnostics print the clang version information.
rdar://
11518308
llvm-svn: 157346
Johnny Chen [Wed, 23 May 2012 21:09:52 +0000 (21:09 +0000)]
Add the capability to display the number of supported hardware watchpoints to the "watchpoint list" command.
Add default Process::GetWatchpointSupportInfo() impl which returns an error of "not supported".
Add "qWatchpointSupportInfo" packet to the gdb communication layer to support this, and modify TestWatchpointCommands.py to test it.
llvm-svn: 157345
Nicolas Geoffray [Wed, 23 May 2012 20:34:19 +0000 (20:34 +0000)]
llvm-ld does not exist anymore, use llvm-link instead.
llvm-svn: 157342
Kaelyn Uhrain [Wed, 23 May 2012 20:21:36 +0000 (20:21 +0000)]
Fix typo in flag to opt, and also a CHECK-NEXT that doesn't follow a
CHECK. The latter error was hidden by the former, and the test harness
used by e.g. "make check" silently ignored that opt was printing an
error message about an unknown flag instead of running on the test file.
llvm-svn: 157341