Is this a compiler bug in MSVC++ 2017 update 3












4















#include <vector>

std::vector<int>::iterator foo();
void bar(void*) {}

int main()
{
void* p;
while (foo() != foo() && (p = 0, true))
{
bar(p);
}
return 0;
}


Results in error:




c:usersjessepeppersourcerepostestcodeconsoleapplication1consoleapplication1.cpp(15): error C4703: potentially uninitialized local pointer variable 'p' used











share|improve this question


















  • 5





    Upvoted, but can you give a slightly less convoluted and more motivating example?

    – StoryTeller
    Mar 8 '18 at 8:13






  • 1





    What would you expect?

    – Serge Ballesta
    Mar 8 '18 at 8:26






  • 1





    I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

    – Oliv
    Mar 8 '18 at 8:34






  • 1





    @M.M it should certainly compile though, yet it doesn't.

    – Quentin
    Mar 8 '18 at 9:05






  • 1





    Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

    – i486
    Mar 8 '18 at 9:13


















4















#include <vector>

std::vector<int>::iterator foo();
void bar(void*) {}

int main()
{
void* p;
while (foo() != foo() && (p = 0, true))
{
bar(p);
}
return 0;
}


Results in error:




c:usersjessepeppersourcerepostestcodeconsoleapplication1consoleapplication1.cpp(15): error C4703: potentially uninitialized local pointer variable 'p' used











share|improve this question


















  • 5





    Upvoted, but can you give a slightly less convoluted and more motivating example?

    – StoryTeller
    Mar 8 '18 at 8:13






  • 1





    What would you expect?

    – Serge Ballesta
    Mar 8 '18 at 8:26






  • 1





    I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

    – Oliv
    Mar 8 '18 at 8:34






  • 1





    @M.M it should certainly compile though, yet it doesn't.

    – Quentin
    Mar 8 '18 at 9:05






  • 1





    Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

    – i486
    Mar 8 '18 at 9:13
















4












4








4








#include <vector>

std::vector<int>::iterator foo();
void bar(void*) {}

int main()
{
void* p;
while (foo() != foo() && (p = 0, true))
{
bar(p);
}
return 0;
}


Results in error:




c:usersjessepeppersourcerepostestcodeconsoleapplication1consoleapplication1.cpp(15): error C4703: potentially uninitialized local pointer variable 'p' used











share|improve this question














#include <vector>

std::vector<int>::iterator foo();
void bar(void*) {}

int main()
{
void* p;
while (foo() != foo() && (p = 0, true))
{
bar(p);
}
return 0;
}


Results in error:




c:usersjessepeppersourcerepostestcodeconsoleapplication1consoleapplication1.cpp(15): error C4703: potentially uninitialized local pointer variable 'p' used








c++ visual-studio compiler-bug






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 8 '18 at 8:11









Jesse PepperJesse Pepper

2,4992342




2,4992342








  • 5





    Upvoted, but can you give a slightly less convoluted and more motivating example?

    – StoryTeller
    Mar 8 '18 at 8:13






  • 1





    What would you expect?

    – Serge Ballesta
    Mar 8 '18 at 8:26






  • 1





    I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

    – Oliv
    Mar 8 '18 at 8:34






  • 1





    @M.M it should certainly compile though, yet it doesn't.

    – Quentin
    Mar 8 '18 at 9:05






  • 1





    Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

    – i486
    Mar 8 '18 at 9:13
















  • 5





    Upvoted, but can you give a slightly less convoluted and more motivating example?

    – StoryTeller
    Mar 8 '18 at 8:13






  • 1





    What would you expect?

    – Serge Ballesta
    Mar 8 '18 at 8:26






  • 1





    I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

    – Oliv
    Mar 8 '18 at 8:34






  • 1





    @M.M it should certainly compile though, yet it doesn't.

    – Quentin
    Mar 8 '18 at 9:05






  • 1





    Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

    – i486
    Mar 8 '18 at 9:13










5




5





Upvoted, but can you give a slightly less convoluted and more motivating example?

