-
Notifications
You must be signed in to change notification settings - Fork 519
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix the SQLITECPP_PURE_FUNC macro to actually use the correct "pure" …
…attribute
- Loading branch information
Showing
2 changed files
with
32 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/** | ||
* @file Utils.h | ||
* @ingroup SQLiteCpp | ||
* @brief Definition of the SQLITECPP_PURE_FUNC macro. | ||
* | ||
* Copyright (c) 2012-2020 Sebastien Rombauts (sebastien.rombauts@gmail.com) | ||
* | ||
* Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt | ||
* or copy at http://opensource.org/licenses/MIT) | ||
*/ | ||
#pragma once | ||
|
||
// macro taken from https://github.com/nemequ/hedley/blob/master/hedley.h that was in public domain at this time | ||
#if defined(__GNUC__) || defined(__GNUG__) || defined(__clang__) ||\ | ||
(defined(__INTEL_COMPILER) && __INTEL_COMPILER > 1600) ||\ | ||
(defined(__ARMCC_VERSION) && __ARMCC_VERSION > 4010000) ||\ | ||
(\ | ||
defined(__TI_COMPILER_VERSION__) && (\ | ||
__TI_COMPILER_VERSION__ > 8003000 ||\ | ||
(__TI_COMPILER_VERSION__ > 7003000 && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))\ | ||
)\ | ||
) | ||
#if defined(__has_attribute) | ||
#if !defined(SQLITECPP_PURE_FUNC) && __has_attribute(pure) | ||
#define SQLITECPP_PURE_FUNC __attribute__((pure)) | ||
This comment has been minimized.
Sorry, something went wrong. |
||
#endif | ||
#endif | ||
#endif | ||
#if !defined(SQLITECPP_PURE_FUNC) | ||
#define SQLITECPP_PURE_FUNC | ||
#endif |
No, it should be
const
. I have done some experiments (not on SQLiteCPP, but on some synthetic example that checked how many times the stuff was called when called twice with 2 identical C-strings (which must be merged into 1 single pointer when the optimizer is enabled, and since the func is "pure" the second call is eliminated reusing the results from the first call) ), only when usingconst
it was working as intended (a single call to the "pure" function) and in fact there was an article in the net decribing their differences.