1===================== 2LLVM Coding Standards 3===================== 4 5.. contents:: 6 :local: 7 8Introduction 9============ 10 11This document attempts to describe a few coding standards that are being used in 12the LLVM source tree. Although no coding standards should be regarded as 13absolute requirements to be followed in all instances, coding standards are 14particularly important for large-scale code bases that follow a library-based 15design (like LLVM). 16 17While this document may provide guidance for some mechanical formatting issues, 18whitespace, or other "microscopic details", these are not fixed standards. 19Always follow the golden rule: 20 21.. _Golden Rule: 22 23 **If you are extending, enhancing, or bug fixing already implemented code, 24 use the style that is already being used so that the source is uniform and 25 easy to follow.** 26 27Note that some code bases (e.g. ``libc++``) have really good reasons to deviate 28from the coding standards. In the case of ``libc++``, this is because the 29naming and other conventions are dictated by the C++ standard. If you think 30there is a specific good reason to deviate from the standards here, please bring 31it up on the LLVM-dev mailing list. 32 33There are some conventions that are not uniformly followed in the code base 34(e.g. the naming convention). This is because they are relatively new, and a 35lot of code was written before they were put in place. Our long term goal is 36for the entire codebase to follow the convention, but we explicitly *do not* 37want patches that do large-scale reformating of existing code. On the other 38hand, it is reasonable to rename the methods of a class if you're about to 39change it in some other way. Just do the reformating as a separate commit from 40the functionality change. 41 42The ultimate goal of these guidelines is to increase the readability and 43maintainability of our common source base. If you have suggestions for topics to 44be included, please mail them to `Chris <mailto:[email protected]>`_. 45 46Languages, Libraries, and Standards 47=================================== 48 49Most source code in LLVM and other LLVM projects using these coding standards 50is C++ code. There are some places where C code is used either due to 51environment restrictions, historical restrictions, or due to third-party source 52code imported into the tree. Generally, our preference is for standards 53conforming, modern, and portable C++ code as the implementation language of 54choice. 55 56C++ Standard Versions 57--------------------- 58 59LLVM, Clang, and LLD are currently written using C++11 conforming code, 60although we restrict ourselves to features which are available in the major 61toolchains supported as host compilers. The LLDB project is even more 62aggressive in the set of host compilers supported and thus uses still more 63features. Regardless of the supported features, code is expected to (when 64reasonable) be standard, portable, and modern C++11 code. We avoid unnecessary 65vendor-specific extensions, etc. 66 67C++ Standard Library 68-------------------- 69 70Use the C++ standard library facilities whenever they are available for 71a particular task. LLVM and related projects emphasize and rely on the standard 72library facilities for as much as possible. Common support libraries providing 73functionality missing from the standard library for which there are standard 74interfaces or active work on adding standard interfaces will often be 75implemented in the LLVM namespace following the expected standard interface. 76 77There are some exceptions such as the standard I/O streams library which are 78avoided. Also, there is much more detailed information on these subjects in the 79:doc:`ProgrammersManual`. 80 81Supported C++11 Language and Library Features 82--------------------------------------------- 83 84While LLVM, Clang, and LLD use C++11, not all features are available in all of 85the toolchains which we support. The set of features supported for use in LLVM 86is the intersection of those supported in MSVC 2013, GCC 4.7, and Clang 3.1. 87The ultimate definition of this set is what build bots with those respective 88toolchains accept. Don't argue with the build bots. However, we have some 89guidance below to help you know what to expect. 90 91Each toolchain provides a good reference for what it accepts: 92 93* Clang: http://clang.llvm.org/cxx_status.html 94* GCC: http://gcc.gnu.org/projects/cxx0x.html 95* MSVC: http://msdn.microsoft.com/en-us/library/hh567368.aspx 96 97In most cases, the MSVC list will be the dominating factor. Here is a summary 98of the features that are expected to work. Features not on this list are 99unlikely to be supported by our host compilers. 100 101* Rvalue references: N2118_ 102 103 * But *not* Rvalue references for ``*this`` or member qualifiers (N2439_) 104 105* Static assert: N1720_ 106* ``auto`` type deduction: N1984_, N1737_ 107* Trailing return types: N2541_ 108* Lambdas: N2927_ 109 110 * But *not* lambdas with default arguments. 111 112* ``decltype``: N2343_ 113* Nested closing right angle brackets: N1757_ 114* Extern templates: N1987_ 115* ``nullptr``: N2431_ 116* Strongly-typed and forward declarable enums: N2347_, N2764_ 117* Local and unnamed types as template arguments: N2657_ 118* Range-based for-loop: N2930_ 119 120 * But ``{}`` are required around inner ``do {} while()`` loops. As a result, 121 ``{}`` are required around function-like macros inside range-based for 122 loops. 123 124* ``override`` and ``final``: N2928_, N3206_, N3272_ 125* Atomic operations and the C++11 memory model: N2429_ 126* Variadic templates: N2242_ 127* Explicit conversion operators: N2437_ 128* Defaulted and deleted functions: N2346_ 129 130 * But not defaulted move constructors or move assignment operators, MSVC 2013 131 cannot synthesize them. 132* Initializer lists: N2627_ 133* Delegating constructors: N1986_ 134* Default member initializers (non-static data member initializers): N2756_ 135 136 * Only use these for scalar members that would otherwise be left 137 uninitialized. Non-scalar members generally have appropriate default 138 constructors, and MSVC 2013 has problems when braced initializer lists are 139 involved. 140 141.. _N2118: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html 142.. _N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm 143.. _N1720: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html 144.. _N1984: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf 145.. _N1737: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf 146.. _N2541: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm 147.. _N2927: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf 148.. _N2343: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf 149.. _N1757: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html 150.. _N1987: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm 151.. _N2431: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf 152.. _N2347: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf 153.. _N2764: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf 154.. _N2657: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm 155.. _N2930: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html 156.. _N2928: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2928.htm 157.. _N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm 158.. _N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm 159.. _N2429: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm 160.. _N2242: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf 161.. _N2437: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf 162.. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm 163.. _N2627: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm 164.. _N1986: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf 165.. _N2756: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm 166 167The supported features in the C++11 standard libraries are less well tracked, 168but also much greater. Most of the standard libraries implement most of C++11's 169library. The most likely lowest common denominator is Linux support. For 170libc++, the support is just poorly tested and undocumented but expected to be 171largely complete. YMMV. For libstdc++, the support is documented in detail in 172`the libstdc++ manual`_. There are some very minor missing facilities that are 173unlikely to be common problems, and there are a few larger gaps that are worth 174being aware of: 175 176* Not all of the type traits are implemented 177* No regular expression library. 178* While most of the atomics library is well implemented, the fences are 179 missing. Fortunately, they are rarely needed. 180* The locale support is incomplete. 181 182Other than these areas you should assume the standard library is available and 183working as expected until some build bot tells you otherwise. If you're in an 184uncertain area of one of the above points, but you cannot test on a Linux 185system, your best approach is to minimize your use of these features, and watch 186the Linux build bots to find out if your usage triggered a bug. For example, if 187you hit a type trait which doesn't work we can then add support to LLVM's 188traits header to emulate it. 189 190.. _the libstdc++ manual: 191 http://gcc.gnu.org/onlinedocs/gcc-4.7.3/libstdc++/manual/manual/status.html#status.iso.2011 192 193Other Languages 194--------------- 195 196Any code written in the Go programming language is not subject to the 197formatting rules below. Instead, we adopt the formatting rules enforced by 198the `gofmt`_ tool. 199 200Go code should strive to be idiomatic. Two good sets of guidelines for what 201this means are `Effective Go`_ and `Go Code Review Comments`_. 202 203.. _gofmt: 204 https://golang.org/cmd/gofmt/ 205 206.. _Effective Go: 207 https://golang.org/doc/effective_go.html 208 209.. _Go Code Review Comments: 210 https://code.google.com/p/go-wiki/wiki/CodeReviewComments 211 212Mechanical Source Issues 213======================== 214 215Source Code Formatting 216---------------------- 217 218Commenting 219^^^^^^^^^^ 220 221Comments are one critical part of readability and maintainability. Everyone 222knows they should comment their code, and so should you. When writing comments, 223write them as English prose, which means they should use proper capitalization, 224punctuation, etc. Aim to describe what the code is trying to do and why, not 225*how* it does it at a micro level. Here are a few critical things to document: 226 227.. _header file comment: 228 229File Headers 230"""""""""""" 231 232Every source file should have a header on it that describes the basic purpose of 233the file. If a file does not have a header, it should not be checked into the 234tree. The standard header looks like this: 235 236.. code-block:: c++ 237 238 //===-- llvm/Instruction.h - Instruction class definition -------*- C++ -*-===// 239 // 240 // The LLVM Compiler Infrastructure 241 // 242 // This file is distributed under the University of Illinois Open Source 243 // License. See LICENSE.TXT for details. 244 // 245 //===----------------------------------------------------------------------===// 246 /// 247 /// \file 248 /// This file contains the declaration of the Instruction class, which is the 249 /// base class for all of the VM instructions. 250 /// 251 //===----------------------------------------------------------------------===// 252 253A few things to note about this particular format: The "``-*- C++ -*-``" string 254on the first line is there to tell Emacs that the source file is a C++ file, not 255a C file (Emacs assumes ``.h`` files are C files by default). 256 257.. note:: 258 259 This tag is not necessary in ``.cpp`` files. The name of the file is also 260 on the first line, along with a very short description of the purpose of the 261 file. This is important when printing out code and flipping though lots of 262 pages. 263 264The next section in the file is a concise note that defines the license that the 265file is released under. This makes it perfectly clear what terms the source 266code can be distributed under and should not be modified in any way. 267 268The main body is a ``doxygen`` comment (identified by the ``///`` comment 269marker instead of the usual ``//``) describing the purpose of the file. The 270first sentence (or a passage beginning with ``\brief``) is used as an abstract. 271Any additional information should be separated by a blank line. If an 272algorithm is being implemented or something tricky is going on, a reference 273to the paper where it is published should be included, as well as any notes or 274*gotchas* in the code to watch out for. 275 276Class overviews 277""""""""""""""" 278 279Classes are one fundamental part of a good object oriented design. As such, a 280class definition should have a comment block that explains what the class is 281used for and how it works. Every non-trivial class is expected to have a 282``doxygen`` comment block. 283 284Method information 285"""""""""""""""""" 286 287Methods defined in a class (as well as any global functions) should also be 288documented properly. A quick note about what it does and a description of the 289borderline behaviour is all that is necessary here (unless something 290particularly tricky or insidious is going on). The hope is that people can 291figure out how to use your interfaces without reading the code itself. 292 293Good things to talk about here are what happens when something unexpected 294happens: does the method return null? Abort? Format your hard disk? 295 296Comment Formatting 297^^^^^^^^^^^^^^^^^^ 298 299In general, prefer C++ style comments (``//`` for normal comments, ``///`` for 300``doxygen`` documentation comments). They take less space, require 301less typing, don't have nesting problems, etc. There are a few cases when it is 302useful to use C style (``/* */``) comments however: 303 304#. When writing C code: Obviously if you are writing C code, use C style 305 comments. 306 307#. When writing a header file that may be ``#include``\d by a C source file. 308 309#. When writing a source file that is used by a tool that only accepts C style 310 comments. 311 312Commenting out large blocks of code is discouraged, but if you really have to do 313this (for documentation purposes or as a suggestion for debug printing), use 314``#if 0`` and ``#endif``. These nest properly and are better behaved in general 315than C style comments. 316 317Doxygen Use in Documentation Comments 318^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 319 320Use the ``\file`` command to turn the standard file header into a file-level 321comment. 322 323Include descriptive paragraphs for all public interfaces (public classes, 324member and non-member functions). Don't just restate the information that can 325be inferred from the API name. The first sentence (or a paragraph beginning 326with ``\brief``) is used as an abstract. Try to use a single sentence as the 327``\brief`` adds visual clutter. Put detailed discussion into separate 328paragraphs. 329 330To refer to parameter names inside a paragraph, use the ``\p name`` command. 331Don't use the ``\arg name`` command since it starts a new paragraph that 332contains documentation for the parameter. 333 334Wrap non-inline code examples in ``\code ... \endcode``. 335 336To document a function parameter, start a new paragraph with the 337``\param name`` command. If the parameter is used as an out or an in/out 338parameter, use the ``\param [out] name`` or ``\param [in,out] name`` command, 339respectively. 340 341To describe function return value, start a new paragraph with the ``\returns`` 342command. 343 344A minimal documentation comment: 345 346.. code-block:: c++ 347 348 /// Sets the xyzzy property to \p Baz. 349 void setXyzzy(bool Baz); 350 351A documentation comment that uses all Doxygen features in a preferred way: 352 353.. code-block:: c++ 354 355 /// Does foo and bar. 356 /// 357 /// Does not do foo the usual way if \p Baz is true. 358 /// 359 /// Typical usage: 360 /// \code 361 /// fooBar(false, "quux", Res); 362 /// \endcode 363 /// 364 /// \param Quux kind of foo to do. 365 /// \param [out] Result filled with bar sequence on foo success. 366 /// 367 /// \returns true on success. 368 bool fooBar(bool Baz, StringRef Quux, std::vector<int> &Result); 369 370Don't duplicate the documentation comment in the header file and in the 371implementation file. Put the documentation comments for public APIs into the 372header file. Documentation comments for private APIs can go to the 373implementation file. In any case, implementation files can include additional 374comments (not necessarily in Doxygen markup) to explain implementation details 375as needed. 376 377Don't duplicate function or class name at the beginning of the comment. 378For humans it is obvious which function or class is being documented; 379automatic documentation processing tools are smart enough to bind the comment 380to the correct declaration. 381 382Wrong: 383 384.. code-block:: c++ 385 386 // In Something.h: 387 388 /// Something - An abstraction for some complicated thing. 389 class Something { 390 public: 391 /// fooBar - Does foo and bar. 392 void fooBar(); 393 }; 394 395 // In Something.cpp: 396 397 /// fooBar - Does foo and bar. 398 void Something::fooBar() { ... } 399 400Correct: 401 402.. code-block:: c++ 403 404 // In Something.h: 405 406 /// An abstraction for some complicated thing. 407 class Something { 408 public: 409 /// Does foo and bar. 410 void fooBar(); 411 }; 412 413 // In Something.cpp: 414 415 // Builds a B-tree in order to do foo. See paper by... 416 void Something::fooBar() { ... } 417 418It is not required to use additional Doxygen features, but sometimes it might 419be a good idea to do so. 420 421Consider: 422 423* adding comments to any narrow namespace containing a collection of 424 related functions or types; 425 426* using top-level groups to organize a collection of related functions at 427 namespace scope where the grouping is smaller than the namespace; 428 429* using member groups and additional comments attached to member 430 groups to organize within a class. 431 432For example: 433 434.. code-block:: c++ 435 436 class Something { 437 /// \name Functions that do Foo. 438 /// @{ 439 void fooBar(); 440 void fooBaz(); 441 /// @} 442 ... 443 }; 444 445``#include`` Style 446^^^^^^^^^^^^^^^^^^ 447 448Immediately after the `header file comment`_ (and include guards if working on a 449header file), the `minimal list of #includes`_ required by the file should be 450listed. We prefer these ``#include``\s to be listed in this order: 451 452.. _Main Module Header: 453.. _Local/Private Headers: 454 455#. Main Module Header 456#. Local/Private Headers 457#. LLVM project/subproject headers (``clang/...``, ``lldb/...``, ``llvm/...``, etc) 458#. System ``#include``\s 459 460and each category should be sorted lexicographically by the full path. 461 462The `Main Module Header`_ file applies to ``.cpp`` files which implement an 463interface defined by a ``.h`` file. This ``#include`` should always be included 464**first** regardless of where it lives on the file system. By including a 465header file first in the ``.cpp`` files that implement the interfaces, we ensure 466that the header does not have any hidden dependencies which are not explicitly 467``#include``\d in the header, but should be. It is also a form of documentation 468in the ``.cpp`` file to indicate where the interfaces it implements are defined. 469 470LLVM project and subproject headers should be grouped from most specific to least 471specific, for the same reasons described above. For example, LLDB depends on 472both clang and LLVM, and clang depends on LLVM. So an LLDB source file should 473include ``lldb`` headers first, followed by ``clang`` headers, followed by 474``llvm`` headers, to reduce the possibility (for example) of an LLDB header 475accidentally picking up a missing include due to the previous inclusion of that 476header in the main source file or some earlier header file. clang should 477similarly include its own headers before including llvm headers. This rule 478applies to all LLVM subprojects. 479 480.. _fit into 80 columns: 481 482Source Code Width 483^^^^^^^^^^^^^^^^^ 484 485Write your code to fit within 80 columns of text. This helps those of us who 486like to print out code and look at your code in an ``xterm`` without resizing 487it. 488 489The longer answer is that there must be some limit to the width of the code in 490order to reasonably allow developers to have multiple files side-by-side in 491windows on a modest display. If you are going to pick a width limit, it is 492somewhat arbitrary but you might as well pick something standard. Going with 90 493columns (for example) instead of 80 columns wouldn't add any significant value 494and would be detrimental to printing out code. Also many other projects have 495standardized on 80 columns, so some people have already configured their editors 496for it (vs something else, like 90 columns). 497 498This is one of many contentious issues in coding standards, but it is not up for 499debate. 500 501Use Spaces Instead of Tabs 502^^^^^^^^^^^^^^^^^^^^^^^^^^ 503 504In all cases, prefer spaces to tabs in source files. People have different 505preferred indentation levels, and different styles of indentation that they 506like; this is fine. What isn't fine is that different editors/viewers expand 507tabs out to different tab stops. This can cause your code to look completely 508unreadable, and it is not worth dealing with. 509 510As always, follow the `Golden Rule`_ above: follow the style of 511existing code if you are modifying and extending it. If you like four spaces of 512indentation, **DO NOT** do that in the middle of a chunk of code with two spaces 513of indentation. Also, do not reindent a whole source file: it makes for 514incredible diffs that are absolutely worthless. 515 516Indent Code Consistently 517^^^^^^^^^^^^^^^^^^^^^^^^ 518 519Okay, in your first year of programming you were told that indentation is 520important. If you didn't believe and internalize this then, now is the time. 521Just do it. With the introduction of C++11, there are some new formatting 522challenges that merit some suggestions to help have consistent, maintainable, 523and tool-friendly formatting and indentation. 524 525Format Lambdas Like Blocks Of Code 526"""""""""""""""""""""""""""""""""" 527 528When formatting a multi-line lambda, format it like a block of code, that's 529what it is. If there is only one multi-line lambda in a statement, and there 530are no expressions lexically after it in the statement, drop the indent to the 531standard two space indent for a block of code, as if it were an if-block opened 532by the preceding part of the statement: 533 534.. code-block:: c++ 535 536 std::sort(foo.begin(), foo.end(), [&](Foo a, Foo b) -> bool { 537 if (a.blah < b.blah) 538 return true; 539 if (a.baz < b.baz) 540 return true; 541 return a.bam < b.bam; 542 }); 543 544To take best advantage of this formatting, if you are designing an API which 545accepts a continuation or single callable argument (be it a functor, or 546a ``std::function``), it should be the last argument if at all possible. 547 548If there are multiple multi-line lambdas in a statement, or there is anything 549interesting after the lambda in the statement, indent the block two spaces from 550the indent of the ``[]``: 551 552.. code-block:: c++ 553 554 dyn_switch(V->stripPointerCasts(), 555 [] (PHINode *PN) { 556 // process phis... 557 }, 558 [] (SelectInst *SI) { 559 // process selects... 560 }, 561 [] (LoadInst *LI) { 562 // process loads... 563 }, 564 [] (AllocaInst *AI) { 565 // process allocas... 566 }); 567 568Braced Initializer Lists 569"""""""""""""""""""""""" 570 571With C++11, there are significantly more uses of braced lists to perform 572initialization. These allow you to easily construct aggregate temporaries in 573expressions among other niceness. They now have a natural way of ending up 574nested within each other and within function calls in order to build up 575aggregates (such as option structs) from local variables. To make matters 576worse, we also have many more uses of braces in an expression context that are 577*not* performing initialization. 578 579The historically common formatting of braced initialization of aggregate 580variables does not mix cleanly with deep nesting, general expression contexts, 581function arguments, and lambdas. We suggest new code use a simple rule for 582formatting braced initialization lists: act as-if the braces were parentheses 583in a function call. The formatting rules exactly match those already well 584understood for formatting nested function calls. Examples: 585 586.. code-block:: c++ 587 588 foo({a, b, c}, {1, 2, 3}); 589 590 llvm::Constant *Mask[] = { 591 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 0), 592 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 1), 593 llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 2)}; 594 595This formatting scheme also makes it particularly easy to get predictable, 596consistent, and automatic formatting with tools like `Clang Format`_. 597 598.. _Clang Format: http://clang.llvm.org/docs/ClangFormat.html 599 600Language and Compiler Issues 601---------------------------- 602 603Treat Compiler Warnings Like Errors 604^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 605 606If your code has compiler warnings in it, something is wrong --- you aren't 607casting values correctly, you have "questionable" constructs in your code, or 608you are doing something legitimately wrong. Compiler warnings can cover up 609legitimate errors in output and make dealing with a translation unit difficult. 610 611It is not possible to prevent all warnings from all compilers, nor is it 612desirable. Instead, pick a standard compiler (like ``gcc``) that provides a 613good thorough set of warnings, and stick to it. At least in the case of 614``gcc``, it is possible to work around any spurious errors by changing the 615syntax of the code slightly. For example, a warning that annoys me occurs when 616I write code like this: 617 618.. code-block:: c++ 619 620 if (V = getValue()) { 621 ... 622 } 623 624``gcc`` will warn me that I probably want to use the ``==`` operator, and that I 625probably mistyped it. In most cases, I haven't, and I really don't want the 626spurious errors. To fix this particular problem, I rewrite the code like 627this: 628 629.. code-block:: c++ 630 631 if ((V = getValue())) { 632 ... 633 } 634 635which shuts ``gcc`` up. Any ``gcc`` warning that annoys you can be fixed by 636massaging the code appropriately. 637 638Write Portable Code 639^^^^^^^^^^^^^^^^^^^ 640 641In almost all cases, it is possible and within reason to write completely 642portable code. If there are cases where it isn't possible to write portable 643code, isolate it behind a well defined (and well documented) interface. 644 645In practice, this means that you shouldn't assume much about the host compiler 646(and Visual Studio tends to be the lowest common denominator). If advanced 647features are used, they should only be an implementation detail of a library 648which has a simple exposed API, and preferably be buried in ``libSystem``. 649 650Do not use RTTI or Exceptions 651^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 652 653In an effort to reduce code and executable size, LLVM does not use RTTI 654(e.g. ``dynamic_cast<>;``) or exceptions. These two language features violate 655the general C++ principle of *"you only pay for what you use"*, causing 656executable bloat even if exceptions are never used in the code base, or if RTTI 657is never used for a class. Because of this, we turn them off globally in the 658code. 659 660That said, LLVM does make extensive use of a hand-rolled form of RTTI that use 661templates like :ref:`isa\<>, cast\<>, and dyn_cast\<> <isa>`. 662This form of RTTI is opt-in and can be 663:doc:`added to any class <HowToSetUpLLVMStyleRTTI>`. It is also 664substantially more efficient than ``dynamic_cast<>``. 665 666.. _static constructor: 667 668Do not use Static Constructors 669^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 670 671Static constructors and destructors (e.g. global variables whose types have a 672constructor or destructor) should not be added to the code base, and should be 673removed wherever possible. Besides `well known problems 674<http://yosefk.com/c++fqa/ctors.html#fqa-10.12>`_ where the order of 675initialization is undefined between globals in different source files, the 676entire concept of static constructors is at odds with the common use case of 677LLVM as a library linked into a larger application. 678 679Consider the use of LLVM as a JIT linked into another application (perhaps for 680`OpenGL, custom languages <http://llvm.org/Users.html>`_, `shaders in movies 681<http://llvm.org/devmtg/2010-11/Gritz-OpenShadingLang.pdf>`_, etc). Due to the 682design of static constructors, they must be executed at startup time of the 683entire application, regardless of whether or how LLVM is used in that larger 684application. There are two problems with this: 685 686* The time to run the static constructors impacts startup time of applications 687 --- a critical time for GUI apps, among others. 688 689* The static constructors cause the app to pull many extra pages of memory off 690 the disk: both the code for the constructor in each ``.o`` file and the small 691 amount of data that gets touched. In addition, touched/dirty pages put more 692 pressure on the VM system on low-memory machines. 693 694We would really like for there to be zero cost for linking in an additional LLVM 695target or other library into an application, but static constructors violate 696this goal. 697 698That said, LLVM unfortunately does contain static constructors. It would be a 699`great project <http://llvm.org/PR11944>`_ for someone to purge all static 700constructors from LLVM, and then enable the ``-Wglobal-constructors`` warning 701flag (when building with Clang) to ensure we do not regress in the future. 702 703Use of ``class`` and ``struct`` Keywords 704^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 705 706In C++, the ``class`` and ``struct`` keywords can be used almost 707interchangeably. The only difference is when they are used to declare a class: 708``class`` makes all members private by default while ``struct`` makes all 709members public by default. 710 711Unfortunately, not all compilers follow the rules and some will generate 712different symbols based on whether ``class`` or ``struct`` was used to declare 713the symbol (e.g., MSVC). This can lead to problems at link time. 714 715* All declarations and definitions of a given ``class`` or ``struct`` must use 716 the same keyword. For example: 717 718.. code-block:: c++ 719 720 class Foo; 721 722 // Breaks mangling in MSVC. 723 struct Foo { int Data; }; 724 725* As a rule of thumb, ``struct`` should be kept to structures where *all* 726 members are declared public. 727 728.. code-block:: c++ 729 730 // Foo feels like a class... this is strange. 731 struct Foo { 732 private: 733 int Data; 734 public: 735 Foo() : Data(0) { } 736 int getData() const { return Data; } 737 void setData(int D) { Data = D; } 738 }; 739 740 // Bar isn't POD, but it does look like a struct. 741 struct Bar { 742 int Data; 743 Bar() : Data(0) { } 744 }; 745 746Do not use Braced Initializer Lists to Call a Constructor 747^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 748 749In C++11 there is a "generalized initialization syntax" which allows calling 750constructors using braced initializer lists. Do not use these to call 751constructors with any interesting logic or if you care that you're calling some 752*particular* constructor. Those should look like function calls using 753parentheses rather than like aggregate initialization. Similarly, if you need 754to explicitly name the type and call its constructor to create a temporary, 755don't use a braced initializer list. Instead, use a braced initializer list 756(without any type for temporaries) when doing aggregate initialization or 757something notionally equivalent. Examples: 758 759.. code-block:: c++ 760 761 class Foo { 762 public: 763 // Construct a Foo by reading data from the disk in the whizbang format, ... 764 Foo(std::string filename); 765 766 // Construct a Foo by looking up the Nth element of some global data ... 767 Foo(int N); 768 769 // ... 770 }; 771 772 // The Foo constructor call is very deliberate, no braces. 773 std::fill(foo.begin(), foo.end(), Foo("name")); 774 775 // The pair is just being constructed like an aggregate, use braces. 776 bar_map.insert({my_key, my_value}); 777 778If you use a braced initializer list when initializing a variable, use an equals before the open curly brace: 779 780.. code-block:: c++ 781 782 int data[] = {0, 1, 2, 3}; 783 784Use ``auto`` Type Deduction to Make Code More Readable 785^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 786 787Some are advocating a policy of "almost always ``auto``" in C++11, however LLVM 788uses a more moderate stance. Use ``auto`` if and only if it makes the code more 789readable or easier to maintain. Don't "almost always" use ``auto``, but do use 790``auto`` with initializers like ``cast<Foo>(...)`` or other places where the 791type is already obvious from the context. Another time when ``auto`` works well 792for these purposes is when the type would have been abstracted away anyways, 793often behind a container's typedef such as ``std::vector<T>::iterator``. 794 795Beware unnecessary copies with ``auto`` 796^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 797 798The convenience of ``auto`` makes it easy to forget that its default behavior 799is a copy. Particularly in range-based ``for`` loops, careless copies are 800expensive. 801 802As a rule of thumb, use ``auto &`` unless you need to copy the result, and use 803``auto *`` when copying pointers. 804 805.. code-block:: c++ 806 807 // Typically there's no reason to copy. 808 for (const auto &Val : Container) { observe(Val); } 809 for (auto &Val : Container) { Val.change(); } 810 811 // Remove the reference if you really want a new copy. 812 for (auto Val : Container) { Val.change(); saveSomewhere(Val); } 813 814 // Copy pointers, but make it clear that they're pointers. 815 for (const auto *Ptr : Container) { observe(*Ptr); } 816 for (auto *Ptr : Container) { Ptr->change(); } 817 818Style Issues 819============ 820 821The High-Level Issues 822--------------------- 823 824A Public Header File **is** a Module 825^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 826 827C++ doesn't do too well in the modularity department. There is no real 828encapsulation or data hiding (unless you use expensive protocol classes), but it 829is what we have to work with. When you write a public header file (in the LLVM 830source tree, they live in the top level "``include``" directory), you are 831defining a module of functionality. 832 833Ideally, modules should be completely independent of each other, and their 834header files should only ``#include`` the absolute minimum number of headers 835possible. A module is not just a class, a function, or a namespace: it's a 836collection of these that defines an interface. This interface may be several 837functions, classes, or data structures, but the important issue is how they work 838together. 839 840In general, a module should be implemented by one or more ``.cpp`` files. Each 841of these ``.cpp`` files should include the header that defines their interface 842first. This ensures that all of the dependences of the module header have been 843properly added to the module header itself, and are not implicit. System 844headers should be included after user headers for a translation unit. 845 846.. _minimal list of #includes: 847 848``#include`` as Little as Possible 849^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 850 851``#include`` hurts compile time performance. Don't do it unless you have to, 852especially in header files. 853 854But wait! Sometimes you need to have the definition of a class to use it, or to 855inherit from it. In these cases go ahead and ``#include`` that header file. Be 856aware however that there are many cases where you don't need to have the full 857definition of a class. If you are using a pointer or reference to a class, you 858don't need the header file. If you are simply returning a class instance from a 859prototyped function or method, you don't need it. In fact, for most cases, you 860simply don't need the definition of a class. And not ``#include``\ing speeds up 861compilation. 862 863It is easy to try to go too overboard on this recommendation, however. You 864**must** include all of the header files that you are using --- you can include 865them either directly or indirectly through another header file. To make sure 866that you don't accidentally forget to include a header file in your module 867header, make sure to include your module header **first** in the implementation 868file (as mentioned above). This way there won't be any hidden dependencies that 869you'll find out about later. 870 871Keep "Internal" Headers Private 872^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 873 874Many modules have a complex implementation that causes them to use more than one 875implementation (``.cpp``) file. It is often tempting to put the internal 876communication interface (helper classes, extra functions, etc) in the public 877module header file. Don't do this! 878 879If you really need to do something like this, put a private header file in the 880same directory as the source files, and include it locally. This ensures that 881your private interface remains private and undisturbed by outsiders. 882 883.. note:: 884 885 It's okay to put extra implementation methods in a public class itself. Just 886 make them private (or protected) and all is well. 887 888.. _early exits: 889 890Use Early Exits and ``continue`` to Simplify Code 891^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 892 893When reading code, keep in mind how much state and how many previous decisions 894have to be remembered by the reader to understand a block of code. Aim to 895reduce indentation where possible when it doesn't make it more difficult to 896understand the code. One great way to do this is by making use of early exits 897and the ``continue`` keyword in long loops. As an example of using an early 898exit from a function, consider this "bad" code: 899 900.. code-block:: c++ 901 902 Value *doSomething(Instruction *I) { 903 if (!isa<TerminatorInst>(I) && 904 I->hasOneUse() && doOtherThing(I)) { 905 ... some long code .... 906 } 907 908 return 0; 909 } 910 911This code has several problems if the body of the ``'if'`` is large. When 912you're looking at the top of the function, it isn't immediately clear that this 913*only* does interesting things with non-terminator instructions, and only 914applies to things with the other predicates. Second, it is relatively difficult 915to describe (in comments) why these predicates are important because the ``if`` 916statement makes it difficult to lay out the comments. Third, when you're deep 917within the body of the code, it is indented an extra level. Finally, when 918reading the top of the function, it isn't clear what the result is if the 919predicate isn't true; you have to read to the end of the function to know that 920it returns null. 921 922It is much preferred to format the code like this: 923 924.. code-block:: c++ 925 926 Value *doSomething(Instruction *I) { 927 // Terminators never need 'something' done to them because ... 928 if (isa<TerminatorInst>(I)) 929 return 0; 930 931 // We conservatively avoid transforming instructions with multiple uses 932 // because goats like cheese. 933 if (!I->hasOneUse()) 934 return 0; 935 936 // This is really just here for example. 937 if (!doOtherThing(I)) 938 return 0; 939 940 ... some long code .... 941 } 942 943This fixes these problems. A similar problem frequently happens in ``for`` 944loops. A silly example is something like this: 945 946.. code-block:: c++ 947 948 for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) { 949 if (BinaryOperator *BO = dyn_cast<BinaryOperator>(II)) { 950 Value *LHS = BO->getOperand(0); 951 Value *RHS = BO->getOperand(1); 952 if (LHS != RHS) { 953 ... 954 } 955 } 956 } 957 958When you have very, very small loops, this sort of structure is fine. But if it 959exceeds more than 10-15 lines, it becomes difficult for people to read and 960understand at a glance. The problem with this sort of code is that it gets very 961nested very quickly. Meaning that the reader of the code has to keep a lot of 962context in their brain to remember what is going immediately on in the loop, 963because they don't know if/when the ``if`` conditions will have ``else``\s etc. 964It is strongly preferred to structure the loop like this: 965 966.. code-block:: c++ 967 968 for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) { 969 BinaryOperator *BO = dyn_cast<BinaryOperator>(II); 970 if (!BO) continue; 971 972 Value *LHS = BO->getOperand(0); 973 Value *RHS = BO->getOperand(1); 974 if (LHS == RHS) continue; 975 976 ... 977 } 978 979This has all the benefits of using early exits for functions: it reduces nesting 980of the loop, it makes it easier to describe why the conditions are true, and it 981makes it obvious to the reader that there is no ``else`` coming up that they 982have to push context into their brain for. If a loop is large, this can be a 983big understandability win. 984 985Don't use ``else`` after a ``return`` 986^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 987 988For similar reasons above (reduction of indentation and easier reading), please 989do not use ``'else'`` or ``'else if'`` after something that interrupts control 990flow --- like ``return``, ``break``, ``continue``, ``goto``, etc. For 991example, this is *bad*: 992 993.. code-block:: c++ 994 995 case 'J': { 996 if (Signed) { 997 Type = Context.getsigjmp_bufType(); 998 if (Type.isNull()) { 999 Error = ASTContext::GE_Missing_sigjmp_buf; 1000 return QualType(); 1001 } else { 1002 break; 1003 } 1004 } else { 1005 Type = Context.getjmp_bufType(); 1006 if (Type.isNull()) { 1007 Error = ASTContext::GE_Missing_jmp_buf; 1008 return QualType(); 1009 } else { 1010 break; 1011 } 1012 } 1013 } 1014 1015It is better to write it like this: 1016 1017.. code-block:: c++ 1018 1019 case 'J': 1020 if (Signed) { 1021 Type = Context.getsigjmp_bufType(); 1022 if (Type.isNull()) { 1023 Error = ASTContext::GE_Missing_sigjmp_buf; 1024 return QualType(); 1025 } 1026 } else { 1027 Type = Context.getjmp_bufType(); 1028 if (Type.isNull()) { 1029 Error = ASTContext::GE_Missing_jmp_buf; 1030 return QualType(); 1031 } 1032 } 1033 break; 1034 1035Or better yet (in this case) as: 1036 1037.. code-block:: c++ 1038 1039 case 'J': 1040 if (Signed) 1041 Type = Context.getsigjmp_bufType(); 1042 else 1043 Type = Context.getjmp_bufType(); 1044 1045 if (Type.isNull()) { 1046 Error = Signed ? ASTContext::GE_Missing_sigjmp_buf : 1047 ASTContext::GE_Missing_jmp_buf; 1048 return QualType(); 1049 } 1050 break; 1051 1052The idea is to reduce indentation and the amount of code you have to keep track 1053of when reading the code. 1054 1055Turn Predicate Loops into Predicate Functions 1056^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1057 1058It is very common to write small loops that just compute a boolean value. There 1059are a number of ways that people commonly write these, but an example of this 1060sort of thing is: 1061 1062.. code-block:: c++ 1063 1064 bool FoundFoo = false; 1065 for (unsigned I = 0, E = BarList.size(); I != E; ++I) 1066 if (BarList[I]->isFoo()) { 1067 FoundFoo = true; 1068 break; 1069 } 1070 1071 if (FoundFoo) { 1072 ... 1073 } 1074 1075This sort of code is awkward to write, and is almost always a bad sign. Instead 1076of this sort of loop, we strongly prefer to use a predicate function (which may 1077be `static`_) that uses `early exits`_ to compute the predicate. We prefer the 1078code to be structured like this: 1079 1080.. code-block:: c++ 1081 1082 /// \returns true if the specified list has an element that is a foo. 1083 static bool containsFoo(const std::vector<Bar*> &List) { 1084 for (unsigned I = 0, E = List.size(); I != E; ++I) 1085 if (List[I]->isFoo()) 1086 return true; 1087 return false; 1088 } 1089 ... 1090 1091 if (containsFoo(BarList)) { 1092 ... 1093 } 1094 1095There are many reasons for doing this: it reduces indentation and factors out 1096code which can often be shared by other code that checks for the same predicate. 1097More importantly, it *forces you to pick a name* for the function, and forces 1098you to write a comment for it. In this silly example, this doesn't add much 1099value. However, if the condition is complex, this can make it a lot easier for 1100the reader to understand the code that queries for this predicate. Instead of 1101being faced with the in-line details of how we check to see if the BarList 1102contains a foo, we can trust the function name and continue reading with better 1103locality. 1104 1105The Low-Level Issues 1106-------------------- 1107 1108Name Types, Functions, Variables, and Enumerators Properly 1109^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1110 1111Poorly-chosen names can mislead the reader and cause bugs. We cannot stress 1112enough how important it is to use *descriptive* names. Pick names that match 1113the semantics and role of the underlying entities, within reason. Avoid 1114abbreviations unless they are well known. After picking a good name, make sure 1115to use consistent capitalization for the name, as inconsistency requires clients 1116to either memorize the APIs or to look it up to find the exact spelling. 1117 1118In general, names should be in camel case (e.g. ``TextFileReader`` and 1119``isLValue()``). Different kinds of declarations have different rules: 1120 1121* **Type names** (including classes, structs, enums, typedefs, etc) should be 1122 nouns and start with an upper-case letter (e.g. ``TextFileReader``). 1123 1124* **Variable names** should be nouns (as they represent state). The name should 1125 be camel case, and start with an upper case letter (e.g. ``Leader`` or 1126 ``Boats``). 1127 1128* **Function names** should be verb phrases (as they represent actions), and 1129 command-like function should be imperative. The name should be camel case, 1130 and start with a lower case letter (e.g. ``openFile()`` or ``isFoo()``). 1131 1132* **Enum declarations** (e.g. ``enum Foo {...}``) are types, so they should 1133 follow the naming conventions for types. A common use for enums is as a 1134 discriminator for a union, or an indicator of a subclass. When an enum is 1135 used for something like this, it should have a ``Kind`` suffix 1136 (e.g. ``ValueKind``). 1137 1138* **Enumerators** (e.g. ``enum { Foo, Bar }``) and **public member variables** 1139 should start with an upper-case letter, just like types. Unless the 1140 enumerators are defined in their own small namespace or inside a class, 1141 enumerators should have a prefix corresponding to the enum declaration name. 1142 For example, ``enum ValueKind { ... };`` may contain enumerators like 1143 ``VK_Argument``, ``VK_BasicBlock``, etc. Enumerators that are just 1144 convenience constants are exempt from the requirement for a prefix. For 1145 instance: 1146 1147 .. code-block:: c++ 1148 1149 enum { 1150 MaxSize = 42, 1151 Density = 12 1152 }; 1153 1154As an exception, classes that mimic STL classes can have member names in STL's 1155style of lower-case words separated by underscores (e.g. ``begin()``, 1156``push_back()``, and ``empty()``). Classes that provide multiple 1157iterators should add a singular prefix to ``begin()`` and ``end()`` 1158(e.g. ``global_begin()`` and ``use_begin()``). 1159 1160Here are some examples of good and bad names: 1161 1162.. code-block:: c++ 1163 1164 class VehicleMaker { 1165 ... 1166 Factory<Tire> F; // Bad -- abbreviation and non-descriptive. 1167 Factory<Tire> Factory; // Better. 1168 Factory<Tire> TireFactory; // Even better -- if VehicleMaker has more than one 1169 // kind of factories. 1170 }; 1171 1172 Vehicle makeVehicle(VehicleType Type) { 1173 VehicleMaker M; // Might be OK if having a short life-span. 1174 Tire Tmp1 = M.makeTire(); // Bad -- 'Tmp1' provides no information. 1175 Light Headlight = M.makeLight("head"); // Good -- descriptive. 1176 ... 1177 } 1178 1179Assert Liberally 1180^^^^^^^^^^^^^^^^ 1181 1182Use the "``assert``" macro to its fullest. Check all of your preconditions and 1183assumptions, you never know when a bug (not necessarily even yours) might be 1184caught early by an assertion, which reduces debugging time dramatically. The 1185"``<cassert>``" header file is probably already included by the header files you 1186are using, so it doesn't cost anything to use it. 1187 1188To further assist with debugging, make sure to put some kind of error message in 1189the assertion statement, which is printed if the assertion is tripped. This 1190helps the poor debugger make sense of why an assertion is being made and 1191enforced, and hopefully what to do about it. Here is one complete example: 1192 1193.. code-block:: c++ 1194 1195 inline Value *getOperand(unsigned I) { 1196 assert(I < Operands.size() && "getOperand() out of range!"); 1197 return Operands[I]; 1198 } 1199 1200Here are more examples: 1201 1202.. code-block:: c++ 1203 1204 assert(Ty->isPointerType() && "Can't allocate a non-pointer type!"); 1205 1206 assert((Opcode == Shl || Opcode == Shr) && "ShiftInst Opcode invalid!"); 1207 1208 assert(idx < getNumSuccessors() && "Successor # out of range!"); 1209 1210 assert(V1.getType() == V2.getType() && "Constant types must be identical!"); 1211 1212 assert(isa<PHINode>(Succ->front()) && "Only works on PHId BBs!"); 1213 1214You get the idea. 1215 1216In the past, asserts were used to indicate a piece of code that should not be 1217reached. These were typically of the form: 1218 1219.. code-block:: c++ 1220 1221 assert(0 && "Invalid radix for integer literal"); 1222 1223This has a few issues, the main one being that some compilers might not 1224understand the assertion, or warn about a missing return in builds where 1225assertions are compiled out. 1226 1227Today, we have something much better: ``llvm_unreachable``: 1228 1229.. code-block:: c++ 1230 1231 llvm_unreachable("Invalid radix for integer literal"); 1232 1233When assertions are enabled, this will print the message if it's ever reached 1234and then exit the program. When assertions are disabled (i.e. in release 1235builds), ``llvm_unreachable`` becomes a hint to compilers to skip generating 1236code for this branch. If the compiler does not support this, it will fall back 1237to the "abort" implementation. 1238 1239Another issue is that values used only by assertions will produce an "unused 1240value" warning when assertions are disabled. For example, this code will warn: 1241 1242.. code-block:: c++ 1243 1244 unsigned Size = V.size(); 1245 assert(Size > 42 && "Vector smaller than it should be"); 1246 1247 bool NewToSet = Myset.insert(Value); 1248 assert(NewToSet && "The value shouldn't be in the set yet"); 1249 1250These are two interesting different cases. In the first case, the call to 1251``V.size()`` is only useful for the assert, and we don't want it executed when 1252assertions are disabled. Code like this should move the call into the assert 1253itself. In the second case, the side effects of the call must happen whether 1254the assert is enabled or not. In this case, the value should be cast to void to 1255disable the warning. To be specific, it is preferred to write the code like 1256this: 1257 1258.. code-block:: c++ 1259 1260 assert(V.size() > 42 && "Vector smaller than it should be"); 1261 1262 bool NewToSet = Myset.insert(Value); (void)NewToSet; 1263 assert(NewToSet && "The value shouldn't be in the set yet"); 1264 1265Do Not Use ``using namespace std`` 1266^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1267 1268In LLVM, we prefer to explicitly prefix all identifiers from the standard 1269namespace with an "``std::``" prefix, rather than rely on "``using namespace 1270std;``". 1271 1272In header files, adding a ``'using namespace XXX'`` directive pollutes the 1273namespace of any source file that ``#include``\s the header. This is clearly a 1274bad thing. 1275 1276In implementation files (e.g. ``.cpp`` files), the rule is more of a stylistic 1277rule, but is still important. Basically, using explicit namespace prefixes 1278makes the code **clearer**, because it is immediately obvious what facilities 1279are being used and where they are coming from. And **more portable**, because 1280namespace clashes cannot occur between LLVM code and other namespaces. The 1281portability rule is important because different standard library implementations 1282expose different symbols (potentially ones they shouldn't), and future revisions 1283to the C++ standard will add more symbols to the ``std`` namespace. As such, we 1284never use ``'using namespace std;'`` in LLVM. 1285 1286The exception to the general rule (i.e. it's not an exception for the ``std`` 1287namespace) is for implementation files. For example, all of the code in the 1288LLVM project implements code that lives in the 'llvm' namespace. As such, it is 1289ok, and actually clearer, for the ``.cpp`` files to have a ``'using namespace 1290llvm;'`` directive at the top, after the ``#include``\s. This reduces 1291indentation in the body of the file for source editors that indent based on 1292braces, and keeps the conceptual context cleaner. The general form of this rule 1293is that any ``.cpp`` file that implements code in any namespace may use that 1294namespace (and its parents'), but should not use any others. 1295 1296Provide a Virtual Method Anchor for Classes in Headers 1297^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1298 1299If a class is defined in a header file and has a vtable (either it has virtual 1300methods or it derives from classes with virtual methods), it must always have at 1301least one out-of-line virtual method in the class. Without this, the compiler 1302will copy the vtable and RTTI into every ``.o`` file that ``#include``\s the 1303header, bloating ``.o`` file sizes and increasing link times. 1304 1305Don't use default labels in fully covered switches over enumerations 1306^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1307 1308``-Wswitch`` warns if a switch, without a default label, over an enumeration 1309does not cover every enumeration value. If you write a default label on a fully 1310covered switch over an enumeration then the ``-Wswitch`` warning won't fire 1311when new elements are added to that enumeration. To help avoid adding these 1312kinds of defaults, Clang has the warning ``-Wcovered-switch-default`` which is 1313off by default but turned on when building LLVM with a version of Clang that 1314supports the warning. 1315 1316A knock-on effect of this stylistic requirement is that when building LLVM with 1317GCC you may get warnings related to "control may reach end of non-void function" 1318if you return from each case of a covered switch-over-enum because GCC assumes 1319that the enum expression may take any representable value, not just those of 1320individual enumerators. To suppress this warning, use ``llvm_unreachable`` after 1321the switch. 1322 1323Don't evaluate ``end()`` every time through a loop 1324^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1325 1326Because C++ doesn't have a standard "``foreach``" loop (though it can be 1327emulated with macros and may be coming in C++'0x) we end up writing a lot of 1328loops that manually iterate from begin to end on a variety of containers or 1329through other data structures. One common mistake is to write a loop in this 1330style: 1331 1332.. code-block:: c++ 1333 1334 BasicBlock *BB = ... 1335 for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) 1336 ... use I ... 1337 1338The problem with this construct is that it evaluates "``BB->end()``" every time 1339through the loop. Instead of writing the loop like this, we strongly prefer 1340loops to be written so that they evaluate it once before the loop starts. A 1341convenient way to do this is like so: 1342 1343.. code-block:: c++ 1344 1345 BasicBlock *BB = ... 1346 for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) 1347 ... use I ... 1348 1349The observant may quickly point out that these two loops may have different 1350semantics: if the container (a basic block in this case) is being mutated, then 1351"``BB->end()``" may change its value every time through the loop and the second 1352loop may not in fact be correct. If you actually do depend on this behavior, 1353please write the loop in the first form and add a comment indicating that you 1354did it intentionally. 1355 1356Why do we prefer the second form (when correct)? Writing the loop in the first 1357form has two problems. First it may be less efficient than evaluating it at the 1358start of the loop. In this case, the cost is probably minor --- a few extra 1359loads every time through the loop. However, if the base expression is more 1360complex, then the cost can rise quickly. I've seen loops where the end 1361expression was actually something like: "``SomeMap[X]->end()``" and map lookups 1362really aren't cheap. By writing it in the second form consistently, you 1363eliminate the issue entirely and don't even have to think about it. 1364 1365The second (even bigger) issue is that writing the loop in the first form hints 1366to the reader that the loop is mutating the container (a fact that a comment 1367would handily confirm!). If you write the loop in the second form, it is 1368immediately obvious without even looking at the body of the loop that the 1369container isn't being modified, which makes it easier to read the code and 1370understand what it does. 1371 1372While the second form of the loop is a few extra keystrokes, we do strongly 1373prefer it. 1374 1375``#include <iostream>`` is Forbidden 1376^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1377 1378The use of ``#include <iostream>`` in library files is hereby **forbidden**, 1379because many common implementations transparently inject a `static constructor`_ 1380into every translation unit that includes it. 1381 1382Note that using the other stream headers (``<sstream>`` for example) is not 1383problematic in this regard --- just ``<iostream>``. However, ``raw_ostream`` 1384provides various APIs that are better performing for almost every use than 1385``std::ostream`` style APIs. 1386 1387.. note:: 1388 1389 New code should always use `raw_ostream`_ for writing, or the 1390 ``llvm::MemoryBuffer`` API for reading files. 1391 1392.. _raw_ostream: 1393 1394Use ``raw_ostream`` 1395^^^^^^^^^^^^^^^^^^^ 1396 1397LLVM includes a lightweight, simple, and efficient stream implementation in 1398``llvm/Support/raw_ostream.h``, which provides all of the common features of 1399``std::ostream``. All new code should use ``raw_ostream`` instead of 1400``ostream``. 1401 1402Unlike ``std::ostream``, ``raw_ostream`` is not a template and can be forward 1403declared as ``class raw_ostream``. Public headers should generally not include 1404the ``raw_ostream`` header, but use forward declarations and constant references 1405to ``raw_ostream`` instances. 1406 1407Avoid ``std::endl`` 1408^^^^^^^^^^^^^^^^^^^ 1409 1410The ``std::endl`` modifier, when used with ``iostreams`` outputs a newline to 1411the output stream specified. In addition to doing this, however, it also 1412flushes the output stream. In other words, these are equivalent: 1413 1414.. code-block:: c++ 1415 1416 std::cout << std::endl; 1417 std::cout << '\n' << std::flush; 1418 1419Most of the time, you probably have no reason to flush the output stream, so 1420it's better to use a literal ``'\n'``. 1421 1422Don't use ``inline`` when defining a function in a class definition 1423^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1424 1425A member function defined in a class definition is implicitly inline, so don't 1426put the ``inline`` keyword in this case. 1427 1428Don't: 1429 1430.. code-block:: c++ 1431 1432 class Foo { 1433 public: 1434 inline void bar() { 1435 // ... 1436 } 1437 }; 1438 1439Do: 1440 1441.. code-block:: c++ 1442 1443 class Foo { 1444 public: 1445 void bar() { 1446 // ... 1447 } 1448 }; 1449 1450Microscopic Details 1451------------------- 1452 1453This section describes preferred low-level formatting guidelines along with 1454reasoning on why we prefer them. 1455 1456Spaces Before Parentheses 1457^^^^^^^^^^^^^^^^^^^^^^^^^ 1458 1459We prefer to put a space before an open parenthesis only in control flow 1460statements, but not in normal function call expressions and function-like 1461macros. For example, this is good: 1462 1463.. code-block:: c++ 1464 1465 if (X) ... 1466 for (I = 0; I != 100; ++I) ... 1467 while (LLVMRocks) ... 1468 1469 somefunc(42); 1470 assert(3 != 4 && "laws of math are failing me"); 1471 1472 A = foo(42, 92) + bar(X); 1473 1474and this is bad: 1475 1476.. code-block:: c++ 1477 1478 if(X) ... 1479 for(I = 0; I != 100; ++I) ... 1480 while(LLVMRocks) ... 1481 1482 somefunc (42); 1483 assert (3 != 4 && "laws of math are failing me"); 1484 1485 A = foo (42, 92) + bar (X); 1486 1487The reason for doing this is not completely arbitrary. This style makes control 1488flow operators stand out more, and makes expressions flow better. The function 1489call operator binds very tightly as a postfix operator. Putting a space after a 1490function name (as in the last example) makes it appear that the code might bind 1491the arguments of the left-hand-side of a binary operator with the argument list 1492of a function and the name of the right side. More specifically, it is easy to 1493misread the "``A``" example as: 1494 1495.. code-block:: c++ 1496 1497 A = foo ((42, 92) + bar) (X); 1498 1499when skimming through the code. By avoiding a space in a function, we avoid 1500this misinterpretation. 1501 1502Prefer Preincrement 1503^^^^^^^^^^^^^^^^^^^ 1504 1505Hard fast rule: Preincrement (``++X``) may be no slower than postincrement 1506(``X++``) and could very well be a lot faster than it. Use preincrementation 1507whenever possible. 1508 1509The semantics of postincrement include making a copy of the value being 1510incremented, returning it, and then preincrementing the "work value". For 1511primitive types, this isn't a big deal. But for iterators, it can be a huge 1512issue (for example, some iterators contains stack and set objects in them... 1513copying an iterator could invoke the copy ctor's of these as well). In general, 1514get in the habit of always using preincrement, and you won't have a problem. 1515 1516 1517Namespace Indentation 1518^^^^^^^^^^^^^^^^^^^^^ 1519 1520In general, we strive to reduce indentation wherever possible. This is useful 1521because we want code to `fit into 80 columns`_ without wrapping horribly, but 1522also because it makes it easier to understand the code. To facilitate this and 1523avoid some insanely deep nesting on occasion, don't indent namespaces. If it 1524helps readability, feel free to add a comment indicating what namespace is 1525being closed by a ``}``. For example: 1526 1527.. code-block:: c++ 1528 1529 namespace llvm { 1530 namespace knowledge { 1531 1532 /// This class represents things that Smith can have an intimate 1533 /// understanding of and contains the data associated with it. 1534 class Grokable { 1535 ... 1536 public: 1537 explicit Grokable() { ... } 1538 virtual ~Grokable() = 0; 1539 1540 ... 1541 1542 }; 1543 1544 } // end namespace knowledge 1545 } // end namespace llvm 1546 1547 1548Feel free to skip the closing comment when the namespace being closed is 1549obvious for any reason. For example, the outer-most namespace in a header file 1550is rarely a source of confusion. But namespaces both anonymous and named in 1551source files that are being closed half way through the file probably could use 1552clarification. 1553 1554.. _static: 1555 1556Anonymous Namespaces 1557^^^^^^^^^^^^^^^^^^^^ 1558 1559After talking about namespaces in general, you may be wondering about anonymous 1560namespaces in particular. Anonymous namespaces are a great language feature 1561that tells the C++ compiler that the contents of the namespace are only visible 1562within the current translation unit, allowing more aggressive optimization and 1563eliminating the possibility of symbol name collisions. Anonymous namespaces are 1564to C++ as "static" is to C functions and global variables. While "``static``" 1565is available in C++, anonymous namespaces are more general: they can make entire 1566classes private to a file. 1567 1568The problem with anonymous namespaces is that they naturally want to encourage 1569indentation of their body, and they reduce locality of reference: if you see a 1570random function definition in a C++ file, it is easy to see if it is marked 1571static, but seeing if it is in an anonymous namespace requires scanning a big 1572chunk of the file. 1573 1574Because of this, we have a simple guideline: make anonymous namespaces as small 1575as possible, and only use them for class declarations. For example, this is 1576good: 1577 1578.. code-block:: c++ 1579 1580 namespace { 1581 class StringSort { 1582 ... 1583 public: 1584 StringSort(...) 1585 bool operator<(const char *RHS) const; 1586 }; 1587 } // end anonymous namespace 1588 1589 static void runHelper() { 1590 ... 1591 } 1592 1593 bool StringSort::operator<(const char *RHS) const { 1594 ... 1595 } 1596 1597This is bad: 1598 1599.. code-block:: c++ 1600 1601 namespace { 1602 1603 class StringSort { 1604 ... 1605 public: 1606 StringSort(...) 1607 bool operator<(const char *RHS) const; 1608 }; 1609 1610 void runHelper() { 1611 ... 1612 } 1613 1614 bool StringSort::operator<(const char *RHS) const { 1615 ... 1616 } 1617 1618 } // end anonymous namespace 1619 1620This is bad specifically because if you're looking at "``runHelper``" in the middle 1621of a large C++ file, that you have no immediate way to tell if it is local to 1622the file. When it is marked static explicitly, this is immediately obvious. 1623Also, there is no reason to enclose the definition of "``operator<``" in the 1624namespace just because it was declared there. 1625 1626See Also 1627======== 1628 1629A lot of these comments and recommendations have been culled from other sources. 1630Two particularly important books for our work are: 1631 1632#. `Effective C++ 1633 <http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876>`_ 1634 by Scott Meyers. Also interesting and useful are "More Effective C++" and 1635 "Effective STL" by the same author. 1636 1637#. `Large-Scale C++ Software Design 1638 <http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620/ref=sr_1_1>`_ 1639 by John Lakos 1640 1641If you get some free time, and you haven't read them: do so, you might learn 1642something. 1643