– StoryTeller
Mar 8 '18 at 8:13





Upvoted, but can you give a slightly less convoluted and more motivating example?

– StoryTeller
Mar 8 '18 at 8:13




1




1





What would you expect?

– Serge Ballesta
Mar 8 '18 at 8:26





What would you expect?

– Serge Ballesta
Mar 8 '18 at 8:26




1




1





I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

– Oliv
Mar 8 '18 at 8:34





I don't see how the value of p could be accessed before it is initialized. Moreover on the version of MSVC on compiler explorer, the code just compile without error link. Certainly a compiler bug.

– Oliv
Mar 8 '18 at 8:34




1




1





@M.M it should certainly compile though, yet it doesn't.

– Quentin
Mar 8 '18 at 9:05





@M.M it should certainly compile though, yet it doesn't.

– Quentin
Mar 8 '18 at 9:05




1




1





Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

– i486
Mar 8 '18 at 9:13







Did not understand why you need this while (foo() != foo() && (p = 0, true)), especially (p = 0, true) part? To test a "trick" and make program less readable? Why not !(p = 0) instead of (p = 0, true)?

– i486
Mar 8 '18 at 9:13














3 Answers
3






active

oldest

votes


















4














I did some experimenting with VC++2017 Preview.



It's definitely a bug bug. It makes it impossible to compile and link code that might be correct, albetit smelly.



A warning would be acceptable. (See @SebastianRedl answer.) But in the latest and greatest VC++2017, it is being treated as an error, not warning, even with warnings turned off, and "Treat warnings as errors" set to No. Something odd is happening. The "error" is being thrown late - after it says, "Generating code". I would guess, and it's only a guess, that the "Generating code" pass is doing global analysis to determine if un-initialized access is possible, and it's getting it wrong. Even then, you should be able to disable the error, IMO.



I do not know if this is new behavior. Reading Sebastian's answer, I presume it is. When I get any kind of warning at any level, I always fix it in the code, so I would not know.



Jesse, click on the triangular flag near the top right of Visual Studio, and report it.






share|improve this answer

































    6














    It's kind of a bug, but very typical for the kind of code you write.



    First, this isn't an error, it's a warning. C4703 is a level 4 warning (meaning that it isn't even enabled by default). So in order to get it reported as an error (and thus interrupt compilation), compiler arguments or pragmas were passed to enable this warning and turn it into an error (/W4 and /Werror are the most likely I think).



    Then there's a trade-off in the compiler. How complex should the data flow analysis be to determine whether a variable is actually uninitialized? Should it be interprocedural? The more complex it is, the slower the compiler gets (and because of the halting problem, the issue may be undecidable anyway). The simpler it is, the more false positives you get because the condition that guarantees initialization is too complex for the compiler to understand.



    In this case, I suspect that the compiler's analysis works as follows: the assignment to p is behind a conditional (it only happens if foo() != foo()). The usage of p is also behind a conditional (it only happens if that complex and-expression is true). The compiler cannot establish a relationship between these conditions (the analysis is not complex enough to realize that foo() != foo() is a precondition to the entire while loop condition being true). Thus, the compiler errs on the side of assuming that the access could happen without prior initialization and emits the warning.



    So it's an engineering trade-off. You could report the bug, but if you do, I suggest you supply a more compelling real-world example of idiomatic code to argue in favor of making the analysis more complex. Are you sure you can't restructure your original code to make it more approachable to the compiler, and more readable for humans at the same time?






    share|improve this answer
























    • I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

      – Jive Dadson
      Mar 8 '18 at 9:12













    • Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

      – Jive Dadson
      Mar 8 '18 at 9:17








    • 1





      @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

      – Sebastian Redl
      Mar 8 '18 at 9:54











    • I started to, but I decided it was easier to let Jesse do it.

      – Jive Dadson
      Mar 8 '18 at 9:55



















    1














    For sure it's a bug. I tried to remove it in all possible ways, including #pragma. The real thing is that this is reported as an error, not as a warning as Microsoft say. This is a big mistake from Microsoft. It's NOT a WARNING, it's an ERROR. Please, do not repeat again that it's a warning, because it's NOT.
    What I'm doing is trying to compile some third party library whose sources I do not want to fix in any way, and should compile in normal cases, but it DOESN'T compile in VS2017 because the infamous "error C4703: potentially uninitialized local pointer variable *** used".
    Someone found a solution for that?






    share|improve this answer



















    • 1





      Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

      – MSalters
      Aug 27 '18 at 15:39











    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49168300%2fis-this-a-compiler-bug-in-msvc-2017-update-3%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    4














    I did some experimenting with VC++2017 Preview.



    It's definitely a bug bug. It makes it impossible to compile and link code that might be correct, albetit smelly.



    A warning would be acceptable. (See @SebastianRedl answer.) But in the latest and greatest VC++2017, it is being treated as an error, not warning, even with warnings turned off, and "Treat warnings as errors" set to No. Something odd is happening. The "error" is being thrown late - after it says, "Generating code". I would guess, and it's only a guess, that the "Generating code" pass is doing global analysis to determine if un-initialized access is possible, and it's getting it wrong. Even then, you should be able to disable the error, IMO.



    I do not know if this is new behavior. Reading Sebastian's answer, I presume it is. When I get any kind of warning at any level, I always fix it in the code, so I would not know.



    Jesse, click on the triangular flag near the top right of Visual Studio, and report it.






    share|improve this answer






























      4














      I did some experimenting with VC++2017 Preview.



      It's definitely a bug bug. It makes it impossible to compile and link code that might be correct, albetit smelly.



      A warning would be acceptable. (See @SebastianRedl answer.) But in the latest and greatest VC++2017, it is being treated as an error, not warning, even with warnings turned off, and "Treat warnings as errors" set to No. Something odd is happening. The "error" is being thrown late - after it says, "Generating code". I would guess, and it's only a guess, that the "Generating code" pass is doing global analysis to determine if un-initialized access is possible, and it's getting it wrong. Even then, you should be able to disable the error, IMO.



      I do not know if this is new behavior. Reading Sebastian's answer, I presume it is. When I get any kind of warning at any level, I always fix it in the code, so I would not know.



      Jesse, click on the triangular flag near the top right of Visual Studio, and report it.






      share|improve this answer




























        4












        4








        4







        I did some experimenting with VC++2017 Preview.



        It's definitely a bug bug. It makes it impossible to compile and link code that might be correct, albetit smelly.



        A warning would be acceptable. (See @SebastianRedl answer.) But in the latest and greatest VC++2017, it is being treated as an error, not warning, even with warnings turned off, and "Treat warnings as errors" set to No. Something odd is happening. The "error" is being thrown late - after it says, "Generating code". I would guess, and it's only a guess, that the "Generating code" pass is doing global analysis to determine if un-initialized access is possible, and it's getting it wrong. Even then, you should be able to disable the error, IMO.



        I do not know if this is new behavior. Reading Sebastian's answer, I presume it is. When I get any kind of warning at any level, I always fix it in the code, so I would not know.



        Jesse, click on the triangular flag near the top right of Visual Studio, and report it.






        share|improve this answer















        I did some experimenting with VC++2017 Preview.



        It's definitely a bug bug. It makes it impossible to compile and link code that might be correct, albetit smelly.



        A warning would be acceptable. (See @SebastianRedl answer.) But in the latest and greatest VC++2017, it is being treated as an error, not warning, even with warnings turned off, and "Treat warnings as errors" set to No. Something odd is happening. The "error" is being thrown late - after it says, "Generating code". I would guess, and it's only a guess, that the "Generating code" pass is doing global analysis to determine if un-initialized access is possible, and it's getting it wrong. Even then, you should be able to disable the error, IMO.



        I do not know if this is new behavior. Reading Sebastian's answer, I presume it is. When I get any kind of warning at any level, I always fix it in the code, so I would not know.



        Jesse, click on the triangular flag near the top right of Visual Studio, and report it.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Mar 8 '18 at 9:54

























        answered Mar 8 '18 at 9:27









        Jive DadsonJive Dadson

        11.5k74259




        11.5k74259

























            6














            It's kind of a bug, but very typical for the kind of code you write.



            First, this isn't an error, it's a warning. C4703 is a level 4 warning (meaning that it isn't even enabled by default). So in order to get it reported as an error (and thus interrupt compilation), compiler arguments or pragmas were passed to enable this warning and turn it into an error (/W4 and /Werror are the most likely I think).



            Then there's a trade-off in the compiler. How complex should the data flow analysis be to determine whether a variable is actually uninitialized? Should it be interprocedural? The more complex it is, the slower the compiler gets (and because of the halting problem, the issue may be undecidable anyway). The simpler it is, the more false positives you get because the condition that guarantees initialization is too complex for the compiler to understand.



            In this case, I suspect that the compiler's analysis works as follows: the assignment to p is behind a conditional (it only happens if foo() != foo()). The usage of p is also behind a conditional (it only happens if that complex and-expression is true). The compiler cannot establish a relationship between these conditions (the analysis is not complex enough to realize that foo() != foo() is a precondition to the entire while loop condition being true). Thus, the compiler errs on the side of assuming that the access could happen without prior initialization and emits the warning.



            So it's an engineering trade-off. You could report the bug, but if you do, I suggest you supply a more compelling real-world example of idiomatic code to argue in favor of making the analysis more complex. Are you sure you can't restructure your original code to make it more approachable to the compiler, and more readable for humans at the same time?






            share|improve this answer
























            • I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

              – Jive Dadson
              Mar 8 '18 at 9:12













            • Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

              – Jive Dadson
              Mar 8 '18 at 9:17








            • 1





              @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

              – Sebastian Redl
              Mar 8 '18 at 9:54











            • I started to, but I decided it was easier to let Jesse do it.

              – Jive Dadson
              Mar 8 '18 at 9:55
















            6














            It's kind of a bug, but very typical for the kind of code you write.



            First, this isn't an error, it's a warning. C4703 is a level 4 warning (meaning that it isn't even enabled by default). So in order to get it reported as an error (and thus interrupt compilation), compiler arguments or pragmas were passed to enable this warning and turn it into an error (/W4 and /Werror are the most likely I think).



            Then there's a trade-off in the compiler. How complex should the data flow analysis be to determine whether a variable is actually uninitialized? Should it be interprocedural? The more complex it is, the slower the compiler gets (and because of the halting problem, the issue may be undecidable anyway). The simpler it is, the more false positives you get because the condition that guarantees initialization is too complex for the compiler to understand.



            In this case, I suspect that the compiler's analysis works as follows: the assignment to p is behind a conditional (it only happens if foo() != foo()). The usage of p is also behind a conditional (it only happens if that complex and-expression is true). The compiler cannot establish a relationship between these conditions (the analysis is not complex enough to realize that foo() != foo() is a precondition to the entire while loop condition being true). Thus, the compiler errs on the side of assuming that the access could happen without prior initialization and emits the warning.



            So it's an engineering trade-off. You could report the bug, but if you do, I suggest you supply a more compelling real-world example of idiomatic code to argue in favor of making the analysis more complex. Are you sure you can't restructure your original code to make it more approachable to the compiler, and more readable for humans at the same time?






            share|improve this answer
























            • I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

              – Jive Dadson
              Mar 8 '18 at 9:12













            • Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

              – Jive Dadson
              Mar 8 '18 at 9:17








            • 1





              @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

              – Sebastian Redl
              Mar 8 '18 at 9:54











            • I started to, but I decided it was easier to let Jesse do it.

              – Jive Dadson
              Mar 8 '18 at 9:55














            6












            6








            6







            It's kind of a bug, but very typical for the kind of code you write.



            First, this isn't an error, it's a warning. C4703 is a level 4 warning (meaning that it isn't even enabled by default). So in order to get it reported as an error (and thus interrupt compilation), compiler arguments or pragmas were passed to enable this warning and turn it into an error (/W4 and /Werror are the most likely I think).



            Then there's a trade-off in the compiler. How complex should the data flow analysis be to determine whether a variable is actually uninitialized? Should it be interprocedural? The more complex it is, the slower the compiler gets (and because of the halting problem, the issue may be undecidable anyway). The simpler it is, the more false positives you get because the condition that guarantees initialization is too complex for the compiler to understand.



            In this case, I suspect that the compiler's analysis works as follows: the assignment to p is behind a conditional (it only happens if foo() != foo()). The usage of p is also behind a conditional (it only happens if that complex and-expression is true). The compiler cannot establish a relationship between these conditions (the analysis is not complex enough to realize that foo() != foo() is a precondition to the entire while loop condition being true). Thus, the compiler errs on the side of assuming that the access could happen without prior initialization and emits the warning.



            So it's an engineering trade-off. You could report the bug, but if you do, I suggest you supply a more compelling real-world example of idiomatic code to argue in favor of making the analysis more complex. Are you sure you can't restructure your original code to make it more approachable to the compiler, and more readable for humans at the same time?






            share|improve this answer













            It's kind of a bug, but very typical for the kind of code you write.



            First, this isn't an error, it's a warning. C4703 is a level 4 warning (meaning that it isn't even enabled by default). So in order to get it reported as an error (and thus interrupt compilation), compiler arguments or pragmas were passed to enable this warning and turn it into an error (/W4 and /Werror are the most likely I think).



            Then there's a trade-off in the compiler. How complex should the data flow analysis be to determine whether a variable is actually uninitialized? Should it be interprocedural? The more complex it is, the slower the compiler gets (and because of the halting problem, the issue may be undecidable anyway). The simpler it is, the more false positives you get because the condition that guarantees initialization is too complex for the compiler to understand.



            In this case, I suspect that the compiler's analysis works as follows: the assignment to p is behind a conditional (it only happens if foo() != foo()). The usage of p is also behind a conditional (it only happens if that complex and-expression is true). The compiler cannot establish a relationship between these conditions (the analysis is not complex enough to realize that foo() != foo() is a precondition to the entire while loop condition being true). Thus, the compiler errs on the side of assuming that the access could happen without prior initialization and emits the warning.



            So it's an engineering trade-off. You could report the bug, but if you do, I suggest you supply a more compelling real-world example of idiomatic code to argue in favor of making the analysis more complex. Are you sure you can't restructure your original code to make it more approachable to the compiler, and more readable for humans at the same time?







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Mar 8 '18 at 8:55









            Sebastian RedlSebastian Redl

            50.2k476116




            50.2k476116













            • I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

              – Jive Dadson
              Mar 8 '18 at 9:12













            • Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

              – Jive Dadson
              Mar 8 '18 at 9:17








            • 1





              @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

              – Sebastian Redl
              Mar 8 '18 at 9:54











            • I started to, but I decided it was easier to let Jesse do it.

              – Jive Dadson
              Mar 8 '18 at 9:55



















            • I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

              – Jive Dadson
              Mar 8 '18 at 9:12













            • Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

              – Jive Dadson
              Mar 8 '18 at 9:17








            • 1





              @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

              – Sebastian Redl
              Mar 8 '18 at 9:54











            • I started to, but I decided it was easier to let Jesse do it.

              – Jive Dadson
              Mar 8 '18 at 9:55

















            I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

            – Jive Dadson
            Mar 8 '18 at 9:12







            I take it back. It's a bug bug, because turning off all warnings does not save the day. It is now a hard error. 1>c:usersdavedocumentsvc++ 2017projectsscratchscratch.cpp(81): error C4703: potentially uninitialized local pointer variable 'p' used Something odd is happening. The "error" is being generated late - perhaps while linking, or maybe duing whole-program optimization.

            – Jive Dadson
            Mar 8 '18 at 9:12















            Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

            – Jive Dadson
            Mar 8 '18 at 9:17







            Ping. It's def. broken. C4703 is reported as an error, not warning. It cannot be disabled. I don't know if this is new behavior or not.

            – Jive Dadson
            Mar 8 '18 at 9:17






            1




            1





            @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

            – Sebastian Redl
            Mar 8 '18 at 9:54





            @JiveDadson Huh, that's interesting. This warning isn't new; it's documented all the way back to VS2012. Best guess is they rewrote the analysis as part of their compiler refactoring and messed up. In that case, you should definitely report a bug.

            – Sebastian Redl
            Mar 8 '18 at 9:54













            I started to, but I decided it was easier to let Jesse do it.

            – Jive Dadson
            Mar 8 '18 at 9:55





            I started to, but I decided it was easier to let Jesse do it.

            – Jive Dadson
            Mar 8 '18 at 9:55











            1














            For sure it's a bug. I tried to remove it in all possible ways, including #pragma. The real thing is that this is reported as an error, not as a warning as Microsoft say. This is a big mistake from Microsoft. It's NOT a WARNING, it's an ERROR. Please, do not repeat again that it's a warning, because it's NOT.
            What I'm doing is trying to compile some third party library whose sources I do not want to fix in any way, and should compile in normal cases, but it DOESN'T compile in VS2017 because the infamous "error C4703: potentially uninitialized local pointer variable *** used".
            Someone found a solution for that?






            share|improve this answer



















            • 1





              Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

              – MSalters
              Aug 27 '18 at 15:39
















            1














            For sure it's a bug. I tried to remove it in all possible ways, including #pragma. The real thing is that this is reported as an error, not as a warning as Microsoft say. This is a big mistake from Microsoft. It's NOT a WARNING, it's an ERROR. Please, do not repeat again that it's a warning, because it's NOT.
            What I'm doing is trying to compile some third party library whose sources I do not want to fix in any way, and should compile in normal cases, but it DOESN'T compile in VS2017 because the infamous "error C4703: potentially uninitialized local pointer variable *** used".
            Someone found a solution for that?






            share|improve this answer



















            • 1





              Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

              – MSalters
              Aug 27 '18 at 15:39














            1












            1








            1







            For sure it's a bug. I tried to remove it in all possible ways, including #pragma. The real thing is that this is reported as an error, not as a warning as Microsoft say. This is a big mistake from Microsoft. It's NOT a WARNING, it's an ERROR. Please, do not repeat again that it's a warning, because it's NOT.
            What I'm doing is trying to compile some third party library whose sources I do not want to fix in any way, and should compile in normal cases, but it DOESN'T compile in VS2017 because the infamous "error C4703: potentially uninitialized local pointer variable *** used".
            Someone found a solution for that?






            share|improve this answer













            For sure it's a bug. I tried to remove it in all possible ways, including #pragma. The real thing is that this is reported as an error, not as a warning as Microsoft say. This is a big mistake from Microsoft. It's NOT a WARNING, it's an ERROR. Please, do not repeat again that it's a warning, because it's NOT.
            What I'm doing is trying to compile some third party library whose sources I do not want to fix in any way, and should compile in normal cases, but it DOESN'T compile in VS2017 because the infamous "error C4703: potentially uninitialized local pointer variable *** used".
            Someone found a solution for that?







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Aug 27 '18 at 15:33









            Rob MelRob Mel

            111




            111








            • 1





              Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

              – MSalters
              Aug 27 '18 at 15:39














            • 1





              Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

              – MSalters
              Aug 27 '18 at 15:39








            1




            1





            Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

            – MSalters
            Aug 27 '18 at 15:39





            Hi Rob, this appears to repeat what Jive Dadson wrote 5 months ago. You can't vote for his answer yet (as you're new here) but that's how you can indicate in the future that an existing answer is correct.

            – MSalters
            Aug 27 '18 at 15:39


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49168300%2fis-this-a-compiler-bug-in-msvc-2017-update-3%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

            Alcedinidae

            Origin of the phrase “under your belt”?